Linux Audio

Check our new training course

Yocto distribution development and maintenance

Need a Yocto distribution for your embedded project?
Loading...
Note: File does not exist in v4.10.11.
  1/* SPDX-License-Identifier: GPL-2.0-only */
  2/*
  3 * rt1318.h -- Platform data for RT1318
  4 *
  5 * Copyright 2024 Realtek Semiconductor Corp.
  6 */
  7#include <sound/rt1318.h>
  8
  9#ifndef __RT1318_H__
 10#define __RT1318_H__
 11
 12struct rt1318_priv {
 13	struct snd_soc_component *component;
 14	struct rt1318_platform_data pdata;
 15	struct work_struct cali_work;
 16	struct regmap *regmap;
 17
 18	unsigned int r0_l_integer;
 19	unsigned int r0_l_factor;
 20	unsigned int r0_r_integer;
 21	unsigned int r0_r_factor;
 22	int rt1318_init;
 23	int rt1318_dvol;
 24	int sysclk_src;
 25	int sysclk;
 26	int lrck;
 27	int bclk;
 28	int master;
 29	int pll_src;
 30	int pll_in;
 31	int pll_out;
 32};
 33
 34#define RT1318_PLL_INP_MAX	40000000
 35#define RT1318_PLL_INP_MIN	256000
 36#define RT1318_PLL_N_MAX	0x1ff
 37#define RT1318_PLL_K_MAX	0x1f
 38#define RT1318_PLL_M_MAX	0x1f
 39
 40#define RT1318_LRCLK_192000 192000
 41#define RT1318_LRCLK_96000 96000
 42#define RT1318_LRCLK_48000 48000
 43#define RT1318_LRCLK_44100 44100
 44#define RT1318_LRCLK_16000 16000
 45#define RT1318_DVOL_STEP 383
 46
 47#define RT1318_CLK1				0xc001
 48#define RT1318_CLK2				0xc003
 49#define RT1318_CLK3				0xc004
 50#define RT1318_CLK4				0xc005
 51#define RT1318_CLK5				0xc006
 52#define RT1318_CLK6				0xc007
 53#define RT1318_CLK7				0xc008
 54#define RT1318_PWR_STA1				0xc121
 55#define RT1318_SPK_VOL_TH			0xc130
 56#define RT1318_TCON				0xc203
 57#define RT1318_SRC_TCON				0xc204
 58#define RT1318_TCON_RELATE			0xc206
 59#define RT1318_DA_VOL_L_8			0xc20b
 60#define RT1318_DA_VOL_L_1_7			0xc20c
 61#define RT1318_DA_VOL_R_8			0xc20d
 62#define RT1318_DA_VOL_R_1_7			0xc20e
 63#define RT1318_FEEDBACK_PATH			0xc321
 64#define RT1318_STP_TEMP_L			0xdb00
 65#define RT1318_STP_SEL_L			0xdb08
 66#define RT1318_STP_R0_EN_L			0xdb12
 67#define RT1318_R0_CMP_L_FLAG			0xdb35
 68#define RT1318_PRE_R0_L_24			0xdbb5
 69#define RT1318_PRE_R0_L_23_16			0xdbb6
 70#define RT1318_PRE_R0_L_15_8			0xdbb7
 71#define RT1318_PRE_R0_L_7_0			0xdbb8
 72#define RT1318_R0_L_24				0xdbc5
 73#define RT1318_R0_L_23_16			0xdbc6
 74#define RT1318_R0_L_15_8			0xdbc7
 75#define RT1318_R0_L_7_0				0xdbc8
 76#define RT1318_STP_SEL_R			0xdd08
 77#define RT1318_STP_R0_EN_R			0xdd12
 78#define RT1318_R0_CMP_R_FLAG			0xdd35
 79#define RT1318_PRE_R0_R_24			0xddb5
 80#define RT1318_PRE_R0_R_23_16			0xddb6
 81#define RT1318_PRE_R0_R_15_8			0xddb7
 82#define RT1318_PRE_R0_R_7_0			0xddb8
 83#define RT1318_R0_R_24				0xddc5
 84#define RT1318_R0_R_23_16			0xddc6
 85#define RT1318_R0_R_15_8			0xddc7
 86#define RT1318_R0_R_7_0				0xddc8
 87#define RT1318_DEV_ID1				0xf012
 88#define RT1318_DEV_ID2				0xf013
 89#define RT1318_PLL1_K				0xf20d
 90#define RT1318_PLL1_M				0xf20f
 91#define RT1318_PLL1_N_8				0xf211
 92#define RT1318_PLL1_N_7_0			0xf212
 93#define RT1318_SINE_GEN0			0xf800
 94#define RT1318_TDM_CTRL1			0xf900
 95#define RT1318_TDM_CTRL2			0xf901
 96#define RT1318_TDM_CTRL3			0xf902
 97#define RT1318_TDM_CTRL9			0xf908
 98
 99
