0001
0002
0003
0004
0005
0006
0007 #ifndef _FSL_ASRC_COMMON_H
0008 #define _FSL_ASRC_COMMON_H
0009
0010
0011 #define IN 0
0012 #define OUT 1
0013
0014 enum asrc_pair_index {
0015 ASRC_INVALID_PAIR = -1,
0016 ASRC_PAIR_A = 0,
0017 ASRC_PAIR_B = 1,
0018 ASRC_PAIR_C = 2,
0019 ASRC_PAIR_D = 3,
0020 };
0021
0022 #define PAIR_CTX_NUM 0x4
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038 struct fsl_asrc_pair {
0039 struct fsl_asrc *asrc;
0040 unsigned int error;
0041
0042 enum asrc_pair_index index;
0043 unsigned int channels;
0044
0045 struct dma_async_tx_descriptor *desc[2];
0046 struct dma_chan *dma_chan[2];
0047 struct imx_dma_data dma_data;
0048 unsigned int pos;
0049 bool req_dma_chan;
0050
0051 void *private;
0052 };
0053
0054
0055
0056
0057
0058
0059
0060
0061
0062
0063
0064
0065
0066
0067
0068
0069
0070
0071
0072
0073
0074
0075
0076
0077
0078 struct fsl_asrc {
0079 struct snd_dmaengine_dai_dma_data dma_params_rx;
0080 struct snd_dmaengine_dai_dma_data dma_params_tx;
0081 struct platform_device *pdev;
0082 struct regmap *regmap;
0083 unsigned long paddr;
0084 struct clk *mem_clk;
0085 struct clk *ipg_clk;
0086 struct clk *spba_clk;
0087 spinlock_t lock;
0088
0089 struct fsl_asrc_pair *pair[PAIR_CTX_NUM];
0090 unsigned int channel_avail;
0091
0092 int asrc_rate;
0093 snd_pcm_format_t asrc_format;
0094 bool use_edma;
0095
0096 struct dma_chan *(*get_dma_channel)(struct fsl_asrc_pair *pair, bool dir);
0097 int (*request_pair)(int channels, struct fsl_asrc_pair *pair);
0098 void (*release_pair)(struct fsl_asrc_pair *pair);
0099 int (*get_fifo_addr)(u8 dir, enum asrc_pair_index index);
0100 size_t pair_priv_size;
0101
0102 void *private;
0103 };
0104
0105 #define DRV_NAME "fsl-asrc-dai"
0106 extern struct snd_soc_component_driver fsl_asrc_component;
0107
0108 #endif