sprd-mcdt.h (2780B)
1// SPDX-License-Identifier: GPL-2.0 2 3#ifndef __SPRD_MCDT_H 4#define __SPRD_MCDT_H 5 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 instance 27 * @mcdt: the mcdt controller 28 * @id: channel id 29 * @fifo_phys: channel fifo physical address which is used for DMA transfer 30 * @type: channel type 31 * @cb: channel fifo interrupt's callback interface to notify the fifo events 32 * @dma_enable: indicate if use DMA mode to transfer data 33 * @int_enable: indicate if use interrupt mode to notify users to read or 34 * write data manually 35 * @list: used to link into the global list 36 * 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#else 67 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#endif 106 107#endif /* __SPRD_MCDT_H */