100/* Clock-1  (0xC001) */
101#define RT1318_PLLIN_MASK			(0x7 << 4)
102#define RT1318_PLLIN_BCLK0			(0x0 << 4)
103#define RT1318_PLLIN_BCLK1			(0x1 << 4)
104#define RT1318_PLLIN_RC				(0x2 << 4)
105#define RT1318_PLLIN_MCLK			(0x3 << 4)
106#define RT1318_PLLIN_SDW1			(0x4 << 4)
107#define RT1318_PLLIN_SDW2			(0x5 << 4)
108#define RT1318_PLLIN_SDW3			(0x6 << 4)
109#define RT1318_PLLIN_SDW4			(0x7 << 4)
110#define RT1318_SYSCLK_SEL_MASK			(0x7 << 0)
111#define RT1318_SYSCLK_BCLK			(0x0 << 0)
112#define RT1318_SYSCLK_SDW			(0x1 << 0)
113#define RT1318_SYSCLK_PLL2F			(0x2 << 0)
114#define RT1318_SYSCLK_PLL2B			(0x3 << 0)
115#define RT1318_SYSCLK_MCLK			(0x4 << 0)
116#define RT1318_SYSCLK_RC1			(0x5 << 0)
117#define RT1318_SYSCLK_RC2			(0x6 << 0)
118#define RT1318_SYSCLK_RC3			(0x7 << 0)
119/* Clock-2  (0xC003) */
120#define RT1318_DIV_AP_MASK			(0x3 << 4)
121#define RT1318_DIV_AP_SFT			4
122#define RT1318_DIV_AP_DIV1			(0x0 << 4)
123#define RT1318_DIV_AP_DIV2			(0x1 << 4)
124#define RT1318_DIV_AP_DIV4			(0x2 << 4)
125#define RT1318_DIV_AP_DIV8			(0x3 << 4)
126#define RT1318_DIV_DAMOD_MASK			(0x3 << 0)
127#define RT1318_DIV_DAMOD_SFT			0
128#define RT1318_DIV_DAMOD_DIV1			(0x0 << 0)
129#define RT1318_DIV_DAMOD_DIV2			(0x1 << 0)
130#define RT1318_DIV_DAMOD_DIV4			(0x2 << 0)
131#define RT1318_DIV_DAMOD_DIV8			(0x3 << 0)
132/* Clock-3  (0xC004) */
133#define RT1318_AD_STO1_MASK			(0x7 << 4)
134#define RT1318_AD_STO1_SFT			4
135#define RT1318_AD_STO1_DIV1			(0x0 << 4)
136#define RT1318_AD_STO1_DIV2			(0x1 << 4)
137#define RT1318_AD_STO1_DIV4			(0x2 << 4)
138#define RT1318_AD_STO1_DIV8			(0x3 << 4)
139#define RT1318_AD_STO1_DIV16			(0x4 << 4)
140#define RT1318_AD_STO2_MASK			(0x7 << 0)
141#define RT1318_AD_STO2_SFT			0
142#define RT1318_AD_STO2_DIV1			(0x0 << 0)
143#define RT1318_AD_STO2_DIV2			(0x1 << 0)
144#define RT1318_AD_STO2_DIV4			(0x2 << 0)
145#define RT1318_AD_STO2_DIV8			(0x3 << 0)
146#define RT1318_AD_STO2_DIV16			(0x4 << 0)
147#define RT1318_AD_STO2_SFT			0
148/* Clock-4  (0xC005) */
149#define RT1318_AD_ANA_STO1_MASK			(0x7 << 4)
150#define RT1318_AD_ANA_STO1_SFT			4
151#define RT1318_AD_ANA_STO1_DIV1			(0x0 << 4)
152#define RT1318_AD_ANA_STO1_DIV2			(0x1 << 4)
153#define RT1318_AD_ANA_STO1_DIV4			(0x2 << 4)
154#define RT1318_AD_ANA_STO1_DIV8			(0x3 << 4)
155#define RT1318_AD_ANA_STO1_DIV16		(0x4 << 4)
156#define RT1318_AD_ANA_STO2_MASK			(0x7 << 0)
157#define RT1318_AD_ANA_STO2_DIV1			(0x0 << 0)
158#define RT1318_AD_ANA_STO2_DIV2			(0x1 << 0)
159#define RT1318_AD_ANA_STO2_DIV4			(0x2 << 0)
160#define RT1318_AD_ANA_STO2_DIV8			(0x3 << 0)
161#define RT1318_AD_ANA_STO2_DIV16		(0x4 << 0)
162#define RT1318_AD_ANA_STO2_SFT			0
163/* Clock-5  (0xC006) */
164#define RT1318_DIV_FIFO_IN_MASK			(0x3 << 4)
165#define RT1318_DIV_FIFO_IN_SFT			4
166#define RT1318_DIV_FIFO_IN_DIV1			(0x0 << 4)
167#define RT1318_DIV_FIFO_IN_DIV2			(0x1 << 4)
168#define RT1318_DIV_FIFO_IN_DIV4			(0x2 << 4)
169#define RT1318_DIV_FIFO_IN_DIV8			(0x3 << 4)
170#define RT1318_DIV_FIFO_OUT_MASK		(0x3 << 0)
171#define RT1318_DIV_FIFO_OUT_DIV1		(0x0 << 0)
172#define RT1318_DIV_FIFO_OUT_DIV2		(0x1 << 0)
173#define RT1318_DIV_FIFO_OUT_DIV4		(0x2 << 0)
174#define RT1318_DIV_FIFO_OUT_DIV8		(0x3 << 0)
175#define RT1318_DIV_FIFO_OUT_SFT			0
176/* Clock-6  (0xC007) */
177#define RT1318_DIV_NLMS_MASK			(0x3 << 6)
178#define RT1318_DIV_NLMS_SFT				6
179#define RT1318_DIV_NLMS_DIV1			(0x0 << 6)
180#define RT1318_DIV_NLMS_DIV2			(0x1 << 6)
181#define RT1318_DIV_NLMS_DIV4			(0x2 << 6)
182#define RT1318_DIV_NLMS_DIV8			(0x3 << 6)
183#define RT1318_DIV_AD_MONO_MASK			(0x7 << 3)
184#define RT1318_DIV_AD_MONO_SFT			3
185#define RT1318_DIV_AD_MONO_DIV1			(0x0 << 3)
186#define RT1318_DIV_AD_MONO_DIV2			(0x1 << 3)
187#define RT1318_DIV_AD_MONO_DIV4			(0x2 << 3)
188#define RT1318_DIV_AD_MONO_DIV8			(0x3 << 3)
189#define RT1318_DIV_AD_MONO_DIV16		(0x4 << 3)
190#define RT1318_DIV_POST_G_MASK			(0x7 << 0)
191#define RT1318_DIV_POST_G_SFT			0
192#define RT1318_DIV_POST_G_DIV1			(0x0 << 0)
193#define RT1318_DIV_POST_G_DIV2			(0x1 << 0)
194#define RT1318_DIV_POST_G_DIV4			(0x2 << 0)
195#define RT1318_DIV_POST_G_DIV8			(0x3 << 0)
196#define RT1318_DIV_POST_G_DIV16			(0x4 << 0)
197/* Power Status 1  (0xC121) */
198#define RT1318_PDB_CTRL_MASK			(0x1)
199#define RT1318_PDB_CTRL_LOW			(0x0)
200#define RT1318_PDB_CTRL_HIGH			(0x1)
201#define RT1318_PDB_CTRL_SFT			0
202/* SRC Tcon(0xc204) */
203#define RT1318_SRCIN_IN_SEL_MASK		(0x3 << 6)
204#define RT1318_SRCIN_IN_48K			(0x0 << 6)
205#define RT1318_SRCIN_IN_44P1			(0x1 << 6)
206#define RT1318_SRCIN_IN_32K			(0x2 << 6)
207#define RT1318_SRCIN_IN_16K			(0x3 << 6)
208#define RT1318_SRCIN_F12288_MASK		(0x3 << 4)
209#define RT1318_SRCIN_TCON1			(0x0 << 4)
210#define RT1318_SRCIN_TCON2			(0x1 << 4)
211#define RT1318_SRCIN_TCON4			(0x2 << 4)
212#define RT1318_SRCIN_TCON8			(0x3 << 4)
213#define RT1318_SRCIN_DACLK_MASK			(0x3 << 2)
214#define RT1318_DACLK_TCON1			(0x0 << 2)
215#define RT1318_DACLK_TCON2			(0x1 << 2)
216#define RT1318_DACLK_TCON4			(0x2 << 2)
217#define RT1318_DACLK_TCON8			(0x3 << 2)
218/* R0 Compare Flag  (0xDB35) */
219#define RT1318_R0_RANGE_MASK			(0x1)
220#define RT1318_R0_OUTOFRANGE			(0x0)
221#define RT1318_R0_INRANGE			(0x1)
222/* PLL internal setting (0xF20D), K value */
223#define RT1318_K_PLL1_MASK			(0x1f << 0)
224/* PLL internal setting (0xF20F), M value */
225#define RT1318_M_PLL1_MASK			(0x1f << 0)
226/* PLL internal setting (0xF211), N_8 value */
227#define RT1318_N_8_PLL1_MASK			(0x1 << 0)
228/* PLL internal setting (0xF212), N_7_0 value */
229#define RT1318_N_7_0_PLL1_MASK			(0xff << 0)
230/* TDM CTRL 1  (0xf900) */
231#define RT1318_TDM_BCLK_MASK			(0x1 << 7)
232#define RT1318_TDM_BCLK_NORM			(0x0 << 7)
233#define RT1318_TDM_BCLK_INV			(0x1 << 7)
234#define RT1318_I2S_FMT_MASK			(0x7 << 0)
235#define RT1318_FMT_I2S				(0x0 << 0)
236#define RT1318_FMT_LEFT_J			(0x1 << 0)
237#define RT1318_FMT_PCM_A_R			(0x2 << 0)
238#define RT1318_FMT_PCM_B_R			(0x3 << 0)
239#define RT1318_FMT_PCM_A_F			(0x6 << 0)
240#define RT1318_FMT_PCM_B_F			(0x7 << 0)
241#define RT1318_I2S_FMT_SFT			0
242/* TDM CTRL 2  (0xf901) */
243#define RT1318_I2S_CH_TX_MASK			(0x3 << 6)
244#define RT1318_I2S_CH_TX_2CH			(0x0 << 6)
245#define RT1318_I2S_CH_TX_4CH			(0x1 << 6)
246#define RT1318_I2S_CH_TX_6CH			(0x2 << 6)
247#define RT1318_I2S_CH_TX_8CH			(0x3 << 6)
248#define RT1318_I2S_CH_RX_MASK			(0x3 << 4)
249#define RT1318_I2S_CH_RX_2CH			(0x0 << 4)
250#define RT1318_I2S_CH_RX_4CH			(0x1 << 4)
251#define RT1318_I2S_CH_RX_6CH			(0x2 << 4)
252#define RT1318_I2S_CH_RX_8CH			(0x3 << 4)
253#define RT1318_I2S_DL_MASK			0x7
254#define RT1318_I2S_DL_SFT			0
255#define RT1318_I2S_DL_16			0x0
256#define RT1318_I2S_DL_20			0x1
257#define RT1318_I2S_DL_24			0x2
258#define RT1318_I2S_DL_32			0x3
259#define RT1318_I2S_DL_8				0x4
260/* TDM CTRL 3  (0xf902) */
261#define RT1318_I2S_TX_CHL_MASK			(0x7 << 4)
262#define RT1318_I2S_TX_CHL_SFT			4
263#define RT1318_I2S_TX_CHL_16			(0x0 << 4)
264#define RT1318_I2S_TX_CHL_20			(0x1 << 4)
265#define RT1318_I2S_TX_CHL_24			(0x2 << 4)
266#define RT1318_I2S_TX_CHL_32			(0x3 << 4)
267#define RT1318_I2S_TX_CHL_8			(0x4 << 4)
268#define RT1318_I2S_RX_CHL_MASK			(0x7 << 0)
269#define RT1318_I2S_RX_CHL_SFT			0
270#define RT1318_I2S_RX_CHL_16			(0x0 << 0)
271#define RT1318_I2S_RX_CHL_20			(0x1 << 0)
272#define RT1318_I2S_RX_CHL_24			(0x2 << 0)
273#define RT1318_I2S_RX_CHL_32			(0x3 << 0)
274#define RT1318_I2S_RX_CHL_8			(0x4 << 0)
275/* TDM CTRL 9  (0xf908) */
276#define RT1318_TDM_I2S_TX_L_DAC1_1_MASK		(0x7 << 4)
277#define RT1318_TDM_I2S_TX_R_DAC1_1_MASK		0x7
278#define RT1318_TDM_I2S_TX_L_DAC1_1_SFT		4
279#define RT1318_TDM_I2S_TX_R_DAC1_1_SFT		0
280
281#define RT1318_REG_DISP_LEN 23
282
283/* System Clock Source */
284enum {
285	RT1318_SCLK_S_BCLK,
286	RT1318_SCLK_S_SDW,
287	RT1318_SCLK_S_PLL2F,
288	RT1318_SCLK_S_PLL2B,
289	RT1318_SCLK_S_MCLK,
290	RT1318_SCLK_S_RC0,
291	RT1318_SCLK_S_RC1,
292	RT1318_SCLK_S_RC2,
293};
294
295/* PLL Source */
296enum {
297	RT1318_PLL_S_BCLK0,
298	RT1318_PLL_S_BCLK1,
299	RT1318_PLL_S_RC,
300	RT1318_PLL_S_MCLK,
301	RT1318_PLL_S_SDW_IN_PLL,
302	RT1318_PLL_S_SDW_0,
303	RT1318_PLL_S_SDW_1,
304	RT1318_PLL_S_SDW_2,
305};
306
307/* TDM channel */
308enum {
309	RT1318_2CH,
310	RT1318_4CH,
311	RT1318_6CH,
312	RT1318_8CH,
313};
314
315/* R0 calibration result */
316enum {
317	RT1318_R0_OUT_OF_RANGE,
318	RT1318_R0_IN_RANGE,
319	RT1318_R0_CALIB_NOT_DONE,
320};
321
322/* PLL pre-defined M/N/K */
323
324struct pll_calc_map {
325	unsigned int pll_in;
326	unsigned int pll_out;
327	int k;
328	int n;
329	int m;
330	bool m_bp;
331	bool k_bp;
332};
333
334struct rt1318_pll_code {
335	bool m_bp; /* Indicates bypass m code or not. */
336	bool k_bp; /* Indicates bypass k code or not. */
337	int m_code;
338	int n_code;
339	int k_code;
340};
341
342#endif /* __RT1318_H__ */