sound/soc/ti/davinci-mcasp.c

Source file repositories/reference/linux-study-clean/sound/soc/ti/davinci-mcasp.c

File Facts

System
Linux kernel
Corpus path
sound/soc/ti/davinci-mcasp.c
Extension
.c
Size
83489 bytes
Lines
3042
Domain
Driver Families
Bucket
sound/soc
Inferred role
Driver Families: implementation source
Status
source implementation candidate

Why This File Exists

Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.

Dependency Surface

Detected Declarations

Annotated Snippet

struct davinci_mcasp_context {
	u32	config_regs[ARRAY_SIZE(context_regs)];
	u32	afifo_regs[2]; /* for read/write fifo control registers */
	u32	*xrsr_regs; /* for serializer configuration */
	bool	pm_state;
};
#endif

struct davinci_mcasp_ruledata {
	struct davinci_mcasp *mcasp;
	int serializers;
	int stream;
};

enum mcasp_graph_mode {
	MCASP_GRAPH_NONE,	/* 1:1, simple-audio-card, no of-graph endpoints */
	MCASP_GRAPH_PORT,	/* 1:1, audio-graph-card: port { endpoint } */
	MCASP_GRAPH_PORTS,	/* 1:N, audio-graph-card2 non-DPCM: ports { port@0; ... } */
	MCASP_GRAPH_DPCM,	/* N:M, audio-graph-card2 DPCM: N FE DAIs, detected via */
				/* remote "dpcm" node in the sound card DT */
};

struct davinci_mcasp {
	struct snd_dmaengine_dai_dma_data dma_data[2];
	struct davinci_mcasp_pdata *pdata;
	void __iomem *base;
	u32 fifo_base;
	struct device *dev;
	struct snd_pcm_substream *substreams[2];
	unsigned int dai_fmt;

	u32 iec958_status;

	/* Audio can not be enabled due to missing parameter(s) */
	bool	missing_audio_param;

	/* McASP specific data */
	int	tdm_slots_tx;
	int	tdm_slots_rx;
	u32	tdm_mask[2];
	int	slot_width_tx;
	int	slot_width_rx;
	u8	op_mode;
	u8	dismod;
	u8	num_serializer;
	u8	*serial_dir;
	u8	version;
	u8	bclk_div_tx;
	u8	bclk_div_rx;
	int	streams;
	u32	irq_request[2];

	unsigned int	sysclk_freq_tx;
	unsigned int	sysclk_freq_rx;
	bool	bclk_master;
	bool	async_mode;
	u32	auxclk_fs_ratio_tx;
	u32	auxclk_fs_ratio_rx;

	unsigned long pdir; /* Pin direction bitfield */

	/* McASP FIFO related */
	u8	txnumevt;
	u8	rxnumevt;

	bool	dat_port;

	/* Used for comstraint setting on the second stream */
	u32	channels;
	int	max_format_width;
	u8	active_serializers[2];

	/* Audio graph support */
	enum mcasp_graph_mode graph_mode;
	int	num_dais;

#ifdef CONFIG_GPIOLIB
	struct gpio_chip gpio_chip;
#endif

#ifdef CONFIG_PM
	struct davinci_mcasp_context context;
#endif

	struct davinci_mcasp_ruledata ruledata[2];
	struct snd_pcm_hw_constraint_list chconstr[2];
};

static inline void mcasp_set_bits(struct davinci_mcasp *mcasp, u32 offset,
				  u32 val)

Annotation

Implementation Notes