brintos

brintos / linux-shallow public Read only

0
0
Text · 2.7 KiB · 679e3af Raw
108 lines · c
1// SPDX-License-Identifier: GPL-2.02 3#ifndef __SPRD_MCDT_H4#define __SPRD_MCDT_H5 6enum sprd_mcdt_channel_type {7	SPRD_MCDT_DAC_CHAN,8	SPRD_MCDT_ADC_CHAN,9	SPRD_MCDT_UNKNOWN_CHAN,10};11 12enum sprd_mcdt_dma_chan {13	SPRD_MCDT_DMA_CH0,14	SPRD_MCDT_DMA_CH1,15	SPRD_MCDT_DMA_CH2,16	SPRD_MCDT_DMA_CH3,17	SPRD_MCDT_DMA_CH4,18};19 20struct sprd_mcdt_chan_callback {21	void (*notify)(void *data);22	void *data;23};24 25/**26 * struct sprd_mcdt_chan - this struct represents a single channel instance27 * @mcdt: the mcdt controller28 * @id: channel id29 * @fifo_phys: channel fifo physical address which is used for DMA transfer30 * @type: channel type31 * @cb: channel fifo interrupt's callback interface to notify the fifo events32 * @dma_enable: indicate if use DMA mode to transfer data33 * @int_enable: indicate if use interrupt mode to notify users to read or34 * write data manually35 * @list: used to link into the global list36 *37 * Note: users should not modify any members of this structure.38 */39struct sprd_mcdt_chan {40	struct sprd_mcdt_dev *mcdt;41	u8 id;42	unsigned long fifo_phys;43	enum sprd_mcdt_channel_type type;44	enum sprd_mcdt_dma_chan dma_chan;45	struct sprd_mcdt_chan_callback *cb;46	bool dma_enable;47	bool int_enable;48	struct list_head list;49};50 51#if IS_ENABLED(CONFIG_SND_SOC_SPRD_MCDT)52struct sprd_mcdt_chan *sprd_mcdt_request_chan(u8 channel,53					      enum sprd_mcdt_channel_type type);54void sprd_mcdt_free_chan(struct sprd_mcdt_chan *chan);55 56int sprd_mcdt_chan_write(struct sprd_mcdt_chan *chan, char *tx_buf, u32 size);57int sprd_mcdt_chan_read(struct sprd_mcdt_chan *chan, char *rx_buf, u32 size);58int sprd_mcdt_chan_int_enable(struct sprd_mcdt_chan *chan, u32 water_mark,59			      struct sprd_mcdt_chan_callback *cb);60void sprd_mcdt_chan_int_disable(struct sprd_mcdt_chan *chan);61 62int sprd_mcdt_chan_dma_enable(struct sprd_mcdt_chan *chan,63			      enum sprd_mcdt_dma_chan dma_chan, u32 water_mark);64void sprd_mcdt_chan_dma_disable(struct sprd_mcdt_chan *chan);65 66#else67 68struct sprd_mcdt_chan *sprd_mcdt_request_chan(u8 channel,69					      enum sprd_mcdt_channel_type type)70{71	return NULL;72}73 74void sprd_mcdt_free_chan(struct sprd_mcdt_chan *chan)75{ }76 77int sprd_mcdt_chan_write(struct sprd_mcdt_chan *chan, char *tx_buf, u32 size)78{79	return -EINVAL;80}81 82int sprd_mcdt_chan_read(struct sprd_mcdt_chan *chan, char *rx_buf, u32 size)83{84	return 0;85}86 87int sprd_mcdt_chan_int_enable(struct sprd_mcdt_chan *chan, u32 water_mark,88			      struct sprd_mcdt_chan_callback *cb)89{90	return -EINVAL;91}92 93void sprd_mcdt_chan_int_disable(struct sprd_mcdt_chan *chan)94{ }95 96int sprd_mcdt_chan_dma_enable(struct sprd_mcdt_chan *chan,97			      enum sprd_mcdt_dma_chan dma_chan, u32 water_mark)98{99	return -EINVAL;100}101 102void sprd_mcdt_chan_dma_disable(struct sprd_mcdt_chan *chan)103{ }104 105#endif106 107#endif /* __SPRD_MCDT_H */108