108 строки
2.7 KiB
C
108 строки
2.7 KiB
C
// SPDX-License-Identifier: GPL-2.0
|
|
|
|
#ifndef __SPRD_MCDT_H
|
|
#define __SPRD_MCDT_H
|
|
|
|
enum sprd_mcdt_channel_type {
|
|
SPRD_MCDT_DAC_CHAN,
|
|
SPRD_MCDT_ADC_CHAN,
|
|
SPRD_MCDT_UNKNOWN_CHAN,
|
|
};
|
|
|
|
enum sprd_mcdt_dma_chan {
|
|
SPRD_MCDT_DMA_CH0,
|
|
SPRD_MCDT_DMA_CH1,
|
|
SPRD_MCDT_DMA_CH2,
|
|
SPRD_MCDT_DMA_CH3,
|
|
SPRD_MCDT_DMA_CH4,
|
|
};
|
|
|
|
struct sprd_mcdt_chan_callback {
|
|
void (*notify)(void *data);
|
|
void *data;
|
|
};
|
|
|
|
/**
|
|
* struct sprd_mcdt_chan - this struct represents a single channel instance
|
|
* @mcdt: the mcdt controller
|
|
* @id: channel id
|
|
* @fifo_phys: channel fifo physical address which is used for DMA transfer
|
|
* @type: channel type
|
|
* @cb: channel fifo interrupt's callback interface to notify the fifo events
|
|
* @dma_enable: indicate if use DMA mode to transfer data
|
|
* @int_enable: indicate if use interrupt mode to notify users to read or
|
|
* write data manually
|
|
* @list: used to link into the global list
|
|
*
|
|
* Note: users should not modify any members of this structure.
|
|
*/
|
|
struct sprd_mcdt_chan {
|
|
struct sprd_mcdt_dev *mcdt;
|
|
u8 id;
|
|
unsigned long fifo_phys;
|
|
enum sprd_mcdt_channel_type type;
|
|
enum sprd_mcdt_dma_chan dma_chan;
|
|
struct sprd_mcdt_chan_callback *cb;
|
|
bool dma_enable;
|
|
bool int_enable;
|
|
struct list_head list;
|
|
};
|
|
|
|
#if IS_ENABLED(CONFIG_SND_SOC_SPRD_MCDT)
|
|
struct sprd_mcdt_chan *sprd_mcdt_request_chan(u8 channel,
|
|
enum sprd_mcdt_channel_type type);
|
|
void sprd_mcdt_free_chan(struct sprd_mcdt_chan *chan);
|
|
|
|
int sprd_mcdt_chan_write(struct sprd_mcdt_chan *chan, char *tx_buf, u32 size);
|
|
int sprd_mcdt_chan_read(struct sprd_mcdt_chan *chan, char *rx_buf, u32 size);
|
|
int sprd_mcdt_chan_int_enable(struct sprd_mcdt_chan *chan, u32 water_mark,
|
|
struct sprd_mcdt_chan_callback *cb);
|
|
void sprd_mcdt_chan_int_disable(struct sprd_mcdt_chan *chan);
|
|
|
|
int sprd_mcdt_chan_dma_enable(struct sprd_mcdt_chan *chan,
|
|
enum sprd_mcdt_dma_chan dma_chan, u32 water_mark);
|
|
void sprd_mcdt_chan_dma_disable(struct sprd_mcdt_chan *chan);
|
|
|
|
#else
|
|
|
|
struct sprd_mcdt_chan *sprd_mcdt_request_chan(u8 channel,
|
|
enum sprd_mcdt_channel_type type)
|
|
{
|
|
return NULL;
|
|
}
|
|
|
|
void sprd_mcdt_free_chan(struct sprd_mcdt_chan *chan)
|
|
{ }
|
|
|
|
int sprd_mcdt_chan_write(struct sprd_mcdt_chan *chan, char *tx_buf, u32 size)
|
|
{
|
|
return -EINVAL;
|
|
}
|
|
|
|
int sprd_mcdt_chan_read(struct sprd_mcdt_chan *chan, char *rx_buf, u32 size)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
int sprd_mcdt_chan_int_enable(struct sprd_mcdt_chan *chan, u32 water_mark,
|
|
struct sprd_mcdt_chan_callback *cb)
|
|
{
|
|
return -EINVAL;
|
|
}
|
|
|
|
void sprd_mcdt_chan_int_disable(struct sprd_mcdt_chan *chan)
|
|
{ }
|
|
|
|
int sprd_mcdt_chan_dma_enable(struct sprd_mcdt_chan *chan,
|
|
enum sprd_mcdt_dma_chan dma_chan, u32 water_mark)
|
|
{
|
|
return -EINVAL;
|
|
}
|
|
|
|
void sprd_mcdt_chan_dma_disable(struct sprd_mcdt_chan *chan)
|
|
{ }
|
|
|
|
#endif
|
|
|
|
#endif /* __SPRD_MCDT_H */
|