18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0 28c2ecf20Sopenharmony_ci 38c2ecf20Sopenharmony_ci#ifndef __SPRD_MCDT_H 48c2ecf20Sopenharmony_ci#define __SPRD_MCDT_H 58c2ecf20Sopenharmony_ci 68c2ecf20Sopenharmony_cienum sprd_mcdt_channel_type { 78c2ecf20Sopenharmony_ci SPRD_MCDT_DAC_CHAN, 88c2ecf20Sopenharmony_ci SPRD_MCDT_ADC_CHAN, 98c2ecf20Sopenharmony_ci SPRD_MCDT_UNKNOWN_CHAN, 108c2ecf20Sopenharmony_ci}; 118c2ecf20Sopenharmony_ci 128c2ecf20Sopenharmony_cienum sprd_mcdt_dma_chan { 138c2ecf20Sopenharmony_ci SPRD_MCDT_DMA_CH0, 148c2ecf20Sopenharmony_ci SPRD_MCDT_DMA_CH1, 158c2ecf20Sopenharmony_ci SPRD_MCDT_DMA_CH2, 168c2ecf20Sopenharmony_ci SPRD_MCDT_DMA_CH3, 178c2ecf20Sopenharmony_ci SPRD_MCDT_DMA_CH4, 188c2ecf20Sopenharmony_ci}; 198c2ecf20Sopenharmony_ci 208c2ecf20Sopenharmony_cistruct sprd_mcdt_chan_callback { 218c2ecf20Sopenharmony_ci void (*notify)(void *data); 228c2ecf20Sopenharmony_ci void *data; 238c2ecf20Sopenharmony_ci}; 248c2ecf20Sopenharmony_ci 258c2ecf20Sopenharmony_ci/** 268c2ecf20Sopenharmony_ci * struct sprd_mcdt_chan - this struct represents a single channel instance 278c2ecf20Sopenharmony_ci * @mcdt: the mcdt controller 288c2ecf20Sopenharmony_ci * @id: channel id 298c2ecf20Sopenharmony_ci * @fifo_phys: channel fifo physical address which is used for DMA transfer 308c2ecf20Sopenharmony_ci * @type: channel type 318c2ecf20Sopenharmony_ci * @cb: channel fifo interrupt's callback interface to notify the fifo events 328c2ecf20Sopenharmony_ci * @dma_enable: indicate if use DMA mode to transfer data 338c2ecf20Sopenharmony_ci * @int_enable: indicate if use interrupt mode to notify users to read or 348c2ecf20Sopenharmony_ci * write data manually 358c2ecf20Sopenharmony_ci * @list: used to link into the global list 368c2ecf20Sopenharmony_ci * 378c2ecf20Sopenharmony_ci * Note: users should not modify any members of this structure. 388c2ecf20Sopenharmony_ci */ 398c2ecf20Sopenharmony_cistruct sprd_mcdt_chan { 408c2ecf20Sopenharmony_ci struct sprd_mcdt_dev *mcdt; 418c2ecf20Sopenharmony_ci u8 id; 428c2ecf20Sopenharmony_ci unsigned long fifo_phys; 438c2ecf20Sopenharmony_ci enum sprd_mcdt_channel_type type; 448c2ecf20Sopenharmony_ci enum sprd_mcdt_dma_chan dma_chan; 458c2ecf20Sopenharmony_ci struct sprd_mcdt_chan_callback *cb; 468c2ecf20Sopenharmony_ci bool dma_enable; 478c2ecf20Sopenharmony_ci bool int_enable; 488c2ecf20Sopenharmony_ci struct list_head list; 498c2ecf20Sopenharmony_ci}; 508c2ecf20Sopenharmony_ci 518c2ecf20Sopenharmony_ci#if IS_ENABLED(CONFIG_SND_SOC_SPRD_MCDT) 528c2ecf20Sopenharmony_cistruct sprd_mcdt_chan *sprd_mcdt_request_chan(u8 channel, 538c2ecf20Sopenharmony_ci enum sprd_mcdt_channel_type type); 548c2ecf20Sopenharmony_civoid sprd_mcdt_free_chan(struct sprd_mcdt_chan *chan); 558c2ecf20Sopenharmony_ci 568c2ecf20Sopenharmony_ciint sprd_mcdt_chan_write(struct sprd_mcdt_chan *chan, char *tx_buf, u32 size); 578c2ecf20Sopenharmony_ciint sprd_mcdt_chan_read(struct sprd_mcdt_chan *chan, char *rx_buf, u32 size); 588c2ecf20Sopenharmony_ciint sprd_mcdt_chan_int_enable(struct sprd_mcdt_chan *chan, u32 water_mark, 598c2ecf20Sopenharmony_ci struct sprd_mcdt_chan_callback *cb); 608c2ecf20Sopenharmony_civoid sprd_mcdt_chan_int_disable(struct sprd_mcdt_chan *chan); 618c2ecf20Sopenharmony_ci 628c2ecf20Sopenharmony_ciint sprd_mcdt_chan_dma_enable(struct sprd_mcdt_chan *chan, 638c2ecf20Sopenharmony_ci enum sprd_mcdt_dma_chan dma_chan, u32 water_mark); 648c2ecf20Sopenharmony_civoid sprd_mcdt_chan_dma_disable(struct sprd_mcdt_chan *chan); 658c2ecf20Sopenharmony_ci 668c2ecf20Sopenharmony_ci#else 678c2ecf20Sopenharmony_ci 688c2ecf20Sopenharmony_cistruct sprd_mcdt_chan *sprd_mcdt_request_chan(u8 channel, 698c2ecf20Sopenharmony_ci enum sprd_mcdt_channel_type type) 708c2ecf20Sopenharmony_ci{ 718c2ecf20Sopenharmony_ci return NULL; 728c2ecf20Sopenharmony_ci} 738c2ecf20Sopenharmony_ci 748c2ecf20Sopenharmony_civoid sprd_mcdt_free_chan(struct sprd_mcdt_chan *chan) 758c2ecf20Sopenharmony_ci{ } 768c2ecf20Sopenharmony_ci 778c2ecf20Sopenharmony_ciint sprd_mcdt_chan_write(struct sprd_mcdt_chan *chan, char *tx_buf, u32 size) 788c2ecf20Sopenharmony_ci{ 798c2ecf20Sopenharmony_ci return -EINVAL; 808c2ecf20Sopenharmony_ci} 818c2ecf20Sopenharmony_ci 828c2ecf20Sopenharmony_ciint sprd_mcdt_chan_read(struct sprd_mcdt_chan *chan, char *rx_buf, u32 size) 838c2ecf20Sopenharmony_ci{ 848c2ecf20Sopenharmony_ci return 0; 858c2ecf20Sopenharmony_ci} 868c2ecf20Sopenharmony_ci 878c2ecf20Sopenharmony_ciint sprd_mcdt_chan_int_enable(struct sprd_mcdt_chan *chan, u32 water_mark, 888c2ecf20Sopenharmony_ci struct sprd_mcdt_chan_callback *cb) 898c2ecf20Sopenharmony_ci{ 908c2ecf20Sopenharmony_ci return -EINVAL; 918c2ecf20Sopenharmony_ci} 928c2ecf20Sopenharmony_ci 938c2ecf20Sopenharmony_civoid sprd_mcdt_chan_int_disable(struct sprd_mcdt_chan *chan) 948c2ecf20Sopenharmony_ci{ } 958c2ecf20Sopenharmony_ci 968c2ecf20Sopenharmony_ciint sprd_mcdt_chan_dma_enable(struct sprd_mcdt_chan *chan, 978c2ecf20Sopenharmony_ci enum sprd_mcdt_dma_chan dma_chan, u32 water_mark) 988c2ecf20Sopenharmony_ci{ 998c2ecf20Sopenharmony_ci return -EINVAL; 1008c2ecf20Sopenharmony_ci} 1018c2ecf20Sopenharmony_ci 1028c2ecf20Sopenharmony_civoid sprd_mcdt_chan_dma_disable(struct sprd_mcdt_chan *chan) 1038c2ecf20Sopenharmony_ci{ } 1048c2ecf20Sopenharmony_ci 1058c2ecf20Sopenharmony_ci#endif 1068c2ecf20Sopenharmony_ci 1078c2ecf20Sopenharmony_ci#endif /* __SPRD_MCDT_H */ 108