Linux Audio

Check our new training course

Embedded Linux training

Mar 31-Apr 8, 2025
Register
Loading...
Note: File does not exist in v4.17.
  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 */