mirror of https://github.com/Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
108 lines
2.8 KiB
108 lines
2.8 KiB
/* SPDX-License-Identifier: GPL-2.0 */ |
|
/* |
|
* Copyright 2019 NXP |
|
* |
|
*/ |
|
|
|
#ifndef _FSL_ASRC_COMMON_H |
|
#define _FSL_ASRC_COMMON_H |
|
|
|
/* directions */ |
|
#define IN 0 |
|
#define OUT 1 |
|
|
|
enum asrc_pair_index { |
|
ASRC_INVALID_PAIR = -1, |
|
ASRC_PAIR_A = 0, |
|
ASRC_PAIR_B = 1, |
|
ASRC_PAIR_C = 2, |
|
ASRC_PAIR_D = 3, |
|
}; |
|
|
|
#define PAIR_CTX_NUM 0x4 |
|
|
|
/** |
|
* fsl_asrc_pair: ASRC Pair common data |
|
* |
|
* @asrc: pointer to its parent module |
|
* @error: error record |
|
* @index: pair index (ASRC_PAIR_A, ASRC_PAIR_B, ASRC_PAIR_C) |
|
* @channels: occupied channel number |
|
* @desc: input and output dma descriptors |
|
* @dma_chan: inputer and output DMA channels |
|
* @dma_data: private dma data |
|
* @pos: hardware pointer position |
|
* @req_dma_chan: flag to release dev_to_dev chan |
|
* @private: pair private area |
|
*/ |
|
struct fsl_asrc_pair { |
|
struct fsl_asrc *asrc; |
|
unsigned int error; |
|
|
|
enum asrc_pair_index index; |
|
unsigned int channels; |
|
|
|
struct dma_async_tx_descriptor *desc[2]; |
|
struct dma_chan *dma_chan[2]; |
|
struct imx_dma_data dma_data; |
|
unsigned int pos; |
|
bool req_dma_chan; |
|
|
|
void *private; |
|
}; |
|
|
|
/** |
|
* fsl_asrc: ASRC common data |
|
* |
|
* @dma_params_rx: DMA parameters for receive channel |
|
* @dma_params_tx: DMA parameters for transmit channel |
|
* @pdev: platform device pointer |
|
* @regmap: regmap handler |
|
* @paddr: physical address to the base address of registers |
|
* @mem_clk: clock source to access register |
|
* @ipg_clk: clock source to drive peripheral |
|
* @spba_clk: SPBA clock (optional, depending on SoC design) |
|
* @lock: spin lock for resource protection |
|
* @pair: pair pointers |
|
* @channel_avail: non-occupied channel numbers |
|
* @asrc_rate: default sample rate for ASoC Back-Ends |
|
* @asrc_format: default sample format for ASoC Back-Ends |
|
* @use_edma: edma is used |
|
* @get_dma_channel: function pointer |
|
* @request_pair: function pointer |
|
* @release_pair: function pointer |
|
* @get_fifo_addr: function pointer |
|
* @pair_priv_size: size of pair private struct. |
|
* @private: private data structure |
|
*/ |
|
struct fsl_asrc { |
|
struct snd_dmaengine_dai_dma_data dma_params_rx; |
|
struct snd_dmaengine_dai_dma_data dma_params_tx; |
|
struct platform_device *pdev; |
|
struct regmap *regmap; |
|
unsigned long paddr; |
|
struct clk *mem_clk; |
|
struct clk *ipg_clk; |
|
struct clk *spba_clk; |
|
spinlock_t lock; /* spin lock for resource protection */ |
|
|
|
struct fsl_asrc_pair *pair[PAIR_CTX_NUM]; |
|
unsigned int channel_avail; |
|
|
|
int asrc_rate; |
|
snd_pcm_format_t asrc_format; |
|
bool use_edma; |
|
|
|
struct dma_chan *(*get_dma_channel)(struct fsl_asrc_pair *pair, bool dir); |
|
int (*request_pair)(int channels, struct fsl_asrc_pair *pair); |
|
void (*release_pair)(struct fsl_asrc_pair *pair); |
|
int (*get_fifo_addr)(u8 dir, enum asrc_pair_index index); |
|
size_t pair_priv_size; |
|
|
|
void *private; |
|
}; |
|
|
|
#define DRV_NAME "fsl-asrc-dai" |
|
extern struct snd_soc_component_driver fsl_asrc_component; |
|
|
|
#endif /* _FSL_ASRC_COMMON_H */
|
|
|