// SPDX-License-Identifier: GPL-2.0 #ifndef __SPRD_PCM_DMA_H #define __SPRD_PCM_DMA_H #define DRV_NAME "sprd_pcm_dma" #define SPRD_PCM_CHANNEL_MAX 2 extern const struct snd_compr_ops sprd_platform_compr_ops; struct sprd_pcm_dma_params { dma_addr_t dev_phys[SPRD_PCM_CHANNEL_MAX]; u32 datawidth[SPRD_PCM_CHANNEL_MAX]; u32 fragment_len[SPRD_PCM_CHANNEL_MAX]; const char *chan_name[SPRD_PCM_CHANNEL_MAX]; }; struct sprd_compr_playinfo { int total_time; int current_time; int total_data_length; int current_data_offset; }; struct sprd_compr_params { u32 direction; u32 rate; u32 sample_rate; u32 channels; u32 format; u32 period; u32 periods; u32 info_phys; u32 info_size; }; struct sprd_compr_callback { void (*drain_notify)(void *data); void *drain_data; }; struct sprd_compr_ops { int (*open)(int str_id, struct sprd_compr_callback *cb); int (*close)(int str_id); int (*start)(int str_id); int (*stop)(int str_id); int (*pause)(int str_id); int (*pause_release)(int str_id); int (*drain)(int received_total); int (*set_params)(int str_id, struct sprd_compr_params *params); }; struct sprd_compr_data { struct sprd_compr_ops *ops; struct sprd_pcm_dma_params *dma_params; }; #endif /* __SPRD_PCM_DMA_H */