1 /* SPDX-License-Identifier: GPL-2.0 */
3 * CS530x CODEC driver internal data
5 * Copyright (C) 2023-2024 Cirrus Logic, Inc. and
6 * Cirrus Logic International Semiconductor Ltd.
12 #include <linux/device.h>
13 #include <linux/gpio/consumer.h>
14 #include <linux/regmap.h>
15 #include <linux/regulator/consumer.h>
18 #define CS530X_2CH_ADC_DEV_ID 0x5302
19 #define CS530X_4CH_ADC_DEV_ID 0x5304
20 #define CS530X_8CH_ADC_DEV_ID 0x5308
24 #define CS530X_DEVID 0x0000000
25 #define CS530X_REVID 0x0000004
26 #define CS530X_SW_RESET 0x0000022
28 #define CS530X_CLK_CFG_0 0x0000040
29 #define CS530X_CLK_CFG_1 0x0000042
30 #define CS530X_CHIP_ENABLE 0x0000044
31 #define CS530X_ASP_CFG 0x0000048
32 #define CS530X_SIGNAL_PATH_CFG 0x0000050
33 #define CS530X_IN_ENABLES 0x0000080
34 #define CS530X_IN_RAMP_SUM 0x0000082
35 #define CS530X_IN_FILTER 0x0000086
36 #define CS530X_IN_HIZ 0x0000088
37 #define CS530X_IN_INV 0x000008A
38 #define CS530X_IN_VOL_CTRL1_0 0x0000090
39 #define CS530X_IN_VOL_CTRL1_1 0x0000092
40 #define CS530X_IN_VOL_CTRL2_0 0x0000094
41 #define CS530X_IN_VOL_CTRL2_1 0x0000096
42 #define CS530X_IN_VOL_CTRL3_0 0x0000098
43 #define CS530X_IN_VOL_CTRL3_1 0x000009A
44 #define CS530X_IN_VOL_CTRL4_0 0x000009C
45 #define CS530X_IN_VOL_CTRL4_1 0x000009E
46 #define CS530X_IN_VOL_CTRL5 0x00000A0
48 #define CS530X_PAD_FN 0x0003D24
49 #define CS530X_PAD_LVL 0x0003D28
51 #define CS530X_MAX_REGISTER CS530X_PAD_LVL
56 #define CS530X_MTLREVID GENMASK(3, 0)
57 #define CS530X_AREVID GENMASK(7, 4)
60 #define CS530X_SW_RST_SHIFT 8
61 #define CS530X_SW_RST_VAL (0x5A << CS530X_SW_RST_SHIFT)
64 #define CS530X_PLL_REFCLK_SRC_MASK BIT(0)
65 #define CS530X_PLL_REFCLK_FREQ_MASK GENMASK(5, 4)
66 #define CS530X_SYSCLK_SRC_MASK BIT(12)
67 #define CS530X_SYSCLK_SRC_SHIFT 12
68 #define CS530X_REFCLK_2P822_3P072 0
69 #define CS530X_REFCLK_5P6448_6P144 0x10
70 #define CS530X_REFCLK_11P2896_12P288 0x20
71 #define CS530X_REFCLK_24P5792_24P576 0x30
74 #define CS530X_SAMPLE_RATE_MASK GENMASK(2, 0)
75 #define CS530X_FS_32K 0
76 #define CS530X_FS_48K_44P1K 1
77 #define CS530X_FS_96K_88P2K 2
78 #define CS530X_FS_192K_176P4K 3
79 #define CS530X_FS_384K_356P8K 4
80 #define CS530X_FS_768K_705P6K 5
83 #define CS530X_GLOBAL_EN BIT(0)
86 #define CS530X_ASP_BCLK_FREQ_MASK GENMASK(1, 0)
87 #define CS530X_ASP_PRIMARY BIT(5)
88 #define CS530X_ASP_BCLK_INV BIT(6)
89 #define CS530X_BCLK_2P822_3P072 0
90 #define CS530X_BCLK_5P6448_6P144 1
91 #define CS530X_BCLK_11P2896_12P288 2
92 #define CS530X_BCLK_24P5792_24P576 3
95 #define CS530X_ASP_FMT_MASK GENMASK(2, 0)
96 #define CS530X_ASP_TDM_SLOT_MASK GENMASK(5, 3)
97 #define CS530X_ASP_TDM_SLOT_SHIFT 3
98 #define CS530X_ASP_CH_REVERSE BIT(9)
99 #define CS530X_TDM_EN_MASK BIT(2)
100 #define CS530X_ASP_FMT_I2S 0
101 #define CS530X_ASP_FMT_LJ 1
102 #define CS530X_ASP_FMT_DSP_A 0x6
105 #define CS530X_0_1_TDM_SLOT_MASK GENMASK(1, 0)
106 #define CS530X_0_3_TDM_SLOT_MASK GENMASK(3, 0)
107 #define CS530X_0_7_TDM_SLOT_MASK GENMASK(7, 0)
108 #define CS530X_0_7_TDM_SLOT_VAL 0
110 #define CS530X_2_3_TDM_SLOT_MASK GENMASK(3, 2)
111 #define CS530X_2_3_TDM_SLOT_VAL 1
113 #define CS530X_4_5_TDM_SLOT_MASK GENMASK(5, 4)
114 #define CS530X_4_7_TDM_SLOT_MASK GENMASK(7, 4)
115 #define CS530X_4_7_TDM_SLOT_VAL 2
117 #define CS530X_6_7_TDM_SLOT_MASK GENMASK(7, 6)
118 #define CS530X_6_7_TDM_SLOT_VAL 3
120 #define CS530X_8_9_TDM_SLOT_MASK GENMASK(9, 8)
121 #define CS530X_8_11_TDM_SLOT_MASK GENMASK(11, 8)
122 #define CS530X_8_15_TDM_SLOT_MASK GENMASK(15, 8)
123 #define CS530X_8_15_TDM_SLOT_VAL 4
125 #define CS530X_10_11_TDM_SLOT_MASK GENMASK(11, 10)
126 #define CS530X_10_11_TDM_SLOT_VAL 5
128 #define CS530X_12_13_TDM_SLOT_MASK GENMASK(13, 12)
129 #define CS530X_12_15_TDM_SLOT_MASK GENMASK(15, 12)
130 #define CS530X_12_15_TDM_SLOT_VAL 6
132 #define CS530X_14_15_TDM_SLOT_MASK GENMASK(15, 14)
133 #define CS530X_14_15_TDM_SLOT_VAL 7
136 #define CS530X_RAMP_RATE_INC_SHIFT 0
137 #define CS530X_RAMP_RATE_DEC_SHIFT 4
138 #define CS530X_IN_SUM_MODE_SHIFT 13
141 #define CS530X_IN_FILTER_SHIFT 8
142 #define CS530X_IN_HPF_EN_SHIFT 12
145 #define CS530X_IN12_HIZ BIT(0)
146 #define CS530X_IN34_HIZ BIT(1)
147 #define CS530X_IN56_HIZ BIT(2)
148 #define CS530X_IN78_HIZ BIT(3)
151 #define CS530X_IN1_INV_SHIFT 0
152 #define CS530X_IN2_INV_SHIFT 1
153 #define CS530X_IN3_INV_SHIFT 2
154 #define CS530X_IN4_INV_SHIFT 3
155 #define CS530X_IN5_INV_SHIFT 4
156 #define CS530X_IN6_INV_SHIFT 5
157 #define CS530X_IN7_INV_SHIFT 6
158 #define CS530X_IN8_INV_SHIFT 7
161 #define CS530X_IN_MUTE BIT(15)
164 #define CS530X_IN_VU BIT(0)
167 #define CS530X_DOUT2_FN BIT(0)
168 #define CS530X_DOUT3_FN BIT(1)
169 #define CS530X_DOUT4_FN BIT(2)
170 #define CS530X_SPI_CS_FN BIT(3)
171 #define CS530X_CONFIG2_FN BIT(6)
172 #define CS530X_CONFIG3_FN BIT(7)
173 #define CS530X_CONFIG4_FN BIT(8)
174 #define CS530X_CONFIG5_FN BIT(9)
177 #define CS530X_CONFIG2_LVL BIT(6)
178 #define CS530X_CONFIG3_LVL BIT(7)
179 #define CS530X_CONFIG4_LVL BIT(8)
180 #define CS530X_CONFIG5_LVL BIT(9)
182 /* System Clock Source */
183 #define CS530X_SYSCLK_SRC_MCLK 0
184 #define CS530X_SYSCLK_SRC_PLL 1
186 /* PLL Reference Clock Source */
187 #define CS530X_PLL_SRC_BCLK 0
188 #define CS530X_PLL_SRC_MCLK 1
190 #define CS530X_NUM_SUPPLIES 2
198 /* codec private data */
200 struct regmap
*regmap
;
202 struct snd_soc_dai_driver
*dev_dai
;
204 enum cs530x_type devtype
;
208 struct regulator_bulk_data supplies
[CS530X_NUM_SUPPLIES
];
210 unsigned int mclk_rate
;
217 struct gpio_desc
*reset_gpio
;
220 extern const struct regmap_config cs530x_regmap
;
221 int cs530x_probe(struct cs530x_priv
*cs530x
);