diff options
Diffstat (limited to 'sound/soc/fsl/fsl_esai_mix.h')
-rw-r--r-- | sound/soc/fsl/fsl_esai_mix.h | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/sound/soc/fsl/fsl_esai_mix.h b/sound/soc/fsl/fsl_esai_mix.h new file mode 100644 index 000000000000..c7d2c74d0bcd --- /dev/null +++ b/sound/soc/fsl/fsl_esai_mix.h @@ -0,0 +1,58 @@ +/* SPDX-License-Identifier: GPL-2.0 */ + +#ifndef _FSL_ESAI_MIX_H +#define _FSL_ESAI_MIX_H + +/* maximum client number is 4; */ +#define MAX_CLIENT_NUM 4 + +/** + * fsl_esai_mix: esai mix/split data + * @chan: dma channel + * @fe_substream: handler of front end substream + * @client: handler of client + * @dma_buffer: structure of dma buffer + * @buffer_offset: read offset of buffer + * @buffer_bytes: buffer size in bytes + * @period_bytes: period size in bytes + * @period_num: period number + * @word_width: word width in bytes + * @channels: channel number + * @client_cnt: client number, default 2. + * @sdo_cnt: output pin number of esai + * @sdi_cnt: input pin number of esai + * @active: mixer is enabled or not + */ +struct fsl_esai_mix { + struct dma_chan *chan; + struct snd_pcm_substream *fe_substream[MAX_CLIENT_NUM]; + struct fsl_esai_client *client[MAX_CLIENT_NUM]; + struct snd_dma_buffer dma_buffer; + struct workqueue_struct *mix_wq; + struct work_struct work; + struct snd_pcm_substream *substream; + dma_cookie_t cookie; + u32 buffer_read_offset; + u32 buffer_write_offset; + u32 buffer_bytes; + u32 period_bytes; + u32 period_num; + u32 word_width; + u32 channels; + u32 client_cnt; + u32 sdo_cnt; + u32 sdi_cnt; + atomic_t active; +}; + +int fsl_esai_mix_hw_params(struct snd_pcm_substream *substream, + struct snd_pcm_hw_params *params, + struct fsl_esai_mix *mix); +int fsl_esai_mix_open(struct snd_pcm_substream *substream, struct fsl_esai_mix *mix); +int fsl_esai_mix_close(struct snd_pcm_substream *substream, struct fsl_esai_mix *mix); +int fsl_esai_mix_trigger(struct snd_pcm_substream *substream, int cmd, + struct fsl_esai_mix *mix); +int fsl_esai_mix_probe(struct device *dev, struct fsl_esai_mix *mix_rx, struct fsl_esai_mix *mix_tx); +int fsl_esai_mix_remove(struct device *dev, struct fsl_esai_mix *mix_rx, struct fsl_esai_mix *mix_tx); + +#endif /* _FSL_ESAI_MIX_H */ |