linux/sound/soc/sprd/sprd-pcm-dma.h
Baolin Wang cce1396936
ASoC: sprd: Add Spreadtrum audio compress offload support
We use 2-stage DMA mode to support Spreadtrum audio compress offload,
which means we use one DMA source channel to transfer data from IRAM
buffer to the DSP fifo to do decoding/encoding, once IRAM buffer is
empty by transferring done, another DMA destination channel will be
triggered automatically to start to transfer data from DDR buffer to
the IRAM buffer. This can reduce the AP subsystem wakeup times to save
power.

Co-developed-by: Yintang Ren <yintang.ren@unisoc.com>
Signed-off-by: Baolin Wang <baolin.wang@linaro.org>
Signed-off-by: Mark Brown <broonie@kernel.org>
2019-04-02 12:57:03 +07:00

59 lines
1.2 KiB
C

// SPDX-License-Identifier: GPL-2.0
#ifndef __SPRD_PCM_DMA_H
#define __SPRD_PCM_DMA_H
#define DRV_NAME "sprd_pcm_dma"
#define SPRD_PCM_CHANNEL_MAX 2
extern const struct snd_compr_ops sprd_platform_compr_ops;
struct sprd_pcm_dma_params {
dma_addr_t dev_phys[SPRD_PCM_CHANNEL_MAX];
u32 datawidth[SPRD_PCM_CHANNEL_MAX];
u32 fragment_len[SPRD_PCM_CHANNEL_MAX];
const char *chan_name[SPRD_PCM_CHANNEL_MAX];
};
struct sprd_compr_playinfo {
int total_time;
int current_time;
int total_data_length;
int current_data_offset;
};
struct sprd_compr_params {
u32 direction;
u32 rate;
u32 sample_rate;
u32 channels;
u32 format;
u32 period;
u32 periods;
u32 info_phys;
u32 info_size;
};
struct sprd_compr_callback {
void (*drain_notify)(void *data);
void *drain_data;
};
struct sprd_compr_ops {
int (*open)(int str_id, struct sprd_compr_callback *cb);
int (*close)(int str_id);
int (*start)(int str_id);
int (*stop)(int str_id);
int (*pause)(int str_id);
int (*pause_release)(int str_id);
int (*drain)(int received_total);
int (*set_params)(int str_id, struct sprd_compr_params *params);
};
struct sprd_compr_data {
struct sprd_compr_ops *ops;
struct sprd_pcm_dma_params *dma_params;
};
#endif /* __SPRD_PCM_DMA_H */