xref: /OK3568_Linux_fs/kernel/sound/soc/uniphier/aio.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * Socionext UniPhier AIO ALSA driver.
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  * Copyright (c) 2016-2018 Socionext Inc.
6*4882a593Smuzhiyun  */
7*4882a593Smuzhiyun 
8*4882a593Smuzhiyun #ifndef SND_UNIPHIER_AIO_H__
9*4882a593Smuzhiyun #define SND_UNIPHIER_AIO_H__
10*4882a593Smuzhiyun 
11*4882a593Smuzhiyun #include <linux/spinlock.h>
12*4882a593Smuzhiyun #include <linux/types.h>
13*4882a593Smuzhiyun #include <sound/pcm.h>
14*4882a593Smuzhiyun #include <sound/soc.h>
15*4882a593Smuzhiyun #include <sound/soc-dai.h>
16*4882a593Smuzhiyun 
17*4882a593Smuzhiyun struct platform_device;
18*4882a593Smuzhiyun 
19*4882a593Smuzhiyun enum ID_PORT_TYPE {
20*4882a593Smuzhiyun 	PORT_TYPE_UNKNOWN,
21*4882a593Smuzhiyun 	PORT_TYPE_I2S,
22*4882a593Smuzhiyun 	PORT_TYPE_SPDIF,
23*4882a593Smuzhiyun 	PORT_TYPE_EVE,
24*4882a593Smuzhiyun 	PORT_TYPE_CONV,
25*4882a593Smuzhiyun };
26*4882a593Smuzhiyun 
27*4882a593Smuzhiyun enum ID_PORT_DIR {
28*4882a593Smuzhiyun 	PORT_DIR_OUTPUT,
29*4882a593Smuzhiyun 	PORT_DIR_INPUT,
30*4882a593Smuzhiyun };
31*4882a593Smuzhiyun 
32*4882a593Smuzhiyun enum IEC61937_PC {
33*4882a593Smuzhiyun 	IEC61937_PC_AC3   = 0x0001,
34*4882a593Smuzhiyun 	IEC61937_PC_PAUSE = 0x0003,
35*4882a593Smuzhiyun 	IEC61937_PC_MPA   = 0x0004,
36*4882a593Smuzhiyun 	IEC61937_PC_MP3   = 0x0005,
37*4882a593Smuzhiyun 	IEC61937_PC_DTS1  = 0x000b,
38*4882a593Smuzhiyun 	IEC61937_PC_DTS2  = 0x000c,
39*4882a593Smuzhiyun 	IEC61937_PC_DTS3  = 0x000d,
40*4882a593Smuzhiyun 	IEC61937_PC_AAC   = 0x0007,
41*4882a593Smuzhiyun };
42*4882a593Smuzhiyun 
43*4882a593Smuzhiyun /* IEC61937 Repetition period of data-burst in IEC60958 frames */
44*4882a593Smuzhiyun #define IEC61937_FRM_STR_AC3       1536
45*4882a593Smuzhiyun #define IEC61937_FRM_STR_MPA       1152
46*4882a593Smuzhiyun #define IEC61937_FRM_STR_MP3       1152
47*4882a593Smuzhiyun #define IEC61937_FRM_STR_DTS1      512
48*4882a593Smuzhiyun #define IEC61937_FRM_STR_DTS2      1024
49*4882a593Smuzhiyun #define IEC61937_FRM_STR_DTS3      2048
50*4882a593Smuzhiyun #define IEC61937_FRM_STR_AAC       1024
51*4882a593Smuzhiyun 
52*4882a593Smuzhiyun /* IEC61937 Repetition period of Pause data-burst in IEC60958 frames */
53*4882a593Smuzhiyun #define IEC61937_FRM_PAU_AC3       3
54*4882a593Smuzhiyun #define IEC61937_FRM_PAU_MPA       32
55*4882a593Smuzhiyun #define IEC61937_FRM_PAU_MP3       32
56*4882a593Smuzhiyun #define IEC61937_FRM_PAU_DTS1      3
57*4882a593Smuzhiyun #define IEC61937_FRM_PAU_DTS2      3
58*4882a593Smuzhiyun #define IEC61937_FRM_PAU_DTS3      3
59*4882a593Smuzhiyun #define IEC61937_FRM_PAU_AAC       32
60*4882a593Smuzhiyun 
61*4882a593Smuzhiyun /* IEC61937 Pa and Pb */
62*4882a593Smuzhiyun #define IEC61937_HEADER_SIGN       0x1f4e72f8
63*4882a593Smuzhiyun 
64*4882a593Smuzhiyun #define AUD_HW_PCMIN1    0
65*4882a593Smuzhiyun #define AUD_HW_PCMIN2    1
66*4882a593Smuzhiyun #define AUD_HW_PCMIN3    2
67*4882a593Smuzhiyun #define AUD_HW_IECIN1    3
68*4882a593Smuzhiyun #define AUD_HW_DIECIN1   4
69*4882a593Smuzhiyun 
70*4882a593Smuzhiyun #define AUD_NAME_PCMIN1     "aio-pcmin1"
71*4882a593Smuzhiyun #define AUD_NAME_PCMIN2     "aio-pcmin2"
72*4882a593Smuzhiyun #define AUD_NAME_PCMIN3     "aio-pcmin3"
73*4882a593Smuzhiyun #define AUD_NAME_IECIN1     "aio-iecin1"
74*4882a593Smuzhiyun #define AUD_NAME_DIECIN1    "aio-diecin1"
75*4882a593Smuzhiyun 
76*4882a593Smuzhiyun #define AUD_HW_HPCMOUT1    0
77*4882a593Smuzhiyun #define AUD_HW_PCMOUT1     1
78*4882a593Smuzhiyun #define AUD_HW_PCMOUT2     2
79*4882a593Smuzhiyun #define AUD_HW_PCMOUT3     3
80*4882a593Smuzhiyun #define AUD_HW_EPCMOUT1    4
81*4882a593Smuzhiyun #define AUD_HW_EPCMOUT2    5
82*4882a593Smuzhiyun #define AUD_HW_EPCMOUT3    6
83*4882a593Smuzhiyun #define AUD_HW_EPCMOUT6    9
84*4882a593Smuzhiyun #define AUD_HW_HIECOUT1    10
85*4882a593Smuzhiyun #define AUD_HW_IECOUT1     11
86*4882a593Smuzhiyun #define AUD_HW_CMASTER     31
87*4882a593Smuzhiyun 
88*4882a593Smuzhiyun #define AUD_NAME_HPCMOUT1        "aio-hpcmout1"
89*4882a593Smuzhiyun #define AUD_NAME_PCMOUT1         "aio-pcmout1"
90*4882a593Smuzhiyun #define AUD_NAME_PCMOUT2         "aio-pcmout2"
91*4882a593Smuzhiyun #define AUD_NAME_PCMOUT3         "aio-pcmout3"
92*4882a593Smuzhiyun #define AUD_NAME_EPCMOUT1        "aio-epcmout1"
93*4882a593Smuzhiyun #define AUD_NAME_EPCMOUT2        "aio-epcmout2"
94*4882a593Smuzhiyun #define AUD_NAME_EPCMOUT3        "aio-epcmout3"
95*4882a593Smuzhiyun #define AUD_NAME_EPCMOUT6        "aio-epcmout6"
96*4882a593Smuzhiyun #define AUD_NAME_HIECOUT1        "aio-hiecout1"
97*4882a593Smuzhiyun #define AUD_NAME_IECOUT1         "aio-iecout1"
98*4882a593Smuzhiyun #define AUD_NAME_CMASTER         "aio-cmaster"
99*4882a593Smuzhiyun #define AUD_NAME_HIECCOMPOUT1    "aio-hieccompout1"
100*4882a593Smuzhiyun #define AUD_NAME_IECCOMPOUT1     "aio-ieccompout1"
101*4882a593Smuzhiyun 
102*4882a593Smuzhiyun #define AUD_GNAME_HDMI    "aio-hdmi"
103*4882a593Smuzhiyun #define AUD_GNAME_LINE    "aio-line"
104*4882a593Smuzhiyun #define AUD_GNAME_AUX     "aio-aux"
105*4882a593Smuzhiyun #define AUD_GNAME_IEC     "aio-iec"
106*4882a593Smuzhiyun 
107*4882a593Smuzhiyun #define AUD_CLK_IO        0
108*4882a593Smuzhiyun #define AUD_CLK_A1        1
109*4882a593Smuzhiyun #define AUD_CLK_F1        2
110*4882a593Smuzhiyun #define AUD_CLK_A2        3
111*4882a593Smuzhiyun #define AUD_CLK_F2        4
112*4882a593Smuzhiyun #define AUD_CLK_A         5
113*4882a593Smuzhiyun #define AUD_CLK_F         6
114*4882a593Smuzhiyun #define AUD_CLK_APLL      7
115*4882a593Smuzhiyun #define AUD_CLK_RX0       8
116*4882a593Smuzhiyun #define AUD_CLK_USB0      9
117*4882a593Smuzhiyun #define AUD_CLK_HSC0      10
118*4882a593Smuzhiyun 
119*4882a593Smuzhiyun #define AUD_PLL_A1        0
120*4882a593Smuzhiyun #define AUD_PLL_F1        1
121*4882a593Smuzhiyun #define AUD_PLL_A2        2
122*4882a593Smuzhiyun #define AUD_PLL_F2        3
123*4882a593Smuzhiyun #define AUD_PLL_APLL      4
124*4882a593Smuzhiyun #define AUD_PLL_RX0       5
125*4882a593Smuzhiyun #define AUD_PLL_USB0      6
126*4882a593Smuzhiyun #define AUD_PLL_HSC0      7
127*4882a593Smuzhiyun 
128*4882a593Smuzhiyun #define AUD_PLLDIV_1_2    0
129*4882a593Smuzhiyun #define AUD_PLLDIV_1_3    1
130*4882a593Smuzhiyun #define AUD_PLLDIV_1_1    2
131*4882a593Smuzhiyun #define AUD_PLLDIV_2_3    3
132*4882a593Smuzhiyun 
133*4882a593Smuzhiyun #define AUD_VOL_INIT         0x4000 /* +0dB */
134*4882a593Smuzhiyun #define AUD_VOL_MAX          0xffff /* +6dB */
135*4882a593Smuzhiyun #define AUD_VOL_FADE_TIME    20 /* 20ms */
136*4882a593Smuzhiyun 
137*4882a593Smuzhiyun #define AUD_RING_SIZE            (128 * 1024)
138*4882a593Smuzhiyun 
139*4882a593Smuzhiyun #define AUD_MIN_FRAGMENT         4
140*4882a593Smuzhiyun #define AUD_MAX_FRAGMENT         8
141*4882a593Smuzhiyun #define AUD_MIN_FRAGMENT_SIZE    (4 * 1024)
142*4882a593Smuzhiyun #define AUD_MAX_FRAGMENT_SIZE    (16 * 1024)
143*4882a593Smuzhiyun 
144*4882a593Smuzhiyun /* max 5 slots, 10 channels, 2 channel in 1 slot */
145*4882a593Smuzhiyun #define AUD_MAX_SLOTSEL    5
146*4882a593Smuzhiyun 
147*4882a593Smuzhiyun /*
148*4882a593Smuzhiyun  * This is a selector for virtual register map of AIO.
149*4882a593Smuzhiyun  *
150*4882a593Smuzhiyun  * map:  Specify the index of virtual register map.
151*4882a593Smuzhiyun  * hw :  Specify the ID of real register map, selector uses this value.
152*4882a593Smuzhiyun  *       A meaning of this value depends specification of SoC.
153*4882a593Smuzhiyun  */
154*4882a593Smuzhiyun struct uniphier_aio_selector {
155*4882a593Smuzhiyun 	int map;
156*4882a593Smuzhiyun 	int hw;
157*4882a593Smuzhiyun };
158*4882a593Smuzhiyun 
159*4882a593Smuzhiyun /**
160*4882a593Smuzhiyun  * 'SoftWare MAPping' setting of UniPhier AIO registers.
161*4882a593Smuzhiyun  *
162*4882a593Smuzhiyun  * We have to setup 'virtual' register maps to access 'real' registers of AIO.
163*4882a593Smuzhiyun  * This feature is legacy and meaningless but AIO needs this to work.
164*4882a593Smuzhiyun  *
165*4882a593Smuzhiyun  * Each hardware blocks have own virtual register maps as following:
166*4882a593Smuzhiyun  *
167*4882a593Smuzhiyun  * Address Virtual                      Real
168*4882a593Smuzhiyun  * ------- ---------                    ---------------
169*4882a593Smuzhiyun  * 0x12000 DMAC map0 --> [selector] --> DMAC hardware 3
170*4882a593Smuzhiyun  * 0x12080 DMAC map1 --> [selector] --> DMAC hardware 1
171*4882a593Smuzhiyun  * ...
172*4882a593Smuzhiyun  * 0x42000 Port map0 --> [selector] --> Port hardware 1
173*4882a593Smuzhiyun  * 0x42400 Port map1 --> [selector] --> Port hardware 2
174*4882a593Smuzhiyun  * ...
175*4882a593Smuzhiyun  *
176*4882a593Smuzhiyun  * ch   : Input or output channel of DMAC
177*4882a593Smuzhiyun  * rb   : Ring buffer
178*4882a593Smuzhiyun  * iport: PCM input port
179*4882a593Smuzhiyun  * iif  : Input interface
180*4882a593Smuzhiyun  * oport: PCM output port
181*4882a593Smuzhiyun  * oif  : Output interface
182*4882a593Smuzhiyun  * och  : Output channel of DMAC for sampling rate converter
183*4882a593Smuzhiyun  *
184*4882a593Smuzhiyun  * These are examples for sound data paths:
185*4882a593Smuzhiyun  *
186*4882a593Smuzhiyun  * For caputure device:
187*4882a593Smuzhiyun  *   (outer of AIO) -> iport -> iif -> ch -> rb -> (CPU)
188*4882a593Smuzhiyun  * For playback device:
189*4882a593Smuzhiyun  *   (CPU) -> rb -> ch -> oif -> oport -> (outer of AIO)
190*4882a593Smuzhiyun  * For sampling rate converter device:
191*4882a593Smuzhiyun  *   (CPU) -> rb -> ch -> oif -> (HW SRC) -> iif -> och -> orb -> (CPU)
192*4882a593Smuzhiyun  */
193*4882a593Smuzhiyun struct uniphier_aio_swmap {
194*4882a593Smuzhiyun 	int type;
195*4882a593Smuzhiyun 	int dir;
196*4882a593Smuzhiyun 
197*4882a593Smuzhiyun 	struct uniphier_aio_selector ch;
198*4882a593Smuzhiyun 	struct uniphier_aio_selector rb;
199*4882a593Smuzhiyun 	struct uniphier_aio_selector iport;
200*4882a593Smuzhiyun 	struct uniphier_aio_selector iif;
201*4882a593Smuzhiyun 	struct uniphier_aio_selector oport;
202*4882a593Smuzhiyun 	struct uniphier_aio_selector oif;
203*4882a593Smuzhiyun 	struct uniphier_aio_selector och;
204*4882a593Smuzhiyun };
205*4882a593Smuzhiyun 
206*4882a593Smuzhiyun struct uniphier_aio_spec {
207*4882a593Smuzhiyun 	const char *name;
208*4882a593Smuzhiyun 	const char *gname;
209*4882a593Smuzhiyun 	struct uniphier_aio_swmap swm;
210*4882a593Smuzhiyun };
211*4882a593Smuzhiyun 
212*4882a593Smuzhiyun struct uniphier_aio_pll {
213*4882a593Smuzhiyun 	bool enable;
214*4882a593Smuzhiyun 	unsigned int freq;
215*4882a593Smuzhiyun };
216*4882a593Smuzhiyun 
217*4882a593Smuzhiyun struct uniphier_aio_chip_spec {
218*4882a593Smuzhiyun 	const struct uniphier_aio_spec *specs;
219*4882a593Smuzhiyun 	int num_specs;
220*4882a593Smuzhiyun 	const struct uniphier_aio_pll *plls;
221*4882a593Smuzhiyun 	int num_plls;
222*4882a593Smuzhiyun 	struct snd_soc_dai_driver *dais;
223*4882a593Smuzhiyun 	int num_dais;
224*4882a593Smuzhiyun 
225*4882a593Smuzhiyun 	/* DMA access mode, this is workaround for DMA hungup */
226*4882a593Smuzhiyun 	int addr_ext;
227*4882a593Smuzhiyun };
228*4882a593Smuzhiyun 
229*4882a593Smuzhiyun struct uniphier_aio_sub {
230*4882a593Smuzhiyun 	struct uniphier_aio *aio;
231*4882a593Smuzhiyun 
232*4882a593Smuzhiyun 	/* Guard sub->rd_offs and wr_offs from IRQ handler. */
233*4882a593Smuzhiyun 	spinlock_t lock;
234*4882a593Smuzhiyun 
235*4882a593Smuzhiyun 	const struct uniphier_aio_swmap *swm;
236*4882a593Smuzhiyun 	const struct uniphier_aio_spec *spec;
237*4882a593Smuzhiyun 
238*4882a593Smuzhiyun 	/* For PCM audio */
239*4882a593Smuzhiyun 	struct snd_pcm_substream *substream;
240*4882a593Smuzhiyun 	struct snd_pcm_hw_params params;
241*4882a593Smuzhiyun 	int vol;
242*4882a593Smuzhiyun 
243*4882a593Smuzhiyun 	/* For compress audio */
244*4882a593Smuzhiyun 	struct snd_compr_stream *cstream;
245*4882a593Smuzhiyun 	struct snd_compr_params cparams;
246*4882a593Smuzhiyun 	unsigned char *compr_area;
247*4882a593Smuzhiyun 	dma_addr_t compr_addr;
248*4882a593Smuzhiyun 	size_t compr_bytes;
249*4882a593Smuzhiyun 	int pass_through;
250*4882a593Smuzhiyun 	enum IEC61937_PC iec_pc;
251*4882a593Smuzhiyun 	bool iec_header;
252*4882a593Smuzhiyun 
253*4882a593Smuzhiyun 	/* Both PCM and compress audio */
254*4882a593Smuzhiyun 	bool use_mmap;
255*4882a593Smuzhiyun 	int setting;
256*4882a593Smuzhiyun 	int running;
257*4882a593Smuzhiyun 	u64 rd_offs;
258*4882a593Smuzhiyun 	u64 wr_offs;
259*4882a593Smuzhiyun 	u32 threshold;
260*4882a593Smuzhiyun 	u64 rd_org;
261*4882a593Smuzhiyun 	u64 wr_org;
262*4882a593Smuzhiyun 	u64 rd_total;
263*4882a593Smuzhiyun 	u64 wr_total;
264*4882a593Smuzhiyun };
265*4882a593Smuzhiyun 
266*4882a593Smuzhiyun struct uniphier_aio {
267*4882a593Smuzhiyun 	struct uniphier_aio_chip *chip;
268*4882a593Smuzhiyun 
269*4882a593Smuzhiyun 	struct uniphier_aio_sub sub[2];
270*4882a593Smuzhiyun 
271*4882a593Smuzhiyun 	unsigned int fmt;
272*4882a593Smuzhiyun 	/* Set one of AUD_CLK_X */
273*4882a593Smuzhiyun 	int clk_in;
274*4882a593Smuzhiyun 	int clk_out;
275*4882a593Smuzhiyun 	/* Set one of AUD_PLL_X */
276*4882a593Smuzhiyun 	int pll_in;
277*4882a593Smuzhiyun 	int pll_out;
278*4882a593Smuzhiyun 	/* Set one of AUD_PLLDIV_X */
279*4882a593Smuzhiyun 	int plldiv;
280*4882a593Smuzhiyun };
281*4882a593Smuzhiyun 
282*4882a593Smuzhiyun struct uniphier_aio_chip {
283*4882a593Smuzhiyun 	struct platform_device *pdev;
284*4882a593Smuzhiyun 	const struct uniphier_aio_chip_spec *chip_spec;
285*4882a593Smuzhiyun 
286*4882a593Smuzhiyun 	struct uniphier_aio *aios;
287*4882a593Smuzhiyun 	int num_aios;
288*4882a593Smuzhiyun 	int num_wup_aios;
289*4882a593Smuzhiyun 	struct uniphier_aio_pll *plls;
290*4882a593Smuzhiyun 	int num_plls;
291*4882a593Smuzhiyun 
292*4882a593Smuzhiyun 	struct clk *clk;
293*4882a593Smuzhiyun 	struct reset_control *rst;
294*4882a593Smuzhiyun 	struct regmap *regmap;
295*4882a593Smuzhiyun 	struct regmap *regmap_sg;
296*4882a593Smuzhiyun 	int active;
297*4882a593Smuzhiyun };
298*4882a593Smuzhiyun 
uniphier_priv(struct snd_soc_dai * dai)299*4882a593Smuzhiyun static inline struct uniphier_aio *uniphier_priv(struct snd_soc_dai *dai)
300*4882a593Smuzhiyun {
301*4882a593Smuzhiyun 	struct uniphier_aio_chip *chip = snd_soc_dai_get_drvdata(dai);
302*4882a593Smuzhiyun 
303*4882a593Smuzhiyun 	return &chip->aios[dai->id];
304*4882a593Smuzhiyun }
305*4882a593Smuzhiyun 
306*4882a593Smuzhiyun int uniphier_aiodma_soc_register_platform(struct platform_device *pdev);
307*4882a593Smuzhiyun extern const struct snd_compress_ops uniphier_aio_compress_ops;
308*4882a593Smuzhiyun 
309*4882a593Smuzhiyun int uniphier_aio_dai_probe(struct snd_soc_dai *dai);
310*4882a593Smuzhiyun int uniphier_aio_dai_remove(struct snd_soc_dai *dai);
311*4882a593Smuzhiyun int uniphier_aio_probe(struct platform_device *pdev);
312*4882a593Smuzhiyun int uniphier_aio_remove(struct platform_device *pdev);
313*4882a593Smuzhiyun extern const struct snd_soc_dai_ops uniphier_aio_i2s_ops;
314*4882a593Smuzhiyun extern const struct snd_soc_dai_ops uniphier_aio_spdif_ops;
315*4882a593Smuzhiyun 
316*4882a593Smuzhiyun u64 aio_rb_cnt(struct uniphier_aio_sub *sub);
317*4882a593Smuzhiyun u64 aio_rbt_cnt_to_end(struct uniphier_aio_sub *sub);
318*4882a593Smuzhiyun u64 aio_rb_space(struct uniphier_aio_sub *sub);
319*4882a593Smuzhiyun u64 aio_rb_space_to_end(struct uniphier_aio_sub *sub);
320*4882a593Smuzhiyun 
321*4882a593Smuzhiyun void aio_iecout_set_enable(struct uniphier_aio_chip *chip, bool enable);
322*4882a593Smuzhiyun int aio_chip_set_pll(struct uniphier_aio_chip *chip, int pll_id,
323*4882a593Smuzhiyun 		     unsigned int freq);
324*4882a593Smuzhiyun void aio_chip_init(struct uniphier_aio_chip *chip);
325*4882a593Smuzhiyun int aio_init(struct uniphier_aio_sub *sub);
326*4882a593Smuzhiyun void aio_port_reset(struct uniphier_aio_sub *sub);
327*4882a593Smuzhiyun int aio_port_set_param(struct uniphier_aio_sub *sub, int pass_through,
328*4882a593Smuzhiyun 		       const struct snd_pcm_hw_params *params);
329*4882a593Smuzhiyun void aio_port_set_enable(struct uniphier_aio_sub *sub, int enable);
330*4882a593Smuzhiyun int aio_port_get_volume(struct uniphier_aio_sub *sub);
331*4882a593Smuzhiyun void aio_port_set_volume(struct uniphier_aio_sub *sub, int vol);
332*4882a593Smuzhiyun int aio_if_set_param(struct uniphier_aio_sub *sub, int pass_through);
333*4882a593Smuzhiyun int aio_oport_set_stream_type(struct uniphier_aio_sub *sub,
334*4882a593Smuzhiyun 			      enum IEC61937_PC pc);
335*4882a593Smuzhiyun void aio_src_reset(struct uniphier_aio_sub *sub);
336*4882a593Smuzhiyun int aio_src_set_param(struct uniphier_aio_sub *sub,
337*4882a593Smuzhiyun 		      const struct snd_pcm_hw_params *params);
338*4882a593Smuzhiyun int aio_srcif_set_param(struct uniphier_aio_sub *sub);
339*4882a593Smuzhiyun int aio_srcch_set_param(struct uniphier_aio_sub *sub);
340*4882a593Smuzhiyun void aio_srcch_set_enable(struct uniphier_aio_sub *sub, int enable);
341*4882a593Smuzhiyun 
342*4882a593Smuzhiyun int aiodma_ch_set_param(struct uniphier_aio_sub *sub);
343*4882a593Smuzhiyun void aiodma_ch_set_enable(struct uniphier_aio_sub *sub, int enable);
344*4882a593Smuzhiyun int aiodma_rb_set_threshold(struct uniphier_aio_sub *sub, u64 size, u32 th);
345*4882a593Smuzhiyun int aiodma_rb_set_buffer(struct uniphier_aio_sub *sub, u64 start, u64 end,
346*4882a593Smuzhiyun 			 int period);
347*4882a593Smuzhiyun void aiodma_rb_sync(struct uniphier_aio_sub *sub, u64 start, u64 size,
348*4882a593Smuzhiyun 		    int period);
349*4882a593Smuzhiyun bool aiodma_rb_is_irq(struct uniphier_aio_sub *sub);
350*4882a593Smuzhiyun void aiodma_rb_clear_irq(struct uniphier_aio_sub *sub);
351*4882a593Smuzhiyun 
352*4882a593Smuzhiyun #endif /* SND_UNIPHIER_AIO_H__ */
353