1b886d83cSThomas Gleixner // SPDX-License-Identifier: GPL-2.0-only
2dbf7a733SM R Swami Reddy /*
3dbf7a733SM R Swami Reddy * lm49453.c - LM49453 ALSA Soc Audio driver
4dbf7a733SM R Swami Reddy *
5dbf7a733SM R Swami Reddy * Copyright (c) 2012 Texas Instruments, Inc
6dbf7a733SM R Swami Reddy *
7dbf7a733SM R Swami Reddy * Initially based on sound/soc/codecs/wm8350.c
8dbf7a733SM R Swami Reddy */
9dbf7a733SM R Swami Reddy
10dbf7a733SM R Swami Reddy #include <linux/module.h>
11dbf7a733SM R Swami Reddy #include <linux/moduleparam.h>
12dbf7a733SM R Swami Reddy #include <linux/kernel.h>
13dbf7a733SM R Swami Reddy #include <linux/init.h>
14dbf7a733SM R Swami Reddy #include <linux/delay.h>
15dbf7a733SM R Swami Reddy #include <linux/pm.h>
16dbf7a733SM R Swami Reddy #include <linux/i2c.h>
17dbf7a733SM R Swami Reddy #include <linux/regmap.h>
18dbf7a733SM R Swami Reddy #include <linux/slab.h>
19dbf7a733SM R Swami Reddy #include <sound/core.h>
20dbf7a733SM R Swami Reddy #include <sound/pcm.h>
21dbf7a733SM R Swami Reddy #include <sound/pcm_params.h>
22dbf7a733SM R Swami Reddy #include <sound/soc.h>
23dbf7a733SM R Swami Reddy #include <sound/soc-dapm.h>
24dbf7a733SM R Swami Reddy #include <sound/tlv.h>
25dbf7a733SM R Swami Reddy #include <sound/jack.h>
26dbf7a733SM R Swami Reddy #include <sound/initval.h>
27dbf7a733SM R Swami Reddy #include <asm/div64.h>
28dbf7a733SM R Swami Reddy #include "lm49453.h"
29dbf7a733SM R Swami Reddy
30c418a84aSAxel Lin static const struct reg_default lm49453_reg_defs[] = {
31dbf7a733SM R Swami Reddy { 0, 0x00 },
32dbf7a733SM R Swami Reddy { 1, 0x00 },
33dbf7a733SM R Swami Reddy { 2, 0x00 },
34dbf7a733SM R Swami Reddy { 3, 0x00 },
35dbf7a733SM R Swami Reddy { 4, 0x00 },
36dbf7a733SM R Swami Reddy { 5, 0x00 },
37dbf7a733SM R Swami Reddy { 6, 0x00 },
38dbf7a733SM R Swami Reddy { 7, 0x00 },
39dbf7a733SM R Swami Reddy { 8, 0x00 },
40dbf7a733SM R Swami Reddy { 9, 0x00 },
41dbf7a733SM R Swami Reddy { 10, 0x00 },
42dbf7a733SM R Swami Reddy { 11, 0x00 },
43dbf7a733SM R Swami Reddy { 12, 0x00 },
44dbf7a733SM R Swami Reddy { 13, 0x00 },
45dbf7a733SM R Swami Reddy { 14, 0x00 },
46dbf7a733SM R Swami Reddy { 15, 0x00 },
47dbf7a733SM R Swami Reddy { 16, 0x00 },
48dbf7a733SM R Swami Reddy { 17, 0x00 },
49dbf7a733SM R Swami Reddy { 18, 0x00 },
50dbf7a733SM R Swami Reddy { 19, 0x00 },
51dbf7a733SM R Swami Reddy { 20, 0x00 },
52dbf7a733SM R Swami Reddy { 21, 0x00 },
53dbf7a733SM R Swami Reddy { 22, 0x00 },
54dbf7a733SM R Swami Reddy { 23, 0x00 },
55dbf7a733SM R Swami Reddy { 32, 0x00 },
56dbf7a733SM R Swami Reddy { 33, 0x00 },
57dbf7a733SM R Swami Reddy { 35, 0x00 },
58dbf7a733SM R Swami Reddy { 36, 0x00 },
59dbf7a733SM R Swami Reddy { 37, 0x00 },
60dbf7a733SM R Swami Reddy { 46, 0x00 },
61dbf7a733SM R Swami Reddy { 48, 0x00 },
62dbf7a733SM R Swami Reddy { 49, 0x00 },
63dbf7a733SM R Swami Reddy { 51, 0x00 },
64dbf7a733SM R Swami Reddy { 56, 0x00 },
65dbf7a733SM R Swami Reddy { 58, 0x00 },
66dbf7a733SM R Swami Reddy { 59, 0x00 },
67dbf7a733SM R Swami Reddy { 60, 0x00 },
68dbf7a733SM R Swami Reddy { 61, 0x00 },
69dbf7a733SM R Swami Reddy { 62, 0x00 },
70dbf7a733SM R Swami Reddy { 63, 0x00 },
71dbf7a733SM R Swami Reddy { 64, 0x00 },
72dbf7a733SM R Swami Reddy { 65, 0x00 },
73dbf7a733SM R Swami Reddy { 66, 0x00 },
74dbf7a733SM R Swami Reddy { 67, 0x00 },
75dbf7a733SM R Swami Reddy { 68, 0x00 },
76dbf7a733SM R Swami Reddy { 69, 0x00 },
77dbf7a733SM R Swami Reddy { 70, 0x00 },
78dbf7a733SM R Swami Reddy { 71, 0x00 },
79dbf7a733SM R Swami Reddy { 72, 0x00 },
80dbf7a733SM R Swami Reddy { 73, 0x00 },
81dbf7a733SM R Swami Reddy { 74, 0x00 },
82dbf7a733SM R Swami Reddy { 75, 0x00 },
83dbf7a733SM R Swami Reddy { 76, 0x00 },
84dbf7a733SM R Swami Reddy { 77, 0x00 },
85dbf7a733SM R Swami Reddy { 78, 0x00 },
86dbf7a733SM R Swami Reddy { 79, 0x00 },
87dbf7a733SM R Swami Reddy { 80, 0x00 },
88dbf7a733SM R Swami Reddy { 81, 0x00 },
89dbf7a733SM R Swami Reddy { 82, 0x00 },
90dbf7a733SM R Swami Reddy { 83, 0x00 },
91dbf7a733SM R Swami Reddy { 85, 0x00 },
92dbf7a733SM R Swami Reddy { 85, 0x00 },
93dbf7a733SM R Swami Reddy { 86, 0x00 },
94dbf7a733SM R Swami Reddy { 87, 0x00 },
95dbf7a733SM R Swami Reddy { 88, 0x00 },
96dbf7a733SM R Swami Reddy { 89, 0x00 },
97dbf7a733SM R Swami Reddy { 90, 0x00 },
98dbf7a733SM R Swami Reddy { 91, 0x00 },
99dbf7a733SM R Swami Reddy { 92, 0x00 },
100dbf7a733SM R Swami Reddy { 93, 0x00 },
101dbf7a733SM R Swami Reddy { 94, 0x00 },
102dbf7a733SM R Swami Reddy { 95, 0x00 },
103dbf7a733SM R Swami Reddy { 96, 0x01 },
104dbf7a733SM R Swami Reddy { 97, 0x00 },
105dbf7a733SM R Swami Reddy { 98, 0x00 },
106dbf7a733SM R Swami Reddy { 99, 0x00 },
107dbf7a733SM R Swami Reddy { 100, 0x00 },
108dbf7a733SM R Swami Reddy { 101, 0x00 },
109dbf7a733SM R Swami Reddy { 102, 0x00 },
110dbf7a733SM R Swami Reddy { 103, 0x01 },
1119dc754dfSMR.Swami.Reddy@ti.com { 104, 0x01 },
1129dc754dfSMR.Swami.Reddy@ti.com { 105, 0x00 },
1139dc754dfSMR.Swami.Reddy@ti.com { 106, 0x01 },
114dbf7a733SM R Swami Reddy { 107, 0x00 },
115dbf7a733SM R Swami Reddy { 108, 0x00 },
116dbf7a733SM R Swami Reddy { 109, 0x00 },
117dbf7a733SM R Swami Reddy { 110, 0x00 },
118dbf7a733SM R Swami Reddy { 111, 0x02 },
119dbf7a733SM R Swami Reddy { 112, 0x02 },
120dbf7a733SM R Swami Reddy { 113, 0x00 },
121dbf7a733SM R Swami Reddy { 121, 0x80 },
122dbf7a733SM R Swami Reddy { 122, 0xBB },
123dbf7a733SM R Swami Reddy { 123, 0x80 },
124dbf7a733SM R Swami Reddy { 124, 0xBB },
125dbf7a733SM R Swami Reddy { 128, 0x00 },
126dbf7a733SM R Swami Reddy { 130, 0x00 },
127dbf7a733SM R Swami Reddy { 131, 0x00 },
128dbf7a733SM R Swami Reddy { 132, 0x00 },
129dbf7a733SM R Swami Reddy { 133, 0x0A },
130dbf7a733SM R Swami Reddy { 134, 0x0A },
131dbf7a733SM R Swami Reddy { 135, 0x0A },
132dbf7a733SM R Swami Reddy { 136, 0x0F },
133dbf7a733SM R Swami Reddy { 137, 0x00 },
134dbf7a733SM R Swami Reddy { 138, 0x73 },
135dbf7a733SM R Swami Reddy { 139, 0x33 },
136dbf7a733SM R Swami Reddy { 140, 0x73 },
137dbf7a733SM R Swami Reddy { 141, 0x33 },
138dbf7a733SM R Swami Reddy { 142, 0x73 },
139dbf7a733SM R Swami Reddy { 143, 0x33 },
140dbf7a733SM R Swami Reddy { 144, 0x73 },
141dbf7a733SM R Swami Reddy { 145, 0x33 },
142dbf7a733SM R Swami Reddy { 146, 0x73 },
143dbf7a733SM R Swami Reddy { 147, 0x33 },
144dbf7a733SM R Swami Reddy { 148, 0x73 },
145dbf7a733SM R Swami Reddy { 149, 0x33 },
146dbf7a733SM R Swami Reddy { 150, 0x73 },
147dbf7a733SM R Swami Reddy { 151, 0x33 },
148dbf7a733SM R Swami Reddy { 152, 0x00 },
149dbf7a733SM R Swami Reddy { 153, 0x00 },
150dbf7a733SM R Swami Reddy { 154, 0x00 },
151dbf7a733SM R Swami Reddy { 155, 0x00 },
152dbf7a733SM R Swami Reddy { 176, 0x00 },
153dbf7a733SM R Swami Reddy { 177, 0x00 },
154dbf7a733SM R Swami Reddy { 178, 0x00 },
155dbf7a733SM R Swami Reddy { 179, 0x00 },
156dbf7a733SM R Swami Reddy { 180, 0x00 },
157dbf7a733SM R Swami Reddy { 181, 0x00 },
158dbf7a733SM R Swami Reddy { 182, 0x00 },
159dbf7a733SM R Swami Reddy { 183, 0x00 },
160dbf7a733SM R Swami Reddy { 184, 0x00 },
161dbf7a733SM R Swami Reddy { 185, 0x00 },
162dbf7a733SM R Swami Reddy { 186, 0x00 },
1639dc754dfSMR.Swami.Reddy@ti.com { 187, 0x00 },
164dbf7a733SM R Swami Reddy { 188, 0x00 },
1659dc754dfSMR.Swami.Reddy@ti.com { 189, 0x00 },
1669dc754dfSMR.Swami.Reddy@ti.com { 208, 0x06 },
167dbf7a733SM R Swami Reddy { 209, 0x00 },
1689dc754dfSMR.Swami.Reddy@ti.com { 210, 0x08 },
1699dc754dfSMR.Swami.Reddy@ti.com { 211, 0x54 },
1709dc754dfSMR.Swami.Reddy@ti.com { 212, 0x14 },
1719dc754dfSMR.Swami.Reddy@ti.com { 213, 0x0d },
1729dc754dfSMR.Swami.Reddy@ti.com { 214, 0x0d },
1739dc754dfSMR.Swami.Reddy@ti.com { 215, 0x14 },
1749dc754dfSMR.Swami.Reddy@ti.com { 216, 0x60 },
175dbf7a733SM R Swami Reddy { 221, 0x00 },
176dbf7a733SM R Swami Reddy { 222, 0x00 },
1779dc754dfSMR.Swami.Reddy@ti.com { 223, 0x00 },
178dbf7a733SM R Swami Reddy { 224, 0x00 },
179dbf7a733SM R Swami Reddy { 248, 0x00 },
180dbf7a733SM R Swami Reddy { 249, 0x00 },
1819dc754dfSMR.Swami.Reddy@ti.com { 250, 0x00 },
182dbf7a733SM R Swami Reddy { 255, 0x00 },
183dbf7a733SM R Swami Reddy };
184dbf7a733SM R Swami Reddy
185dbf7a733SM R Swami Reddy /* codec private data */
186dbf7a733SM R Swami Reddy struct lm49453_priv {
187dbf7a733SM R Swami Reddy struct regmap *regmap;
188dbf7a733SM R Swami Reddy };
189dbf7a733SM R Swami Reddy
190dbf7a733SM R Swami Reddy /* capture path controls */
191dbf7a733SM R Swami Reddy
192dbf7a733SM R Swami Reddy static const char *lm49453_mic2mode_text[] = {"Single Ended", "Differential"};
193dbf7a733SM R Swami Reddy
19451e5b59cSTakashi Iwai static SOC_ENUM_SINGLE_DECL(lm49453_mic2mode_enum, LM49453_P0_MICR_REG, 5,
195dbf7a733SM R Swami Reddy lm49453_mic2mode_text);
196dbf7a733SM R Swami Reddy
197dbf7a733SM R Swami Reddy static const char *lm49453_dmic_cfg_text[] = {"DMICDAT1", "DMICDAT2"};
198dbf7a733SM R Swami Reddy
19951e5b59cSTakashi Iwai static SOC_ENUM_SINGLE_DECL(lm49453_dmic12_cfg_enum,
20051e5b59cSTakashi Iwai LM49453_P0_DIGITAL_MIC1_CONFIG_REG, 7,
20151e5b59cSTakashi Iwai lm49453_dmic_cfg_text);
202dbf7a733SM R Swami Reddy
20351e5b59cSTakashi Iwai static SOC_ENUM_SINGLE_DECL(lm49453_dmic34_cfg_enum,
20451e5b59cSTakashi Iwai LM49453_P0_DIGITAL_MIC2_CONFIG_REG, 7,
20551e5b59cSTakashi Iwai lm49453_dmic_cfg_text);
206dbf7a733SM R Swami Reddy
207dbf7a733SM R Swami Reddy /* MUX Controls */
208dbf7a733SM R Swami Reddy static const char *lm49453_adcl_mux_text[] = { "MIC1", "Aux_L" };
209dbf7a733SM R Swami Reddy
210dbf7a733SM R Swami Reddy static const char *lm49453_adcr_mux_text[] = { "MIC2", "Aux_R" };
211dbf7a733SM R Swami Reddy
21226d04ca8STakashi Iwai static SOC_ENUM_SINGLE_DECL(lm49453_adcl_enum,
21326d04ca8STakashi Iwai LM49453_P0_ANALOG_MIXER_ADC_REG, 0,
214dbf7a733SM R Swami Reddy lm49453_adcl_mux_text);
215dbf7a733SM R Swami Reddy
21626d04ca8STakashi Iwai static SOC_ENUM_SINGLE_DECL(lm49453_adcr_enum,
21726d04ca8STakashi Iwai LM49453_P0_ANALOG_MIXER_ADC_REG, 1,
218dbf7a733SM R Swami Reddy lm49453_adcr_mux_text);
219dbf7a733SM R Swami Reddy
220dbf7a733SM R Swami Reddy static const struct snd_kcontrol_new lm49453_adcl_mux_control =
221dbf7a733SM R Swami Reddy SOC_DAPM_ENUM("ADC Left Mux", lm49453_adcl_enum);
222dbf7a733SM R Swami Reddy
223dbf7a733SM R Swami Reddy static const struct snd_kcontrol_new lm49453_adcr_mux_control =
224dbf7a733SM R Swami Reddy SOC_DAPM_ENUM("ADC Right Mux", lm49453_adcr_enum);
225dbf7a733SM R Swami Reddy
226dbf7a733SM R Swami Reddy static const struct snd_kcontrol_new lm49453_headset_left_mixer[] = {
227dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port1_1 Switch", LM49453_P0_DACHPL1_REG, 0, 1, 0),
228dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port1_2 Switch", LM49453_P0_DACHPL1_REG, 1, 1, 0),
229dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port1_3 Switch", LM49453_P0_DACHPL1_REG, 2, 1, 0),
230dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port1_4 Switch", LM49453_P0_DACHPL1_REG, 3, 1, 0),
231dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port1_5 Switch", LM49453_P0_DACHPL1_REG, 4, 1, 0),
232dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port1_6 Switch", LM49453_P0_DACHPL1_REG, 5, 1, 0),
233dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port1_7 Switch", LM49453_P0_DACHPL1_REG, 6, 1, 0),
234dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port1_8 Switch", LM49453_P0_DACHPL1_REG, 7, 1, 0),
235dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("DMIC1L Switch", LM49453_P0_DACHPL2_REG, 0, 1, 0),
236dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("DMIC1R Switch", LM49453_P0_DACHPL2_REG, 1, 1, 0),
237dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("DMIC2L Switch", LM49453_P0_DACHPL2_REG, 2, 1, 0),
238dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("DMIC2R Switch", LM49453_P0_DACHPL2_REG, 3, 1, 0),
239dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("ADCL Switch", LM49453_P0_DACHPL2_REG, 4, 1, 0),
240dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("ADCR Switch", LM49453_P0_DACHPL2_REG, 5, 1, 0),
241dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port2_1 Switch", LM49453_P0_DACHPL2_REG, 6, 1, 0),
242dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port2_2 Switch", LM49453_P0_DACHPL2_REG, 7, 1, 0),
243dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Sidetone Switch", LM49453_P0_STN_SEL_REG, 0, 0, 0),
244dbf7a733SM R Swami Reddy };
245dbf7a733SM R Swami Reddy
246dbf7a733SM R Swami Reddy static const struct snd_kcontrol_new lm49453_headset_right_mixer[] = {
247dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port1_1 Switch", LM49453_P0_DACHPR1_REG, 0, 1, 0),
248dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port1_2 Switch", LM49453_P0_DACHPR1_REG, 1, 1, 0),
249dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port1_3 Switch", LM49453_P0_DACHPR1_REG, 2, 1, 0),
250dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port1_4 Switch", LM49453_P0_DACHPR1_REG, 3, 1, 0),
251dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port1_5 Switch", LM49453_P0_DACHPR1_REG, 4, 1, 0),
252dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port1_6 Switch", LM49453_P0_DACHPR1_REG, 5, 1, 0),
253dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port1_7 Switch", LM49453_P0_DACHPR1_REG, 6, 1, 0),
254dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port1_8 Switch", LM49453_P0_DACHPR1_REG, 7, 1, 0),
255dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("DMIC1L Switch", LM49453_P0_DACHPR2_REG, 0, 1, 0),
256dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("DMIC1R Switch", LM49453_P0_DACHPR2_REG, 1, 1, 0),
257dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("DMIC2L Switch", LM49453_P0_DACHPR2_REG, 2, 1, 0),
258dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("DMIC2R Switch", LM49453_P0_DACHPR2_REG, 3, 1, 0),
259dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("ADCL Switch", LM49453_P0_DACHPR2_REG, 4, 1, 0),
260dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("ADCR Switch", LM49453_P0_DACHPR2_REG, 5, 1, 0),
261dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port2_1 Switch", LM49453_P0_DACHPR2_REG, 6, 1, 0),
262dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port2_2 Switch", LM49453_P0_DACHPR2_REG, 7, 1, 0),
263dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Sidetone Switch", LM49453_P0_STN_SEL_REG, 1, 0, 0),
264dbf7a733SM R Swami Reddy };
265dbf7a733SM R Swami Reddy
266dbf7a733SM R Swami Reddy static const struct snd_kcontrol_new lm49453_speaker_left_mixer[] = {
267dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port1_1 Switch", LM49453_P0_DACLSL1_REG, 0, 1, 0),
268dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port1_2 Switch", LM49453_P0_DACLSL1_REG, 1, 1, 0),
269dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port1_3 Switch", LM49453_P0_DACLSL1_REG, 2, 1, 0),
270dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port1_4 Switch", LM49453_P0_DACLSL1_REG, 3, 1, 0),
271dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port1_5 Switch", LM49453_P0_DACLSL1_REG, 4, 1, 0),
272dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port1_6 Switch", LM49453_P0_DACLSL1_REG, 5, 1, 0),
273dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port1_7 Switch", LM49453_P0_DACLSL1_REG, 6, 1, 0),
274dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port1_8 Switch", LM49453_P0_DACLSL1_REG, 7, 1, 0),
275dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("DMIC1L Switch", LM49453_P0_DACLSL2_REG, 0, 1, 0),
276dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("DMIC1R Switch", LM49453_P0_DACLSL2_REG, 1, 1, 0),
277dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("DMIC2L Switch", LM49453_P0_DACLSL2_REG, 2, 1, 0),
278dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("DMIC2R Switch", LM49453_P0_DACLSL2_REG, 3, 1, 0),
279dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("ADCL Switch", LM49453_P0_DACLSL2_REG, 4, 1, 0),
280dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("ADCR Switch", LM49453_P0_DACLSL2_REG, 5, 1, 0),
281dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port2_1 Switch", LM49453_P0_DACLSL2_REG, 6, 1, 0),
282dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port2_2 Switch", LM49453_P0_DACLSL2_REG, 7, 1, 0),
283dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Sidetone Switch", LM49453_P0_STN_SEL_REG, 2, 0, 0),
284dbf7a733SM R Swami Reddy };
285dbf7a733SM R Swami Reddy
286dbf7a733SM R Swami Reddy static const struct snd_kcontrol_new lm49453_speaker_right_mixer[] = {
287dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port1_1 Switch", LM49453_P0_DACLSR1_REG, 0, 1, 0),
288dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port1_2 Switch", LM49453_P0_DACLSR1_REG, 1, 1, 0),
289dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port1_3 Switch", LM49453_P0_DACLSR1_REG, 2, 1, 0),
290dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port1_4 Switch", LM49453_P0_DACLSR1_REG, 3, 1, 0),
291dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port1_5 Switch", LM49453_P0_DACLSR1_REG, 4, 1, 0),
292dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port1_6 Switch", LM49453_P0_DACLSR1_REG, 5, 1, 0),
293dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port1_7 Switch", LM49453_P0_DACLSR1_REG, 6, 1, 0),
294dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port1_8 Switch", LM49453_P0_DACLSR1_REG, 7, 1, 0),
295dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("DMIC1L Switch", LM49453_P0_DACLSR2_REG, 0, 1, 0),
296dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("DMIC1R Switch", LM49453_P0_DACLSR2_REG, 1, 1, 0),
297dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("DMIC2L Switch", LM49453_P0_DACLSR2_REG, 2, 1, 0),
298dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("DMIC2R Switch", LM49453_P0_DACLSR2_REG, 3, 1, 0),
299dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("ADCL Switch", LM49453_P0_DACLSR2_REG, 4, 1, 0),
300dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("ADCR Switch", LM49453_P0_DACLSR2_REG, 5, 1, 0),
301dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port2_1 Switch", LM49453_P0_DACLSR2_REG, 6, 1, 0),
302dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port2_2 Switch", LM49453_P0_DACLSR2_REG, 7, 1, 0),
303dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Sidetone Switch", LM49453_P0_STN_SEL_REG, 3, 0, 0),
304dbf7a733SM R Swami Reddy };
305dbf7a733SM R Swami Reddy
306dbf7a733SM R Swami Reddy static const struct snd_kcontrol_new lm49453_haptic_left_mixer[] = {
307dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port1_1 Switch", LM49453_P0_DACHAL1_REG, 0, 1, 0),
308dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port1_2 Switch", LM49453_P0_DACHAL1_REG, 1, 1, 0),
309dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port1_3 Switch", LM49453_P0_DACHAL1_REG, 2, 1, 0),
310dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port1_4 Switch", LM49453_P0_DACHAL1_REG, 3, 1, 0),
311dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port1_5 Switch", LM49453_P0_DACHAL1_REG, 4, 1, 0),
312dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port1_6 Switch", LM49453_P0_DACHAL1_REG, 5, 1, 0),
313dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port1_7 Switch", LM49453_P0_DACHAL1_REG, 6, 1, 0),
314dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port1_8 Switch", LM49453_P0_DACHAL1_REG, 7, 1, 0),
315dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("DMIC1L Switch", LM49453_P0_DACHAL2_REG, 0, 1, 0),
316dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("DMIC1R Switch", LM49453_P0_DACHAL2_REG, 1, 1, 0),
317dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("DMIC2L Switch", LM49453_P0_DACHAL2_REG, 2, 1, 0),
318dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("DMIC2R Switch", LM49453_P0_DACHAL2_REG, 3, 1, 0),
319dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("ADCL Switch", LM49453_P0_DACHAL2_REG, 4, 1, 0),
320dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("ADCR Switch", LM49453_P0_DACHAL2_REG, 5, 1, 0),
321dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port2_1 Switch", LM49453_P0_DACHAL2_REG, 6, 1, 0),
322dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port2_2 Switch", LM49453_P0_DACHAL2_REG, 7, 1, 0),
323dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Sidetone Switch", LM49453_P0_STN_SEL_REG, 4, 0, 0),
324dbf7a733SM R Swami Reddy };
325dbf7a733SM R Swami Reddy
326dbf7a733SM R Swami Reddy static const struct snd_kcontrol_new lm49453_haptic_right_mixer[] = {
327dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port1_1 Switch", LM49453_P0_DACHAR1_REG, 0, 1, 0),
328dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port1_2 Switch", LM49453_P0_DACHAR1_REG, 1, 1, 0),
329dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port1_3 Switch", LM49453_P0_DACHAR1_REG, 2, 1, 0),
330dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port1_4 Switch", LM49453_P0_DACHAR1_REG, 3, 1, 0),
331dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port1_5 Switch", LM49453_P0_DACHAR1_REG, 4, 1, 0),
332dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port1_6 Switch", LM49453_P0_DACHAR1_REG, 5, 1, 0),
333dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port1_7 Switch", LM49453_P0_DACHAR1_REG, 6, 1, 0),
334dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port1_8 Switch", LM49453_P0_DACHAR1_REG, 7, 1, 0),
335dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("DMIC1L Switch", LM49453_P0_DACHAR2_REG, 0, 1, 0),
336dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("DMIC1R Switch", LM49453_P0_DACHAR2_REG, 1, 1, 0),
337dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("DMIC2L Switch", LM49453_P0_DACHAR2_REG, 2, 1, 0),
338dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("DMIC2R Switch", LM49453_P0_DACHAR2_REG, 3, 1, 0),
339dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("ADCL Switch", LM49453_P0_DACHAR2_REG, 4, 1, 0),
340dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("ADCR Switch", LM49453_P0_DACHAR2_REG, 5, 1, 0),
341dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port2_1 Switch", LM49453_P0_DACHAR2_REG, 6, 1, 0),
342dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port2_2 Switch", LM49453_P0_DACHAR2_REG, 7, 1, 0),
343dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Sidetone Switch", LM49453_P0_STN_SEL_REG, 5, 0, 0),
344dbf7a733SM R Swami Reddy };
345dbf7a733SM R Swami Reddy
346dbf7a733SM R Swami Reddy static const struct snd_kcontrol_new lm49453_lineout_left_mixer[] = {
347dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port1_1 Switch", LM49453_P0_DACLOL1_REG, 0, 1, 0),
348dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port1_2 Switch", LM49453_P0_DACLOL1_REG, 1, 1, 0),
349dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port1_3 Switch", LM49453_P0_DACLOL1_REG, 2, 1, 0),
350dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port1_4 Switch", LM49453_P0_DACLOL1_REG, 3, 1, 0),
351dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port1_5 Switch", LM49453_P0_DACLOL1_REG, 4, 1, 0),
352dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port1_6 Switch", LM49453_P0_DACLOL1_REG, 5, 1, 0),
353dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port1_7 Switch", LM49453_P0_DACLOL1_REG, 6, 1, 0),
354dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port1_8 Switch", LM49453_P0_DACLOL1_REG, 7, 1, 0),
355dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("DMIC1L Switch", LM49453_P0_DACLOL2_REG, 0, 1, 0),
356dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("DMIC1R Switch", LM49453_P0_DACLOL2_REG, 1, 1, 0),
357dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("DMIC2L Switch", LM49453_P0_DACLOL2_REG, 2, 1, 0),
358dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("DMIC2R Switch", LM49453_P0_DACLOL2_REG, 3, 1, 0),
359dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("ADCL Switch", LM49453_P0_DACLOL2_REG, 4, 1, 0),
360dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("ADCR Switch", LM49453_P0_DACLOL2_REG, 5, 1, 0),
361dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port2_1 Switch", LM49453_P0_DACLOL2_REG, 6, 1, 0),
362dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port2_2 Switch", LM49453_P0_DACLOL2_REG, 7, 1, 0),
363dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Sidetone Switch", LM49453_P0_STN_SEL_REG, 6, 0, 0),
364dbf7a733SM R Swami Reddy };
365dbf7a733SM R Swami Reddy
366dbf7a733SM R Swami Reddy static const struct snd_kcontrol_new lm49453_lineout_right_mixer[] = {
367dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port1_1 Switch", LM49453_P0_DACLOR1_REG, 0, 1, 0),
368dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port1_2 Switch", LM49453_P0_DACLOR1_REG, 1, 1, 0),
369dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port1_3 Switch", LM49453_P0_DACLOR1_REG, 2, 1, 0),
370dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port1_4 Switch", LM49453_P0_DACLOR1_REG, 3, 1, 0),
371dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port1_5 Switch", LM49453_P0_DACLOR1_REG, 4, 1, 0),
372dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port1_6 Switch", LM49453_P0_DACLOR1_REG, 5, 1, 0),
373dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port1_7 Switch", LM49453_P0_DACLOR1_REG, 6, 1, 0),
374dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port1_8 Switch", LM49453_P0_DACLOR1_REG, 7, 1, 0),
375dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("DMIC1L Switch", LM49453_P0_DACLOR2_REG, 0, 1, 0),
376dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("DMIC1R Switch", LM49453_P0_DACLOR2_REG, 1, 1, 0),
377dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("DMIC2L Switch", LM49453_P0_DACLOR2_REG, 2, 1, 0),
378dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("DMIC2R Switch", LM49453_P0_DACLOR2_REG, 3, 1, 0),
379dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("ADCL Switch", LM49453_P0_DACLOR2_REG, 4, 1, 0),
380dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("ADCR Switch", LM49453_P0_DACLOR2_REG, 5, 1, 0),
381dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port2_1 Switch", LM49453_P0_DACLOR2_REG, 6, 1, 0),
382dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port2_2 Switch", LM49453_P0_DACLOR2_REG, 7, 1, 0),
383dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Sidetone Switch", LM49453_P0_STN_SEL_REG, 7, 0, 0),
384dbf7a733SM R Swami Reddy };
385dbf7a733SM R Swami Reddy
386dbf7a733SM R Swami Reddy static const struct snd_kcontrol_new lm49453_port1_tx1_mixer[] = {
387dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("DMIC1L Switch", LM49453_P0_PORT1_TX1_REG, 0, 1, 0),
388dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("DMIC1R Switch", LM49453_P0_PORT1_TX1_REG, 1, 1, 0),
389dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("DMIC2L Switch", LM49453_P0_PORT1_TX1_REG, 2, 1, 0),
390dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("DMIC2R Switch", LM49453_P0_PORT1_TX1_REG, 3, 1, 0),
391dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("ADCL Switch", LM49453_P0_PORT1_TX1_REG, 4, 1, 0),
392dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("ADCR Switch", LM49453_P0_PORT1_TX1_REG, 5, 1, 0),
393dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port1_1 Switch", LM49453_P0_PORT1_TX1_REG, 6, 1, 0),
394dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port2_1 Switch", LM49453_P0_PORT1_TX1_REG, 7, 1, 0),
395dbf7a733SM R Swami Reddy };
396dbf7a733SM R Swami Reddy
397dbf7a733SM R Swami Reddy static const struct snd_kcontrol_new lm49453_port1_tx2_mixer[] = {
398dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("DMIC1L Switch", LM49453_P0_PORT1_TX2_REG, 0, 1, 0),
399dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("DMIC1R Switch", LM49453_P0_PORT1_TX2_REG, 1, 1, 0),
400dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("DMIC2L Switch", LM49453_P0_PORT1_TX2_REG, 2, 1, 0),
401dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("DMIC2R Switch", LM49453_P0_PORT1_TX2_REG, 3, 1, 0),
402dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("ADCL Switch", LM49453_P0_PORT1_TX2_REG, 4, 1, 0),
403dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("ADCR Switch", LM49453_P0_PORT1_TX2_REG, 5, 1, 0),
404dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port1_2 Switch", LM49453_P0_PORT1_TX2_REG, 6, 1, 0),
405dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port2_2 Switch", LM49453_P0_PORT1_TX2_REG, 7, 1, 0),
406dbf7a733SM R Swami Reddy };
407dbf7a733SM R Swami Reddy
408dbf7a733SM R Swami Reddy static const struct snd_kcontrol_new lm49453_port1_tx3_mixer[] = {
409dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("DMIC1L Switch", LM49453_P0_PORT1_TX3_REG, 0, 1, 0),
410dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("DMIC1R Switch", LM49453_P0_PORT1_TX3_REG, 1, 1, 0),
411dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("DMIC2L Switch", LM49453_P0_PORT1_TX3_REG, 2, 1, 0),
412dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("DMIC2R Switch", LM49453_P0_PORT1_TX3_REG, 3, 1, 0),
413dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("ADCL Switch", LM49453_P0_PORT1_TX3_REG, 4, 1, 0),
414dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("ADCR Switch", LM49453_P0_PORT1_TX3_REG, 5, 1, 0),
415dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port1_3 Switch", LM49453_P0_PORT1_TX3_REG, 6, 1, 0),
416dbf7a733SM R Swami Reddy };
417dbf7a733SM R Swami Reddy
418dbf7a733SM R Swami Reddy static const struct snd_kcontrol_new lm49453_port1_tx4_mixer[] = {
419dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("DMIC1L Switch", LM49453_P0_PORT1_TX4_REG, 0, 1, 0),
420dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("DMIC1R Switch", LM49453_P0_PORT1_TX4_REG, 1, 1, 0),
421dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("DMIC2L Switch", LM49453_P0_PORT1_TX4_REG, 2, 1, 0),
422dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("DMIC2R Switch", LM49453_P0_PORT1_TX4_REG, 3, 1, 0),
423dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("ADCL Switch", LM49453_P0_PORT1_TX4_REG, 4, 1, 0),
424dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("ADCR Switch", LM49453_P0_PORT1_TX4_REG, 5, 1, 0),
425dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port1_4 Switch", LM49453_P0_PORT1_TX4_REG, 6, 1, 0),
426dbf7a733SM R Swami Reddy };
427dbf7a733SM R Swami Reddy
428dbf7a733SM R Swami Reddy static const struct snd_kcontrol_new lm49453_port1_tx5_mixer[] = {
429dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("DMIC1L Switch", LM49453_P0_PORT1_TX5_REG, 0, 1, 0),
430dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("DMIC1R Switch", LM49453_P0_PORT1_TX5_REG, 1, 1, 0),
431dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("DMIC2L Switch", LM49453_P0_PORT1_TX5_REG, 2, 1, 0),
432dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("DMIC2R Switch", LM49453_P0_PORT1_TX5_REG, 3, 1, 0),
433dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("ADCL Switch", LM49453_P0_PORT1_TX5_REG, 4, 1, 0),
434dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("ADCR Switch", LM49453_P0_PORT1_TX5_REG, 5, 1, 0),
435dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port1_5 Switch", LM49453_P0_PORT1_TX5_REG, 6, 1, 0),
436dbf7a733SM R Swami Reddy };
437dbf7a733SM R Swami Reddy
438dbf7a733SM R Swami Reddy static const struct snd_kcontrol_new lm49453_port1_tx6_mixer[] = {
439dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("DMIC1L Switch", LM49453_P0_PORT1_TX6_REG, 0, 1, 0),
440dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("DMIC1R Switch", LM49453_P0_PORT1_TX6_REG, 1, 1, 0),
441dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("DMIC2L Switch", LM49453_P0_PORT1_TX6_REG, 2, 1, 0),
442dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("DMIC2R Switch", LM49453_P0_PORT1_TX6_REG, 3, 1, 0),
443dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("ADCL Switch", LM49453_P0_PORT1_TX6_REG, 4, 1, 0),
444dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("ADCR Switch", LM49453_P0_PORT1_TX6_REG, 5, 1, 0),
445dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port1_6 Switch", LM49453_P0_PORT1_TX6_REG, 6, 1, 0),
446dbf7a733SM R Swami Reddy };
447dbf7a733SM R Swami Reddy
448dbf7a733SM R Swami Reddy static const struct snd_kcontrol_new lm49453_port1_tx7_mixer[] = {
449dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("DMIC1L Switch", LM49453_P0_PORT1_TX7_REG, 0, 1, 0),
450dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("DMIC1R Switch", LM49453_P0_PORT1_TX7_REG, 1, 1, 0),
451dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("DMIC2L Switch", LM49453_P0_PORT1_TX7_REG, 2, 1, 0),
452dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("DMIC2R Switch", LM49453_P0_PORT1_TX7_REG, 3, 1, 0),
453dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("ADCL Switch", LM49453_P0_PORT1_TX7_REG, 4, 1, 0),
454dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("ADCR Switch", LM49453_P0_PORT1_TX7_REG, 5, 1, 0),
455dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port1_7 Switch", LM49453_P0_PORT1_TX7_REG, 6, 1, 0),
456dbf7a733SM R Swami Reddy };
457dbf7a733SM R Swami Reddy
458dbf7a733SM R Swami Reddy static const struct snd_kcontrol_new lm49453_port1_tx8_mixer[] = {
459dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("DMIC1L Switch", LM49453_P0_PORT1_TX8_REG, 0, 1, 0),
460dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("DMIC1R Switch", LM49453_P0_PORT1_TX8_REG, 1, 1, 0),
461dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("DMIC2L Switch", LM49453_P0_PORT1_TX8_REG, 2, 1, 0),
462dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("DMIC2R Switch", LM49453_P0_PORT1_TX8_REG, 3, 1, 0),
463dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("ADCL Switch", LM49453_P0_PORT1_TX8_REG, 4, 1, 0),
464dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("ADCR Switch", LM49453_P0_PORT1_TX8_REG, 5, 1, 0),
465dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port1_8 Switch", LM49453_P0_PORT1_TX8_REG, 6, 1, 0),
466dbf7a733SM R Swami Reddy };
467dbf7a733SM R Swami Reddy
468dbf7a733SM R Swami Reddy static const struct snd_kcontrol_new lm49453_port2_tx1_mixer[] = {
469dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("DMIC1L Switch", LM49453_P0_PORT2_TX1_REG, 0, 1, 0),
470dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("DMIC1R Switch", LM49453_P0_PORT2_TX1_REG, 1, 1, 0),
471dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("DMIC2L Switch", LM49453_P0_PORT2_TX1_REG, 2, 1, 0),
472dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("DMIC2R Switch", LM49453_P0_PORT2_TX1_REG, 3, 1, 0),
473dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("ADCL Switch", LM49453_P0_PORT2_TX1_REG, 4, 1, 0),
474dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("ADCR Switch", LM49453_P0_PORT2_TX1_REG, 5, 1, 0),
475dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port1_1 Switch", LM49453_P0_PORT2_TX1_REG, 6, 1, 0),
476dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port2_1 Switch", LM49453_P0_PORT2_TX1_REG, 7, 1, 0),
477dbf7a733SM R Swami Reddy };
478dbf7a733SM R Swami Reddy
479dbf7a733SM R Swami Reddy static const struct snd_kcontrol_new lm49453_port2_tx2_mixer[] = {
480dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("DMIC1L Switch", LM49453_P0_PORT2_TX2_REG, 0, 1, 0),
481dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("DMIC1R Switch", LM49453_P0_PORT2_TX2_REG, 1, 1, 0),
482dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("DMIC2L Switch", LM49453_P0_PORT2_TX2_REG, 2, 1, 0),
483dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("DMIC2R Switch", LM49453_P0_PORT2_TX2_REG, 3, 1, 0),
484dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("ADCL Switch", LM49453_P0_PORT2_TX2_REG, 4, 1, 0),
485dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("ADCR Switch", LM49453_P0_PORT2_TX2_REG, 5, 1, 0),
486dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port1_2 Switch", LM49453_P0_PORT2_TX2_REG, 6, 1, 0),
487dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE("Port2_2 Switch", LM49453_P0_PORT2_TX2_REG, 7, 1, 0),
488dbf7a733SM R Swami Reddy };
489dbf7a733SM R Swami Reddy
490dbf7a733SM R Swami Reddy /* TLV Declarations */
49188ac4392SMR.Swami.Reddy@ti.com static const DECLARE_TLV_DB_SCALE(adc_dac_tlv, -7650, 150, 1);
49288ac4392SMR.Swami.Reddy@ti.com static const DECLARE_TLV_DB_SCALE(mic_tlv, 0, 200, 1);
49388ac4392SMR.Swami.Reddy@ti.com static const DECLARE_TLV_DB_SCALE(port_tlv, -1800, 600, 0);
49488ac4392SMR.Swami.Reddy@ti.com static const DECLARE_TLV_DB_SCALE(stn_tlv, -7200, 150, 0);
495dbf7a733SM R Swami Reddy
496dbf7a733SM R Swami Reddy static const struct snd_kcontrol_new lm49453_sidetone_mixer_controls[] = {
497dbf7a733SM R Swami Reddy /* Sidetone supports mono only */
498dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE_TLV("Sidetone ADCL Volume", LM49453_P0_STN_VOL_ADCL_REG,
49988ac4392SMR.Swami.Reddy@ti.com 0, 0x3F, 0, stn_tlv),
500dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE_TLV("Sidetone ADCR Volume", LM49453_P0_STN_VOL_ADCR_REG,
50188ac4392SMR.Swami.Reddy@ti.com 0, 0x3F, 0, stn_tlv),
502dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE_TLV("Sidetone DMIC1L Volume", LM49453_P0_STN_VOL_DMIC1L_REG,
50388ac4392SMR.Swami.Reddy@ti.com 0, 0x3F, 0, stn_tlv),
504dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE_TLV("Sidetone DMIC1R Volume", LM49453_P0_STN_VOL_DMIC1R_REG,
50588ac4392SMR.Swami.Reddy@ti.com 0, 0x3F, 0, stn_tlv),
506dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE_TLV("Sidetone DMIC2L Volume", LM49453_P0_STN_VOL_DMIC2L_REG,
50788ac4392SMR.Swami.Reddy@ti.com 0, 0x3F, 0, stn_tlv),
508dbf7a733SM R Swami Reddy SOC_DAPM_SINGLE_TLV("Sidetone DMIC2R Volume", LM49453_P0_STN_VOL_DMIC2R_REG,
50988ac4392SMR.Swami.Reddy@ti.com 0, 0x3F, 0, stn_tlv),
510dbf7a733SM R Swami Reddy };
511dbf7a733SM R Swami Reddy
512dbf7a733SM R Swami Reddy static const struct snd_kcontrol_new lm49453_snd_controls[] = {
513dbf7a733SM R Swami Reddy /* mic1 and mic2 supports mono only */
51488ac4392SMR.Swami.Reddy@ti.com SOC_SINGLE_TLV("Mic1 Volume", LM49453_P0_MICL_REG, 0, 15, 0, mic_tlv),
51588ac4392SMR.Swami.Reddy@ti.com SOC_SINGLE_TLV("Mic2 Volume", LM49453_P0_MICR_REG, 0, 15, 0, mic_tlv),
51688ac4392SMR.Swami.Reddy@ti.com
51788ac4392SMR.Swami.Reddy@ti.com SOC_SINGLE_TLV("ADCL Volume", LM49453_P0_ADC_LEVELL_REG, 0, 63,
51888ac4392SMR.Swami.Reddy@ti.com 0, adc_dac_tlv),
51988ac4392SMR.Swami.Reddy@ti.com SOC_SINGLE_TLV("ADCR Volume", LM49453_P0_ADC_LEVELR_REG, 0, 63,
52088ac4392SMR.Swami.Reddy@ti.com 0, adc_dac_tlv),
521dbf7a733SM R Swami Reddy
522dbf7a733SM R Swami Reddy SOC_DOUBLE_R_TLV("DMIC1 Volume", LM49453_P0_DMIC1_LEVELL_REG,
52388ac4392SMR.Swami.Reddy@ti.com LM49453_P0_DMIC1_LEVELR_REG, 0, 63, 0, adc_dac_tlv),
524dbf7a733SM R Swami Reddy SOC_DOUBLE_R_TLV("DMIC2 Volume", LM49453_P0_DMIC2_LEVELL_REG,
52588ac4392SMR.Swami.Reddy@ti.com LM49453_P0_DMIC2_LEVELR_REG, 0, 63, 0, adc_dac_tlv),
526dbf7a733SM R Swami Reddy
527dbf7a733SM R Swami Reddy SOC_DAPM_ENUM("Mic2Mode", lm49453_mic2mode_enum),
528dbf7a733SM R Swami Reddy SOC_DAPM_ENUM("DMIC12 SRC", lm49453_dmic12_cfg_enum),
529dbf7a733SM R Swami Reddy SOC_DAPM_ENUM("DMIC34 SRC", lm49453_dmic34_cfg_enum),
530dbf7a733SM R Swami Reddy
531dbf7a733SM R Swami Reddy /* Capture path filter enable */
532dbf7a733SM R Swami Reddy SOC_SINGLE("DMIC1 HPFilter Switch", LM49453_P0_ADC_FX_ENABLES_REG,
533dbf7a733SM R Swami Reddy 0, 1, 0),
534dbf7a733SM R Swami Reddy SOC_SINGLE("DMIC2 HPFilter Switch", LM49453_P0_ADC_FX_ENABLES_REG,
535dbf7a733SM R Swami Reddy 1, 1, 0),
536dbf7a733SM R Swami Reddy SOC_SINGLE("ADC HPFilter Switch", LM49453_P0_ADC_FX_ENABLES_REG,
537dbf7a733SM R Swami Reddy 2, 1, 0),
538dbf7a733SM R Swami Reddy
539dbf7a733SM R Swami Reddy SOC_DOUBLE_R_TLV("DAC HP Volume", LM49453_P0_DAC_HP_LEVELL_REG,
54088ac4392SMR.Swami.Reddy@ti.com LM49453_P0_DAC_HP_LEVELR_REG, 0, 63, 0, adc_dac_tlv),
541dbf7a733SM R Swami Reddy SOC_DOUBLE_R_TLV("DAC LO Volume", LM49453_P0_DAC_LO_LEVELL_REG,
54288ac4392SMR.Swami.Reddy@ti.com LM49453_P0_DAC_LO_LEVELR_REG, 0, 63, 0, adc_dac_tlv),
543dbf7a733SM R Swami Reddy SOC_DOUBLE_R_TLV("DAC LS Volume", LM49453_P0_DAC_LS_LEVELL_REG,
54488ac4392SMR.Swami.Reddy@ti.com LM49453_P0_DAC_LS_LEVELR_REG, 0, 63, 0, adc_dac_tlv),
545dbf7a733SM R Swami Reddy SOC_DOUBLE_R_TLV("DAC HA Volume", LM49453_P0_DAC_HA_LEVELL_REG,
54688ac4392SMR.Swami.Reddy@ti.com LM49453_P0_DAC_HA_LEVELR_REG, 0, 63, 0, adc_dac_tlv),
547dbf7a733SM R Swami Reddy
548dbf7a733SM R Swami Reddy SOC_SINGLE_TLV("EP Volume", LM49453_P0_DAC_LS_LEVELL_REG,
54988ac4392SMR.Swami.Reddy@ti.com 0, 63, 0, adc_dac_tlv),
550dbf7a733SM R Swami Reddy
551dbf7a733SM R Swami Reddy SOC_SINGLE_TLV("PORT1_1_RX_LVL Volume", LM49453_P0_PORT1_RX_LVL1_REG,
552dbf7a733SM R Swami Reddy 0, 3, 0, port_tlv),
553dbf7a733SM R Swami Reddy SOC_SINGLE_TLV("PORT1_2_RX_LVL Volume", LM49453_P0_PORT1_RX_LVL1_REG,
554dbf7a733SM R Swami Reddy 2, 3, 0, port_tlv),
555dbf7a733SM R Swami Reddy SOC_SINGLE_TLV("PORT1_3_RX_LVL Volume", LM49453_P0_PORT1_RX_LVL1_REG,
556dbf7a733SM R Swami Reddy 4, 3, 0, port_tlv),
557dbf7a733SM R Swami Reddy SOC_SINGLE_TLV("PORT1_4_RX_LVL Volume", LM49453_P0_PORT1_RX_LVL1_REG,
558dbf7a733SM R Swami Reddy 6, 3, 0, port_tlv),
559dbf7a733SM R Swami Reddy SOC_SINGLE_TLV("PORT1_5_RX_LVL Volume", LM49453_P0_PORT1_RX_LVL2_REG,
560dbf7a733SM R Swami Reddy 0, 3, 0, port_tlv),
561dbf7a733SM R Swami Reddy SOC_SINGLE_TLV("PORT1_6_RX_LVL Volume", LM49453_P0_PORT1_RX_LVL2_REG,
562dbf7a733SM R Swami Reddy 2, 3, 0, port_tlv),
563dbf7a733SM R Swami Reddy SOC_SINGLE_TLV("PORT1_7_RX_LVL Volume", LM49453_P0_PORT1_RX_LVL2_REG,
564dbf7a733SM R Swami Reddy 4, 3, 0, port_tlv),
565dbf7a733SM R Swami Reddy SOC_SINGLE_TLV("PORT1_8_RX_LVL Volume", LM49453_P0_PORT1_RX_LVL2_REG,
566dbf7a733SM R Swami Reddy 6, 3, 0, port_tlv),
567dbf7a733SM R Swami Reddy
568dbf7a733SM R Swami Reddy SOC_SINGLE_TLV("PORT2_1_RX_LVL Volume", LM49453_P0_PORT2_RX_LVL_REG,
569dbf7a733SM R Swami Reddy 0, 3, 0, port_tlv),
570dbf7a733SM R Swami Reddy SOC_SINGLE_TLV("PORT2_2_RX_LVL Volume", LM49453_P0_PORT2_RX_LVL_REG,
571dbf7a733SM R Swami Reddy 2, 3, 0, port_tlv),
572dbf7a733SM R Swami Reddy
573dbf7a733SM R Swami Reddy SOC_SINGLE("Port1 Playback Switch", LM49453_P0_AUDIO_PORT1_BASIC_REG,
574dbf7a733SM R Swami Reddy 1, 1, 0),
575dbf7a733SM R Swami Reddy SOC_SINGLE("Port2 Playback Switch", LM49453_P0_AUDIO_PORT2_BASIC_REG,
576dbf7a733SM R Swami Reddy 1, 1, 0),
577dbf7a733SM R Swami Reddy SOC_SINGLE("Port1 Capture Switch", LM49453_P0_AUDIO_PORT1_BASIC_REG,
578dbf7a733SM R Swami Reddy 2, 1, 0),
579dbf7a733SM R Swami Reddy SOC_SINGLE("Port2 Capture Switch", LM49453_P0_AUDIO_PORT2_BASIC_REG,
580dbf7a733SM R Swami Reddy 2, 1, 0)
581dbf7a733SM R Swami Reddy
582dbf7a733SM R Swami Reddy };
583dbf7a733SM R Swami Reddy
584dbf7a733SM R Swami Reddy /* DAPM widgets */
585dbf7a733SM R Swami Reddy static const struct snd_soc_dapm_widget lm49453_dapm_widgets[] = {
586dbf7a733SM R Swami Reddy
587dbf7a733SM R Swami Reddy /* All end points HP,EP, LS, Lineout and Haptic */
588dbf7a733SM R Swami Reddy SND_SOC_DAPM_OUTPUT("HPOUTL"),
589dbf7a733SM R Swami Reddy SND_SOC_DAPM_OUTPUT("HPOUTR"),
590dbf7a733SM R Swami Reddy SND_SOC_DAPM_OUTPUT("EPOUT"),
591dbf7a733SM R Swami Reddy SND_SOC_DAPM_OUTPUT("LSOUTL"),
592dbf7a733SM R Swami Reddy SND_SOC_DAPM_OUTPUT("LSOUTR"),
593dbf7a733SM R Swami Reddy SND_SOC_DAPM_OUTPUT("LOOUTR"),
594dbf7a733SM R Swami Reddy SND_SOC_DAPM_OUTPUT("LOOUTL"),
595dbf7a733SM R Swami Reddy SND_SOC_DAPM_OUTPUT("HAOUTL"),
596dbf7a733SM R Swami Reddy SND_SOC_DAPM_OUTPUT("HAOUTR"),
597dbf7a733SM R Swami Reddy
598dbf7a733SM R Swami Reddy SND_SOC_DAPM_INPUT("AMIC1"),
599dbf7a733SM R Swami Reddy SND_SOC_DAPM_INPUT("AMIC2"),
600dbf7a733SM R Swami Reddy SND_SOC_DAPM_INPUT("DMIC1DAT"),
601dbf7a733SM R Swami Reddy SND_SOC_DAPM_INPUT("DMIC2DAT"),
602dbf7a733SM R Swami Reddy SND_SOC_DAPM_INPUT("AUXL"),
603dbf7a733SM R Swami Reddy SND_SOC_DAPM_INPUT("AUXR"),
604dbf7a733SM R Swami Reddy
605dbf7a733SM R Swami Reddy SND_SOC_DAPM_PGA("PORT1_1_RX", SND_SOC_NOPM, 0, 0, NULL, 0),
606dbf7a733SM R Swami Reddy SND_SOC_DAPM_PGA("PORT1_2_RX", SND_SOC_NOPM, 0, 0, NULL, 0),
607dbf7a733SM R Swami Reddy SND_SOC_DAPM_PGA("PORT1_3_RX", SND_SOC_NOPM, 0, 0, NULL, 0),
608dbf7a733SM R Swami Reddy SND_SOC_DAPM_PGA("PORT1_4_RX", SND_SOC_NOPM, 0, 0, NULL, 0),
609dbf7a733SM R Swami Reddy SND_SOC_DAPM_PGA("PORT1_5_RX", SND_SOC_NOPM, 0, 0, NULL, 0),
610dbf7a733SM R Swami Reddy SND_SOC_DAPM_PGA("PORT1_6_RX", SND_SOC_NOPM, 0, 0, NULL, 0),
611dbf7a733SM R Swami Reddy SND_SOC_DAPM_PGA("PORT1_7_RX", SND_SOC_NOPM, 0, 0, NULL, 0),
612dbf7a733SM R Swami Reddy SND_SOC_DAPM_PGA("PORT1_8_RX", SND_SOC_NOPM, 0, 0, NULL, 0),
613dbf7a733SM R Swami Reddy SND_SOC_DAPM_PGA("PORT2_1_RX", SND_SOC_NOPM, 0, 0, NULL, 0),
614dbf7a733SM R Swami Reddy SND_SOC_DAPM_PGA("PORT2_2_RX", SND_SOC_NOPM, 0, 0, NULL, 0),
615dbf7a733SM R Swami Reddy
616dbf7a733SM R Swami Reddy SND_SOC_DAPM_SUPPLY("AMIC1Bias", LM49453_P0_MICL_REG, 6, 0, NULL, 0),
617dbf7a733SM R Swami Reddy SND_SOC_DAPM_SUPPLY("AMIC2Bias", LM49453_P0_MICR_REG, 6, 0, NULL, 0),
618dbf7a733SM R Swami Reddy
619dbf7a733SM R Swami Reddy /* playback path driver enables */
620dbf7a733SM R Swami Reddy SND_SOC_DAPM_OUT_DRV("Headset Switch",
621dbf7a733SM R Swami Reddy LM49453_P0_PMC_SETUP_REG, 0, 0, NULL, 0),
622dbf7a733SM R Swami Reddy SND_SOC_DAPM_OUT_DRV("Earpiece Switch",
623dbf7a733SM R Swami Reddy LM49453_P0_EP_REG, 0, 0, NULL, 0),
624dbf7a733SM R Swami Reddy SND_SOC_DAPM_OUT_DRV("Speaker Left Switch",
625dbf7a733SM R Swami Reddy LM49453_P0_DIS_PKVL_FB_REG, 0, 1, NULL, 0),
626dbf7a733SM R Swami Reddy SND_SOC_DAPM_OUT_DRV("Speaker Right Switch",
627dbf7a733SM R Swami Reddy LM49453_P0_DIS_PKVL_FB_REG, 1, 1, NULL, 0),
628dbf7a733SM R Swami Reddy SND_SOC_DAPM_OUT_DRV("Haptic Left Switch",
629dbf7a733SM R Swami Reddy LM49453_P0_DIS_PKVL_FB_REG, 2, 1, NULL, 0),
630dbf7a733SM R Swami Reddy SND_SOC_DAPM_OUT_DRV("Haptic Right Switch",
631dbf7a733SM R Swami Reddy LM49453_P0_DIS_PKVL_FB_REG, 3, 1, NULL, 0),
632dbf7a733SM R Swami Reddy
633dbf7a733SM R Swami Reddy /* DAC */
634dbf7a733SM R Swami Reddy SND_SOC_DAPM_DAC("HPL DAC", "Headset", SND_SOC_NOPM, 0, 0),
635dbf7a733SM R Swami Reddy SND_SOC_DAPM_DAC("HPR DAC", "Headset", SND_SOC_NOPM, 0, 0),
636dbf7a733SM R Swami Reddy SND_SOC_DAPM_DAC("LSL DAC", "Speaker", SND_SOC_NOPM, 0, 0),
637dbf7a733SM R Swami Reddy SND_SOC_DAPM_DAC("LSR DAC", "Speaker", SND_SOC_NOPM, 0, 0),
638dbf7a733SM R Swami Reddy SND_SOC_DAPM_DAC("HAL DAC", "Haptic", SND_SOC_NOPM, 0, 0),
639dbf7a733SM R Swami Reddy SND_SOC_DAPM_DAC("HAR DAC", "Haptic", SND_SOC_NOPM, 0, 0),
640dbf7a733SM R Swami Reddy SND_SOC_DAPM_DAC("LOL DAC", "Lineout", SND_SOC_NOPM, 0, 0),
641dbf7a733SM R Swami Reddy SND_SOC_DAPM_DAC("LOR DAC", "Lineout", SND_SOC_NOPM, 0, 0),
642dbf7a733SM R Swami Reddy
643dbf7a733SM R Swami Reddy
644dbf7a733SM R Swami Reddy SND_SOC_DAPM_PGA("AUXL Input",
645dbf7a733SM R Swami Reddy LM49453_P0_ANALOG_MIXER_ADC_REG, 2, 0, NULL, 0),
646dbf7a733SM R Swami Reddy SND_SOC_DAPM_PGA("AUXR Input",
647dbf7a733SM R Swami Reddy LM49453_P0_ANALOG_MIXER_ADC_REG, 3, 0, NULL, 0),
648dbf7a733SM R Swami Reddy
649dbf7a733SM R Swami Reddy SND_SOC_DAPM_PGA("Sidetone", SND_SOC_NOPM, 0, 0, NULL, 0),
650dbf7a733SM R Swami Reddy
651dbf7a733SM R Swami Reddy /* ADC */
652dbf7a733SM R Swami Reddy SND_SOC_DAPM_ADC("DMIC1 Left", "Capture", SND_SOC_NOPM, 1, 0),
653dbf7a733SM R Swami Reddy SND_SOC_DAPM_ADC("DMIC1 Right", "Capture", SND_SOC_NOPM, 1, 0),
654dbf7a733SM R Swami Reddy SND_SOC_DAPM_ADC("DMIC2 Left", "Capture", SND_SOC_NOPM, 1, 0),
655dbf7a733SM R Swami Reddy SND_SOC_DAPM_ADC("DMIC2 Right", "Capture", SND_SOC_NOPM, 1, 0),
656dbf7a733SM R Swami Reddy
657dbf7a733SM R Swami Reddy SND_SOC_DAPM_ADC("ADC Left", "Capture", SND_SOC_NOPM, 1, 0),
658dbf7a733SM R Swami Reddy SND_SOC_DAPM_ADC("ADC Right", "Capture", SND_SOC_NOPM, 0, 0),
659dbf7a733SM R Swami Reddy
660dbf7a733SM R Swami Reddy SND_SOC_DAPM_MUX("ADCL Mux", SND_SOC_NOPM, 0, 0,
661dbf7a733SM R Swami Reddy &lm49453_adcl_mux_control),
662dbf7a733SM R Swami Reddy SND_SOC_DAPM_MUX("ADCR Mux", SND_SOC_NOPM, 0, 0,
663dbf7a733SM R Swami Reddy &lm49453_adcr_mux_control),
664dbf7a733SM R Swami Reddy
665dbf7a733SM R Swami Reddy SND_SOC_DAPM_MUX("Mic1 Input",
666dbf7a733SM R Swami Reddy SND_SOC_NOPM, 0, 0, &lm49453_adcl_mux_control),
667dbf7a733SM R Swami Reddy
668dbf7a733SM R Swami Reddy SND_SOC_DAPM_MUX("Mic2 Input",
669dbf7a733SM R Swami Reddy SND_SOC_NOPM, 0, 0, &lm49453_adcr_mux_control),
670dbf7a733SM R Swami Reddy
671dbf7a733SM R Swami Reddy /* AIF */
672dbf7a733SM R Swami Reddy SND_SOC_DAPM_AIF_IN("PORT1_SDI", NULL, 0,
673dbf7a733SM R Swami Reddy LM49453_P0_PULL_CONFIG1_REG, 2, 0),
674dbf7a733SM R Swami Reddy SND_SOC_DAPM_AIF_IN("PORT2_SDI", NULL, 0,
675dbf7a733SM R Swami Reddy LM49453_P0_PULL_CONFIG1_REG, 6, 0),
676dbf7a733SM R Swami Reddy
677dbf7a733SM R Swami Reddy SND_SOC_DAPM_AIF_OUT("PORT1_SDO", NULL, 0,
678dbf7a733SM R Swami Reddy LM49453_P0_PULL_CONFIG1_REG, 3, 0),
679dbf7a733SM R Swami Reddy SND_SOC_DAPM_AIF_OUT("PORT2_SDO", NULL, 0,
680dbf7a733SM R Swami Reddy LM49453_P0_PULL_CONFIG1_REG, 7, 0),
681dbf7a733SM R Swami Reddy
682dbf7a733SM R Swami Reddy /* Port1 TX controls */
683dbf7a733SM R Swami Reddy SND_SOC_DAPM_OUT_DRV("P1_1_TX", SND_SOC_NOPM, 0, 0, NULL, 0),
684dbf7a733SM R Swami Reddy SND_SOC_DAPM_OUT_DRV("P1_2_TX", SND_SOC_NOPM, 0, 0, NULL, 0),
685dbf7a733SM R Swami Reddy SND_SOC_DAPM_OUT_DRV("P1_3_TX", SND_SOC_NOPM, 0, 0, NULL, 0),
686dbf7a733SM R Swami Reddy SND_SOC_DAPM_OUT_DRV("P1_4_TX", SND_SOC_NOPM, 0, 0, NULL, 0),
687dbf7a733SM R Swami Reddy SND_SOC_DAPM_OUT_DRV("P1_5_TX", SND_SOC_NOPM, 0, 0, NULL, 0),
688dbf7a733SM R Swami Reddy SND_SOC_DAPM_OUT_DRV("P1_6_TX", SND_SOC_NOPM, 0, 0, NULL, 0),
689dbf7a733SM R Swami Reddy SND_SOC_DAPM_OUT_DRV("P1_7_TX", SND_SOC_NOPM, 0, 0, NULL, 0),
690dbf7a733SM R Swami Reddy SND_SOC_DAPM_OUT_DRV("P1_8_TX", SND_SOC_NOPM, 0, 0, NULL, 0),
691dbf7a733SM R Swami Reddy
692dbf7a733SM R Swami Reddy /* Port2 TX controls */
693dbf7a733SM R Swami Reddy SND_SOC_DAPM_OUT_DRV("P2_1_TX", SND_SOC_NOPM, 0, 0, NULL, 0),
694dbf7a733SM R Swami Reddy SND_SOC_DAPM_OUT_DRV("P2_2_TX", SND_SOC_NOPM, 0, 0, NULL, 0),
695dbf7a733SM R Swami Reddy
696dbf7a733SM R Swami Reddy /* Sidetone Mixer */
697dbf7a733SM R Swami Reddy SND_SOC_DAPM_MIXER("Sidetone Mixer", SND_SOC_NOPM, 0, 0,
698dbf7a733SM R Swami Reddy lm49453_sidetone_mixer_controls,
699dbf7a733SM R Swami Reddy ARRAY_SIZE(lm49453_sidetone_mixer_controls)),
700dbf7a733SM R Swami Reddy
701dbf7a733SM R Swami Reddy /* DAC MIXERS */
702dbf7a733SM R Swami Reddy SND_SOC_DAPM_MIXER("HPL Mixer", SND_SOC_NOPM, 0, 0,
703dbf7a733SM R Swami Reddy lm49453_headset_left_mixer,
704dbf7a733SM R Swami Reddy ARRAY_SIZE(lm49453_headset_left_mixer)),
705dbf7a733SM R Swami Reddy SND_SOC_DAPM_MIXER("HPR Mixer", SND_SOC_NOPM, 0, 0,
706dbf7a733SM R Swami Reddy lm49453_headset_right_mixer,
707dbf7a733SM R Swami Reddy ARRAY_SIZE(lm49453_headset_right_mixer)),
708dbf7a733SM R Swami Reddy SND_SOC_DAPM_MIXER("LOL Mixer", SND_SOC_NOPM, 0, 0,
709dbf7a733SM R Swami Reddy lm49453_lineout_left_mixer,
710dbf7a733SM R Swami Reddy ARRAY_SIZE(lm49453_lineout_left_mixer)),
711dbf7a733SM R Swami Reddy SND_SOC_DAPM_MIXER("LOR Mixer", SND_SOC_NOPM, 0, 0,
712dbf7a733SM R Swami Reddy lm49453_lineout_right_mixer,
713dbf7a733SM R Swami Reddy ARRAY_SIZE(lm49453_lineout_right_mixer)),
714dbf7a733SM R Swami Reddy SND_SOC_DAPM_MIXER("LSL Mixer", SND_SOC_NOPM, 0, 0,
715dbf7a733SM R Swami Reddy lm49453_speaker_left_mixer,
716dbf7a733SM R Swami Reddy ARRAY_SIZE(lm49453_speaker_left_mixer)),
717dbf7a733SM R Swami Reddy SND_SOC_DAPM_MIXER("LSR Mixer", SND_SOC_NOPM, 0, 0,
718dbf7a733SM R Swami Reddy lm49453_speaker_right_mixer,
719dbf7a733SM R Swami Reddy ARRAY_SIZE(lm49453_speaker_right_mixer)),
720dbf7a733SM R Swami Reddy SND_SOC_DAPM_MIXER("HAL Mixer", SND_SOC_NOPM, 0, 0,
721dbf7a733SM R Swami Reddy lm49453_haptic_left_mixer,
722dbf7a733SM R Swami Reddy ARRAY_SIZE(lm49453_haptic_left_mixer)),
723dbf7a733SM R Swami Reddy SND_SOC_DAPM_MIXER("HAR Mixer", SND_SOC_NOPM, 0, 0,
724dbf7a733SM R Swami Reddy lm49453_haptic_right_mixer,
725dbf7a733SM R Swami Reddy ARRAY_SIZE(lm49453_haptic_right_mixer)),
726dbf7a733SM R Swami Reddy
727dbf7a733SM R Swami Reddy /* Capture Mixer */
728dbf7a733SM R Swami Reddy SND_SOC_DAPM_MIXER("Port1_1 Mixer", SND_SOC_NOPM, 0, 0,
729dbf7a733SM R Swami Reddy lm49453_port1_tx1_mixer,
730dbf7a733SM R Swami Reddy ARRAY_SIZE(lm49453_port1_tx1_mixer)),
731dbf7a733SM R Swami Reddy SND_SOC_DAPM_MIXER("Port1_2 Mixer", SND_SOC_NOPM, 0, 0,
732dbf7a733SM R Swami Reddy lm49453_port1_tx2_mixer,
733dbf7a733SM R Swami Reddy ARRAY_SIZE(lm49453_port1_tx2_mixer)),
734dbf7a733SM R Swami Reddy SND_SOC_DAPM_MIXER("Port1_3 Mixer", SND_SOC_NOPM, 0, 0,
735dbf7a733SM R Swami Reddy lm49453_port1_tx3_mixer,
736dbf7a733SM R Swami Reddy ARRAY_SIZE(lm49453_port1_tx3_mixer)),
737dbf7a733SM R Swami Reddy SND_SOC_DAPM_MIXER("Port1_4 Mixer", SND_SOC_NOPM, 0, 0,
738dbf7a733SM R Swami Reddy lm49453_port1_tx4_mixer,
739dbf7a733SM R Swami Reddy ARRAY_SIZE(lm49453_port1_tx4_mixer)),
740dbf7a733SM R Swami Reddy SND_SOC_DAPM_MIXER("Port1_5 Mixer", SND_SOC_NOPM, 0, 0,
741dbf7a733SM R Swami Reddy lm49453_port1_tx5_mixer,
742dbf7a733SM R Swami Reddy ARRAY_SIZE(lm49453_port1_tx5_mixer)),
743dbf7a733SM R Swami Reddy SND_SOC_DAPM_MIXER("Port1_6 Mixer", SND_SOC_NOPM, 0, 0,
744dbf7a733SM R Swami Reddy lm49453_port1_tx6_mixer,
745dbf7a733SM R Swami Reddy ARRAY_SIZE(lm49453_port1_tx6_mixer)),
746dbf7a733SM R Swami Reddy SND_SOC_DAPM_MIXER("Port1_7 Mixer", SND_SOC_NOPM, 0, 0,
747dbf7a733SM R Swami Reddy lm49453_port1_tx7_mixer,
748dbf7a733SM R Swami Reddy ARRAY_SIZE(lm49453_port1_tx7_mixer)),
749dbf7a733SM R Swami Reddy SND_SOC_DAPM_MIXER("Port1_8 Mixer", SND_SOC_NOPM, 0, 0,
750dbf7a733SM R Swami Reddy lm49453_port1_tx8_mixer,
751dbf7a733SM R Swami Reddy ARRAY_SIZE(lm49453_port1_tx8_mixer)),
752dbf7a733SM R Swami Reddy
753dbf7a733SM R Swami Reddy SND_SOC_DAPM_MIXER("Port2_1 Mixer", SND_SOC_NOPM, 0, 0,
754dbf7a733SM R Swami Reddy lm49453_port2_tx1_mixer,
755dbf7a733SM R Swami Reddy ARRAY_SIZE(lm49453_port2_tx1_mixer)),
756dbf7a733SM R Swami Reddy SND_SOC_DAPM_MIXER("Port2_2 Mixer", SND_SOC_NOPM, 0, 0,
757dbf7a733SM R Swami Reddy lm49453_port2_tx2_mixer,
758dbf7a733SM R Swami Reddy ARRAY_SIZE(lm49453_port2_tx2_mixer)),
759dbf7a733SM R Swami Reddy };
760dbf7a733SM R Swami Reddy
761dbf7a733SM R Swami Reddy static const struct snd_soc_dapm_route lm49453_audio_map[] = {
762dbf7a733SM R Swami Reddy /* Port SDI mapping */
763dbf7a733SM R Swami Reddy { "PORT1_1_RX", "Port1 Playback Switch", "PORT1_SDI" },
764dbf7a733SM R Swami Reddy { "PORT1_2_RX", "Port1 Playback Switch", "PORT1_SDI" },
765dbf7a733SM R Swami Reddy { "PORT1_3_RX", "Port1 Playback Switch", "PORT1_SDI" },
766dbf7a733SM R Swami Reddy { "PORT1_4_RX", "Port1 Playback Switch", "PORT1_SDI" },
767dbf7a733SM R Swami Reddy { "PORT1_5_RX", "Port1 Playback Switch", "PORT1_SDI" },
768dbf7a733SM R Swami Reddy { "PORT1_6_RX", "Port1 Playback Switch", "PORT1_SDI" },
769dbf7a733SM R Swami Reddy { "PORT1_7_RX", "Port1 Playback Switch", "PORT1_SDI" },
770dbf7a733SM R Swami Reddy { "PORT1_8_RX", "Port1 Playback Switch", "PORT1_SDI" },
771dbf7a733SM R Swami Reddy
772dbf7a733SM R Swami Reddy { "PORT2_1_RX", "Port2 Playback Switch", "PORT2_SDI" },
773dbf7a733SM R Swami Reddy { "PORT2_2_RX", "Port2 Playback Switch", "PORT2_SDI" },
774dbf7a733SM R Swami Reddy
775dbf7a733SM R Swami Reddy /* HP mapping */
776dbf7a733SM R Swami Reddy { "HPL Mixer", "Port1_1 Switch", "PORT1_1_RX" },
777dbf7a733SM R Swami Reddy { "HPL Mixer", "Port1_2 Switch", "PORT1_2_RX" },
778dbf7a733SM R Swami Reddy { "HPL Mixer", "Port1_3 Switch", "PORT1_3_RX" },
779dbf7a733SM R Swami Reddy { "HPL Mixer", "Port1_4 Switch", "PORT1_4_RX" },
780dbf7a733SM R Swami Reddy { "HPL Mixer", "Port1_5 Switch", "PORT1_5_RX" },
781dbf7a733SM R Swami Reddy { "HPL Mixer", "Port1_6 Switch", "PORT1_6_RX" },
782dbf7a733SM R Swami Reddy { "HPL Mixer", "Port1_7 Switch", "PORT1_7_RX" },
783dbf7a733SM R Swami Reddy { "HPL Mixer", "Port1_8 Switch", "PORT1_8_RX" },
784dbf7a733SM R Swami Reddy
785dbf7a733SM R Swami Reddy { "HPL Mixer", "Port2_1 Switch", "PORT2_1_RX" },
786dbf7a733SM R Swami Reddy { "HPL Mixer", "Port2_2 Switch", "PORT2_2_RX" },
787dbf7a733SM R Swami Reddy
788dbf7a733SM R Swami Reddy { "HPL Mixer", "ADCL Switch", "ADC Left" },
789dbf7a733SM R Swami Reddy { "HPL Mixer", "ADCR Switch", "ADC Right" },
790dbf7a733SM R Swami Reddy { "HPL Mixer", "DMIC1L Switch", "DMIC1 Left" },
791dbf7a733SM R Swami Reddy { "HPL Mixer", "DMIC1R Switch", "DMIC1 Right" },
792dbf7a733SM R Swami Reddy { "HPL Mixer", "DMIC2L Switch", "DMIC2 Left" },
793dbf7a733SM R Swami Reddy { "HPL Mixer", "DMIC2R Switch", "DMIC2 Right" },
794dbf7a733SM R Swami Reddy { "HPL Mixer", "Sidetone Switch", "Sidetone" },
795dbf7a733SM R Swami Reddy
796dbf7a733SM R Swami Reddy { "HPL DAC", NULL, "HPL Mixer" },
797dbf7a733SM R Swami Reddy
798dbf7a733SM R Swami Reddy { "HPR Mixer", "Port1_1 Switch", "PORT1_1_RX" },
799dbf7a733SM R Swami Reddy { "HPR Mixer", "Port1_2 Switch", "PORT1_2_RX" },
800dbf7a733SM R Swami Reddy { "HPR Mixer", "Port1_3 Switch", "PORT1_3_RX" },
801dbf7a733SM R Swami Reddy { "HPR Mixer", "Port1_4 Switch", "PORT1_4_RX" },
802dbf7a733SM R Swami Reddy { "HPR Mixer", "Port1_5 Switch", "PORT1_5_RX" },
803dbf7a733SM R Swami Reddy { "HPR Mixer", "Port1_6 Switch", "PORT1_6_RX" },
804dbf7a733SM R Swami Reddy { "HPR Mixer", "Port1_7 Switch", "PORT1_7_RX" },
805dbf7a733SM R Swami Reddy { "HPR Mixer", "Port1_8 Switch", "PORT1_8_RX" },
806dbf7a733SM R Swami Reddy
807dbf7a733SM R Swami Reddy /* Port 2 */
808dbf7a733SM R Swami Reddy { "HPR Mixer", "Port2_1 Switch", "PORT2_1_RX" },
809dbf7a733SM R Swami Reddy { "HPR Mixer", "Port2_2 Switch", "PORT2_2_RX" },
810dbf7a733SM R Swami Reddy
811dbf7a733SM R Swami Reddy { "HPR Mixer", "ADCL Switch", "ADC Left" },
812dbf7a733SM R Swami Reddy { "HPR Mixer", "ADCR Switch", "ADC Right" },
813dbf7a733SM R Swami Reddy { "HPR Mixer", "DMIC1L Switch", "DMIC1 Left" },
814dbf7a733SM R Swami Reddy { "HPR Mixer", "DMIC1R Switch", "DMIC1 Right" },
815dbf7a733SM R Swami Reddy { "HPR Mixer", "DMIC2L Switch", "DMIC2 Left" },
816dbf7a733SM R Swami Reddy { "HPR Mixer", "DMIC2L Switch", "DMIC2 Right" },
817dbf7a733SM R Swami Reddy { "HPR Mixer", "Sidetone Switch", "Sidetone" },
818dbf7a733SM R Swami Reddy
819dbf7a733SM R Swami Reddy { "HPR DAC", NULL, "HPR Mixer" },
820dbf7a733SM R Swami Reddy
821dbf7a733SM R Swami Reddy { "HPOUTL", "Headset Switch", "HPL DAC"},
822dbf7a733SM R Swami Reddy { "HPOUTR", "Headset Switch", "HPR DAC"},
823dbf7a733SM R Swami Reddy
824dbf7a733SM R Swami Reddy /* EP map */
825dbf7a733SM R Swami Reddy { "EPOUT", "Earpiece Switch", "HPL DAC" },
826dbf7a733SM R Swami Reddy
827dbf7a733SM R Swami Reddy /* Speaker map */
828dbf7a733SM R Swami Reddy { "LSL Mixer", "Port1_1 Switch", "PORT1_1_RX" },
829dbf7a733SM R Swami Reddy { "LSL Mixer", "Port1_2 Switch", "PORT1_2_RX" },
830dbf7a733SM R Swami Reddy { "LSL Mixer", "Port1_3 Switch", "PORT1_3_RX" },
831dbf7a733SM R Swami Reddy { "LSL Mixer", "Port1_4 Switch", "PORT1_4_RX" },
832dbf7a733SM R Swami Reddy { "LSL Mixer", "Port1_5 Switch", "PORT1_5_RX" },
833dbf7a733SM R Swami Reddy { "LSL Mixer", "Port1_6 Switch", "PORT1_6_RX" },
834dbf7a733SM R Swami Reddy { "LSL Mixer", "Port1_7 Switch", "PORT1_7_RX" },
835dbf7a733SM R Swami Reddy { "LSL Mixer", "Port1_8 Switch", "PORT1_8_RX" },
836dbf7a733SM R Swami Reddy
837dbf7a733SM R Swami Reddy /* Port 2 */
838dbf7a733SM R Swami Reddy { "LSL Mixer", "Port2_1 Switch", "PORT2_1_RX" },
839dbf7a733SM R Swami Reddy { "LSL Mixer", "Port2_2 Switch", "PORT2_2_RX" },
840dbf7a733SM R Swami Reddy
841dbf7a733SM R Swami Reddy { "LSL Mixer", "ADCL Switch", "ADC Left" },
842dbf7a733SM R Swami Reddy { "LSL Mixer", "ADCR Switch", "ADC Right" },
843dbf7a733SM R Swami Reddy { "LSL Mixer", "DMIC1L Switch", "DMIC1 Left" },
844dbf7a733SM R Swami Reddy { "LSL Mixer", "DMIC1R Switch", "DMIC1 Right" },
845dbf7a733SM R Swami Reddy { "LSL Mixer", "DMIC2L Switch", "DMIC2 Left" },
846dbf7a733SM R Swami Reddy { "LSL Mixer", "DMIC2R Switch", "DMIC2 Right" },
847dbf7a733SM R Swami Reddy { "LSL Mixer", "Sidetone Switch", "Sidetone" },
848dbf7a733SM R Swami Reddy
849dbf7a733SM R Swami Reddy { "LSL DAC", NULL, "LSL Mixer" },
850dbf7a733SM R Swami Reddy
851dbf7a733SM R Swami Reddy { "LSR Mixer", "Port1_1 Switch", "PORT1_1_RX" },
852dbf7a733SM R Swami Reddy { "LSR Mixer", "Port1_2 Switch", "PORT1_2_RX" },
853dbf7a733SM R Swami Reddy { "LSR Mixer", "Port1_3 Switch", "PORT1_3_RX" },
854dbf7a733SM R Swami Reddy { "LSR Mixer", "Port1_4 Switch", "PORT1_4_RX" },
855dbf7a733SM R Swami Reddy { "LSR Mixer", "Port1_5 Switch", "PORT1_5_RX" },
856dbf7a733SM R Swami Reddy { "LSR Mixer", "Port1_6 Switch", "PORT1_6_RX" },
857dbf7a733SM R Swami Reddy { "LSR Mixer", "Port1_7 Switch", "PORT1_7_RX" },
858dbf7a733SM R Swami Reddy { "LSR Mixer", "Port1_8 Switch", "PORT1_8_RX" },
859dbf7a733SM R Swami Reddy
860dbf7a733SM R Swami Reddy /* Port 2 */
861dbf7a733SM R Swami Reddy { "LSR Mixer", "Port2_1 Switch", "PORT2_1_RX" },
862dbf7a733SM R Swami Reddy { "LSR Mixer", "Port2_2 Switch", "PORT2_2_RX" },
863dbf7a733SM R Swami Reddy
864dbf7a733SM R Swami Reddy { "LSR Mixer", "ADCL Switch", "ADC Left" },
865dbf7a733SM R Swami Reddy { "LSR Mixer", "ADCR Switch", "ADC Right" },
866dbf7a733SM R Swami Reddy { "LSR Mixer", "DMIC1L Switch", "DMIC1 Left" },
867dbf7a733SM R Swami Reddy { "LSR Mixer", "DMIC1R Switch", "DMIC1 Right" },
868dbf7a733SM R Swami Reddy { "LSR Mixer", "DMIC2L Switch", "DMIC2 Left" },
869dbf7a733SM R Swami Reddy { "LSR Mixer", "DMIC2R Switch", "DMIC2 Right" },
870dbf7a733SM R Swami Reddy { "LSR Mixer", "Sidetone Switch", "Sidetone" },
871dbf7a733SM R Swami Reddy
872dbf7a733SM R Swami Reddy { "LSR DAC", NULL, "LSR Mixer" },
873dbf7a733SM R Swami Reddy
874dbf7a733SM R Swami Reddy { "LSOUTL", "Speaker Left Switch", "LSL DAC"},
875dbf7a733SM R Swami Reddy { "LSOUTR", "Speaker Left Switch", "LSR DAC"},
876dbf7a733SM R Swami Reddy
877dbf7a733SM R Swami Reddy /* Haptic map */
878dbf7a733SM R Swami Reddy { "HAL Mixer", "Port1_1 Switch", "PORT1_1_RX" },
879dbf7a733SM R Swami Reddy { "HAL Mixer", "Port1_2 Switch", "PORT1_2_RX" },
880dbf7a733SM R Swami Reddy { "HAL Mixer", "Port1_3 Switch", "PORT1_3_RX" },
881dbf7a733SM R Swami Reddy { "HAL Mixer", "Port1_4 Switch", "PORT1_4_RX" },
882dbf7a733SM R Swami Reddy { "HAL Mixer", "Port1_5 Switch", "PORT1_5_RX" },
883dbf7a733SM R Swami Reddy { "HAL Mixer", "Port1_6 Switch", "PORT1_6_RX" },
884dbf7a733SM R Swami Reddy { "HAL Mixer", "Port1_7 Switch", "PORT1_7_RX" },
885dbf7a733SM R Swami Reddy { "HAL Mixer", "Port1_8 Switch", "PORT1_8_RX" },
886dbf7a733SM R Swami Reddy
887dbf7a733SM R Swami Reddy /* Port 2 */
888dbf7a733SM R Swami Reddy { "HAL Mixer", "Port2_1 Switch", "PORT2_1_RX" },
889dbf7a733SM R Swami Reddy { "HAL Mixer", "Port2_2 Switch", "PORT2_2_RX" },
890dbf7a733SM R Swami Reddy
891dbf7a733SM R Swami Reddy { "HAL Mixer", "ADCL Switch", "ADC Left" },
892dbf7a733SM R Swami Reddy { "HAL Mixer", "ADCR Switch", "ADC Right" },
893dbf7a733SM R Swami Reddy { "HAL Mixer", "DMIC1L Switch", "DMIC1 Left" },
894dbf7a733SM R Swami Reddy { "HAL Mixer", "DMIC1R Switch", "DMIC1 Right" },
895dbf7a733SM R Swami Reddy { "HAL Mixer", "DMIC2L Switch", "DMIC2 Left" },
896dbf7a733SM R Swami Reddy { "HAL Mixer", "DMIC2R Switch", "DMIC2 Right" },
897dbf7a733SM R Swami Reddy { "HAL Mixer", "Sidetone Switch", "Sidetone" },
898dbf7a733SM R Swami Reddy
899dbf7a733SM R Swami Reddy { "HAL DAC", NULL, "HAL Mixer" },
900dbf7a733SM R Swami Reddy
901dbf7a733SM R Swami Reddy { "HAR Mixer", "Port1_1 Switch", "PORT1_1_RX" },
902dbf7a733SM R Swami Reddy { "HAR Mixer", "Port1_2 Switch", "PORT1_2_RX" },
903dbf7a733SM R Swami Reddy { "HAR Mixer", "Port1_3 Switch", "PORT1_3_RX" },
904dbf7a733SM R Swami Reddy { "HAR Mixer", "Port1_4 Switch", "PORT1_4_RX" },
905dbf7a733SM R Swami Reddy { "HAR Mixer", "Port1_5 Switch", "PORT1_5_RX" },
906dbf7a733SM R Swami Reddy { "HAR Mixer", "Port1_6 Switch", "PORT1_6_RX" },
907dbf7a733SM R Swami Reddy { "HAR Mixer", "Port1_7 Switch", "PORT1_7_RX" },
908dbf7a733SM R Swami Reddy { "HAR Mixer", "Port1_8 Switch", "PORT1_8_RX" },
909dbf7a733SM R Swami Reddy
910dbf7a733SM R Swami Reddy /* Port 2 */
911dbf7a733SM R Swami Reddy { "HAR Mixer", "Port2_1 Switch", "PORT2_1_RX" },
912dbf7a733SM R Swami Reddy { "HAR Mixer", "Port2_2 Switch", "PORT2_2_RX" },
913dbf7a733SM R Swami Reddy
914dbf7a733SM R Swami Reddy { "HAR Mixer", "ADCL Switch", "ADC Left" },
915dbf7a733SM R Swami Reddy { "HAR Mixer", "ADCR Switch", "ADC Right" },
916dbf7a733SM R Swami Reddy { "HAR Mixer", "DMIC1L Switch", "DMIC1 Left" },
917dbf7a733SM R Swami Reddy { "HAR Mixer", "DMIC1R Switch", "DMIC1 Right" },
918dbf7a733SM R Swami Reddy { "HAR Mixer", "DMIC2L Switch", "DMIC2 Left" },
919dbf7a733SM R Swami Reddy { "HAR Mixer", "DMIC2R Switch", "DMIC2 Right" },
920dbf7a733SM R Swami Reddy { "HAR Mixer", "Sideton Switch", "Sidetone" },
921dbf7a733SM R Swami Reddy
922dbf7a733SM R Swami Reddy { "HAR DAC", NULL, "HAR Mixer" },
923dbf7a733SM R Swami Reddy
924dbf7a733SM R Swami Reddy { "HAOUTL", "Haptic Left Switch", "HAL DAC" },
925dbf7a733SM R Swami Reddy { "HAOUTR", "Haptic Right Switch", "HAR DAC" },
926dbf7a733SM R Swami Reddy
927dbf7a733SM R Swami Reddy /* Lineout map */
928dbf7a733SM R Swami Reddy { "LOL Mixer", "Port1_1 Switch", "PORT1_1_RX" },
929dbf7a733SM R Swami Reddy { "LOL Mixer", "Port1_2 Switch", "PORT1_2_RX" },
930dbf7a733SM R Swami Reddy { "LOL Mixer", "Port1_3 Switch", "PORT1_3_RX" },
931dbf7a733SM R Swami Reddy { "LOL Mixer", "Port1_4 Switch", "PORT1_4_RX" },
932dbf7a733SM R Swami Reddy { "LOL Mixer", "Port1_5 Switch", "PORT1_5_RX" },
933dbf7a733SM R Swami Reddy { "LOL Mixer", "Port1_6 Switch", "PORT1_6_RX" },
934dbf7a733SM R Swami Reddy { "LOL Mixer", "Port1_7 Switch", "PORT1_7_RX" },
935dbf7a733SM R Swami Reddy { "LOL Mixer", "Port1_8 Switch", "PORT1_8_RX" },
936dbf7a733SM R Swami Reddy
937dbf7a733SM R Swami Reddy /* Port 2 */
938dbf7a733SM R Swami Reddy { "LOL Mixer", "Port2_1 Switch", "PORT2_1_RX" },
939dbf7a733SM R Swami Reddy { "LOL Mixer", "Port2_2 Switch", "PORT2_2_RX" },
940dbf7a733SM R Swami Reddy
941dbf7a733SM R Swami Reddy { "LOL Mixer", "ADCL Switch", "ADC Left" },
942dbf7a733SM R Swami Reddy { "LOL Mixer", "ADCR Switch", "ADC Right" },
943dbf7a733SM R Swami Reddy { "LOL Mixer", "DMIC1L Switch", "DMIC1 Left" },
944dbf7a733SM R Swami Reddy { "LOL Mixer", "DMIC1R Switch", "DMIC1 Right" },
945dbf7a733SM R Swami Reddy { "LOL Mixer", "DMIC2L Switch", "DMIC2 Left" },
946dbf7a733SM R Swami Reddy { "LOL Mixer", "DMIC2R Switch", "DMIC2 Right" },
947dbf7a733SM R Swami Reddy { "LOL Mixer", "Sidetone Switch", "Sidetone" },
948dbf7a733SM R Swami Reddy
949dbf7a733SM R Swami Reddy { "LOL DAC", NULL, "LOL Mixer" },
950dbf7a733SM R Swami Reddy
951dbf7a733SM R Swami Reddy { "LOR Mixer", "Port1_1 Switch", "PORT1_1_RX" },
952dbf7a733SM R Swami Reddy { "LOR Mixer", "Port1_2 Switch", "PORT1_2_RX" },
953dbf7a733SM R Swami Reddy { "LOR Mixer", "Port1_3 Switch", "PORT1_3_RX" },
954dbf7a733SM R Swami Reddy { "LOR Mixer", "Port1_4 Switch", "PORT1_4_RX" },
955dbf7a733SM R Swami Reddy { "LOR Mixer", "Port1_5 Switch", "PORT1_5_RX" },
956dbf7a733SM R Swami Reddy { "LOR Mixer", "Port1_6 Switch", "PORT1_6_RX" },
957dbf7a733SM R Swami Reddy { "LOR Mixer", "Port1_7 Switch", "PORT1_7_RX" },
958dbf7a733SM R Swami Reddy { "LOR Mixer", "Port1_8 Switch", "PORT1_8_RX" },
959dbf7a733SM R Swami Reddy
960dbf7a733SM R Swami Reddy /* Port 2 */
961dbf7a733SM R Swami Reddy { "LOR Mixer", "Port2_1 Switch", "PORT2_1_RX" },
962dbf7a733SM R Swami Reddy { "LOR Mixer", "Port2_2 Switch", "PORT2_2_RX" },
963dbf7a733SM R Swami Reddy
964dbf7a733SM R Swami Reddy { "LOR Mixer", "ADCL Switch", "ADC Left" },
965dbf7a733SM R Swami Reddy { "LOR Mixer", "ADCR Switch", "ADC Right" },
966dbf7a733SM R Swami Reddy { "LOR Mixer", "DMIC1L Switch", "DMIC1 Left" },
967dbf7a733SM R Swami Reddy { "LOR Mixer", "DMIC1R Switch", "DMIC1 Right" },
968dbf7a733SM R Swami Reddy { "LOR Mixer", "DMIC2L Switch", "DMIC2 Left" },
969dbf7a733SM R Swami Reddy { "LOR Mixer", "DMIC2R Switch", "DMIC2 Right" },
970dbf7a733SM R Swami Reddy { "LOR Mixer", "Sidetone Switch", "Sidetone" },
971dbf7a733SM R Swami Reddy
972dbf7a733SM R Swami Reddy { "LOR DAC", NULL, "LOR Mixer" },
973dbf7a733SM R Swami Reddy
974dbf7a733SM R Swami Reddy { "LOOUTL", NULL, "LOL DAC" },
975dbf7a733SM R Swami Reddy { "LOOUTR", NULL, "LOR DAC" },
976dbf7a733SM R Swami Reddy
977dbf7a733SM R Swami Reddy /* TX map */
978dbf7a733SM R Swami Reddy /* Port1 mappings */
979dbf7a733SM R Swami Reddy { "Port1_1 Mixer", "ADCL Switch", "ADC Left" },
980dbf7a733SM R Swami Reddy { "Port1_1 Mixer", "ADCR Switch", "ADC Right" },
981dbf7a733SM R Swami Reddy { "Port1_1 Mixer", "DMIC1L Switch", "DMIC1 Left" },
982dbf7a733SM R Swami Reddy { "Port1_1 Mixer", "DMIC1R Switch", "DMIC1 Right" },
983dbf7a733SM R Swami Reddy { "Port1_1 Mixer", "DMIC2L Switch", "DMIC2 Left" },
984dbf7a733SM R Swami Reddy { "Port1_1 Mixer", "DMIC2R Switch", "DMIC2 Right" },
985dbf7a733SM R Swami Reddy
986dbf7a733SM R Swami Reddy { "Port1_2 Mixer", "ADCL Switch", "ADC Left" },
987dbf7a733SM R Swami Reddy { "Port1_2 Mixer", "ADCR Switch", "ADC Right" },
988dbf7a733SM R Swami Reddy { "Port1_2 Mixer", "DMIC1L Switch", "DMIC1 Left" },
989dbf7a733SM R Swami Reddy { "Port1_2 Mixer", "DMIC1R Switch", "DMIC1 Right" },
990dbf7a733SM R Swami Reddy { "Port1_2 Mixer", "DMIC2L Switch", "DMIC2 Left" },
991dbf7a733SM R Swami Reddy { "Port1_2 Mixer", "DMIC2R Switch", "DMIC2 Right" },
992dbf7a733SM R Swami Reddy
993dbf7a733SM R Swami Reddy { "Port1_3 Mixer", "ADCL Switch", "ADC Left" },
994dbf7a733SM R Swami Reddy { "Port1_3 Mixer", "ADCR Switch", "ADC Right" },
995dbf7a733SM R Swami Reddy { "Port1_3 Mixer", "DMIC1L Switch", "DMIC1 Left" },
996dbf7a733SM R Swami Reddy { "Port1_3 Mixer", "DMIC1R Switch", "DMIC1 Right" },
997dbf7a733SM R Swami Reddy { "Port1_3 Mixer", "DMIC2L Switch", "DMIC2 Left" },
998dbf7a733SM R Swami Reddy { "Port1_3 Mixer", "DMIC2R Switch", "DMIC2 Right" },
999dbf7a733SM R Swami Reddy
1000dbf7a733SM R Swami Reddy { "Port1_4 Mixer", "ADCL Switch", "ADC Left" },
1001dbf7a733SM R Swami Reddy { "Port1_4 Mixer", "ADCR Switch", "ADC Right" },
1002dbf7a733SM R Swami Reddy { "Port1_4 Mixer", "DMIC1L Switch", "DMIC1 Left" },
1003dbf7a733SM R Swami Reddy { "Port1_4 Mixer", "DMIC1R Switch", "DMIC1 Right" },
1004dbf7a733SM R Swami Reddy { "Port1_4 Mixer", "DMIC2L Switch", "DMIC2 Left" },
1005dbf7a733SM R Swami Reddy { "Port1_4 Mixer", "DMIC2R Switch", "DMIC2 Right" },
1006dbf7a733SM R Swami Reddy
1007dbf7a733SM R Swami Reddy { "Port1_5 Mixer", "ADCL Switch", "ADC Left" },
1008dbf7a733SM R Swami Reddy { "Port1_5 Mixer", "ADCR Switch", "ADC Right" },
1009dbf7a733SM R Swami Reddy { "Port1_5 Mixer", "DMIC1L Switch", "DMIC1 Left" },
1010dbf7a733SM R Swami Reddy { "Port1_5 Mixer", "DMIC1R Switch", "DMIC1 Right" },
1011dbf7a733SM R Swami Reddy { "Port1_5 Mixer", "DMIC2L Switch", "DMIC2 Left" },
1012dbf7a733SM R Swami Reddy { "Port1_5 Mixer", "DMIC2R Switch", "DMIC2 Right" },
1013dbf7a733SM R Swami Reddy
1014dbf7a733SM R Swami Reddy { "Port1_6 Mixer", "ADCL Switch", "ADC Left" },
1015dbf7a733SM R Swami Reddy { "Port1_6 Mixer", "ADCR Switch", "ADC Right" },
1016dbf7a733SM R Swami Reddy { "Port1_6 Mixer", "DMIC1L Switch", "DMIC1 Left" },
1017dbf7a733SM R Swami Reddy { "Port1_6 Mixer", "DMIC1R Switch", "DMIC1 Right" },
1018dbf7a733SM R Swami Reddy { "Port1_6 Mixer", "DMIC2L Switch", "DMIC2 Left" },
1019dbf7a733SM R Swami Reddy { "Port1_6 Mixer", "DMIC2R Switch", "DMIC2 Right" },
1020dbf7a733SM R Swami Reddy
1021dbf7a733SM R Swami Reddy { "Port1_7 Mixer", "ADCL Switch", "ADC Left" },
1022dbf7a733SM R Swami Reddy { "Port1_7 Mixer", "ADCR Switch", "ADC Right" },
1023dbf7a733SM R Swami Reddy { "Port1_7 Mixer", "DMIC1L Switch", "DMIC1 Left" },
1024dbf7a733SM R Swami Reddy { "Port1_7 Mixer", "DMIC1R Switch", "DMIC1 Right" },
1025dbf7a733SM R Swami Reddy { "Port1_7 Mixer", "DMIC2L Switch", "DMIC2 Left" },
1026dbf7a733SM R Swami Reddy { "Port1_7 Mixer", "DMIC2R Switch", "DMIC2 Right" },
1027dbf7a733SM R Swami Reddy
1028dbf7a733SM R Swami Reddy { "Port1_8 Mixer", "ADCL Switch", "ADC Left" },
1029dbf7a733SM R Swami Reddy { "Port1_8 Mixer", "ADCR Switch", "ADC Right" },
1030dbf7a733SM R Swami Reddy { "Port1_8 Mixer", "DMIC1L Switch", "DMIC1 Left" },
1031dbf7a733SM R Swami Reddy { "Port1_8 Mixer", "DMIC1R Switch", "DMIC1 Right" },
1032dbf7a733SM R Swami Reddy { "Port1_8 Mixer", "DMIC2L Switch", "DMIC2 Left" },
1033dbf7a733SM R Swami Reddy { "Port1_8 Mixer", "DMIC2R Switch", "DMIC2 Right" },
1034dbf7a733SM R Swami Reddy
1035dbf7a733SM R Swami Reddy { "Port2_1 Mixer", "ADCL Switch", "ADC Left" },
1036dbf7a733SM R Swami Reddy { "Port2_1 Mixer", "ADCR Switch", "ADC Right" },
1037dbf7a733SM R Swami Reddy { "Port2_1 Mixer", "DMIC1L Switch", "DMIC1 Left" },
1038dbf7a733SM R Swami Reddy { "Port2_1 Mixer", "DMIC1R Switch", "DMIC1 Right" },
1039dbf7a733SM R Swami Reddy { "Port2_1 Mixer", "DMIC2L Switch", "DMIC2 Left" },
1040dbf7a733SM R Swami Reddy { "Port2_1 Mixer", "DMIC2R Switch", "DMIC2 Right" },
1041dbf7a733SM R Swami Reddy
1042dbf7a733SM R Swami Reddy { "Port2_2 Mixer", "ADCL Switch", "ADC Left" },
1043dbf7a733SM R Swami Reddy { "Port2_2 Mixer", "ADCR Switch", "ADC Right" },
1044dbf7a733SM R Swami Reddy { "Port2_2 Mixer", "DMIC1L Switch", "DMIC1 Left" },
1045dbf7a733SM R Swami Reddy { "Port2_2 Mixer", "DMIC1R Switch", "DMIC1 Right" },
1046dbf7a733SM R Swami Reddy { "Port2_2 Mixer", "DMIC2L Switch", "DMIC2 Left" },
1047dbf7a733SM R Swami Reddy { "Port2_2 Mixer", "DMIC2R Switch", "DMIC2 Right" },
1048dbf7a733SM R Swami Reddy
1049dbf7a733SM R Swami Reddy { "P1_1_TX", NULL, "Port1_1 Mixer" },
1050dbf7a733SM R Swami Reddy { "P1_2_TX", NULL, "Port1_2 Mixer" },
1051dbf7a733SM R Swami Reddy { "P1_3_TX", NULL, "Port1_3 Mixer" },
1052dbf7a733SM R Swami Reddy { "P1_4_TX", NULL, "Port1_4 Mixer" },
1053dbf7a733SM R Swami Reddy { "P1_5_TX", NULL, "Port1_5 Mixer" },
1054dbf7a733SM R Swami Reddy { "P1_6_TX", NULL, "Port1_6 Mixer" },
1055dbf7a733SM R Swami Reddy { "P1_7_TX", NULL, "Port1_7 Mixer" },
1056dbf7a733SM R Swami Reddy { "P1_8_TX", NULL, "Port1_8 Mixer" },
1057dbf7a733SM R Swami Reddy
1058dbf7a733SM R Swami Reddy { "P2_1_TX", NULL, "Port2_1 Mixer" },
1059dbf7a733SM R Swami Reddy { "P2_2_TX", NULL, "Port2_2 Mixer" },
1060dbf7a733SM R Swami Reddy
1061dbf7a733SM R Swami Reddy { "PORT1_SDO", "Port1 Capture Switch", "P1_1_TX"},
1062dbf7a733SM R Swami Reddy { "PORT1_SDO", "Port1 Capture Switch", "P1_2_TX"},
1063dbf7a733SM R Swami Reddy { "PORT1_SDO", "Port1 Capture Switch", "P1_3_TX"},
1064dbf7a733SM R Swami Reddy { "PORT1_SDO", "Port1 Capture Switch", "P1_4_TX"},
1065dbf7a733SM R Swami Reddy { "PORT1_SDO", "Port1 Capture Switch", "P1_5_TX"},
1066dbf7a733SM R Swami Reddy { "PORT1_SDO", "Port1 Capture Switch", "P1_6_TX"},
1067dbf7a733SM R Swami Reddy { "PORT1_SDO", "Port1 Capture Switch", "P1_7_TX"},
1068dbf7a733SM R Swami Reddy { "PORT1_SDO", "Port1 Capture Switch", "P1_8_TX"},
1069dbf7a733SM R Swami Reddy
1070dbf7a733SM R Swami Reddy { "PORT2_SDO", "Port2 Capture Switch", "P2_1_TX"},
1071dbf7a733SM R Swami Reddy { "PORT2_SDO", "Port2 Capture Switch", "P2_2_TX"},
1072dbf7a733SM R Swami Reddy
1073dbf7a733SM R Swami Reddy { "Mic1 Input", NULL, "AMIC1" },
1074dbf7a733SM R Swami Reddy { "Mic2 Input", NULL, "AMIC2" },
1075dbf7a733SM R Swami Reddy
1076dbf7a733SM R Swami Reddy { "AUXL Input", NULL, "AUXL" },
1077dbf7a733SM R Swami Reddy { "AUXR Input", NULL, "AUXR" },
1078dbf7a733SM R Swami Reddy
1079dbf7a733SM R Swami Reddy /* AUX connections */
1080dbf7a733SM R Swami Reddy { "ADCL Mux", "Aux_L", "AUXL Input" },
1081dbf7a733SM R Swami Reddy { "ADCL Mux", "MIC1", "Mic1 Input" },
1082dbf7a733SM R Swami Reddy
1083dbf7a733SM R Swami Reddy { "ADCR Mux", "Aux_R", "AUXR Input" },
1084dbf7a733SM R Swami Reddy { "ADCR Mux", "MIC2", "Mic2 Input" },
1085dbf7a733SM R Swami Reddy
1086dbf7a733SM R Swami Reddy /* ADC connection */
1087dbf7a733SM R Swami Reddy { "ADC Left", NULL, "ADCL Mux"},
1088dbf7a733SM R Swami Reddy { "ADC Right", NULL, "ADCR Mux"},
1089dbf7a733SM R Swami Reddy
1090dbf7a733SM R Swami Reddy { "DMIC1 Left", NULL, "DMIC1DAT"},
1091dbf7a733SM R Swami Reddy { "DMIC1 Right", NULL, "DMIC1DAT"},
1092dbf7a733SM R Swami Reddy { "DMIC2 Left", NULL, "DMIC2DAT"},
1093dbf7a733SM R Swami Reddy { "DMIC2 Right", NULL, "DMIC2DAT"},
1094dbf7a733SM R Swami Reddy
1095dbf7a733SM R Swami Reddy /* Sidetone map */
1096dbf7a733SM R Swami Reddy { "Sidetone Mixer", NULL, "ADC Left" },
1097dbf7a733SM R Swami Reddy { "Sidetone Mixer", NULL, "ADC Right" },
1098dbf7a733SM R Swami Reddy { "Sidetone Mixer", NULL, "DMIC1 Left" },
1099dbf7a733SM R Swami Reddy { "Sidetone Mixer", NULL, "DMIC1 Right" },
1100dbf7a733SM R Swami Reddy { "Sidetone Mixer", NULL, "DMIC2 Left" },
1101dbf7a733SM R Swami Reddy { "Sidetone Mixer", NULL, "DMIC2 Right" },
1102dbf7a733SM R Swami Reddy
1103dbf7a733SM R Swami Reddy { "Sidetone", "Sidetone Switch", "Sidetone Mixer" },
1104dbf7a733SM R Swami Reddy };
1105dbf7a733SM R Swami Reddy
lm49453_hw_params(struct snd_pcm_substream * substream,struct snd_pcm_hw_params * params,struct snd_soc_dai * dai)1106dbf7a733SM R Swami Reddy static int lm49453_hw_params(struct snd_pcm_substream *substream,
1107dbf7a733SM R Swami Reddy struct snd_pcm_hw_params *params,
1108dbf7a733SM R Swami Reddy struct snd_soc_dai *dai)
1109dbf7a733SM R Swami Reddy {
1110f5d5240eSKuninori Morimoto struct snd_soc_component *component = dai->component;
1111dbf7a733SM R Swami Reddy u16 clk_div = 0;
1112dbf7a733SM R Swami Reddy
1113dbf7a733SM R Swami Reddy /* Setting DAC clock dividers based on substream sample rate. */
11146f439794SAxel Lin switch (params_rate(params)) {
1115dbf7a733SM R Swami Reddy case 8000:
1116dbf7a733SM R Swami Reddy case 16000:
1117dbf7a733SM R Swami Reddy case 32000:
1118dbf7a733SM R Swami Reddy case 24000:
1119dbf7a733SM R Swami Reddy case 48000:
1120dbf7a733SM R Swami Reddy clk_div = 256;
1121dbf7a733SM R Swami Reddy break;
1122dbf7a733SM R Swami Reddy case 11025:
1123dbf7a733SM R Swami Reddy case 22050:
1124dbf7a733SM R Swami Reddy case 44100:
1125dbf7a733SM R Swami Reddy clk_div = 216;
1126dbf7a733SM R Swami Reddy break;
1127dbf7a733SM R Swami Reddy case 96000:
1128dbf7a733SM R Swami Reddy clk_div = 127;
1129dbf7a733SM R Swami Reddy break;
1130dbf7a733SM R Swami Reddy default:
1131dbf7a733SM R Swami Reddy return -EINVAL;
1132dbf7a733SM R Swami Reddy }
1133dbf7a733SM R Swami Reddy
1134f5d5240eSKuninori Morimoto snd_soc_component_write(component, LM49453_P0_ADC_CLK_DIV_REG, clk_div);
1135f5d5240eSKuninori Morimoto snd_soc_component_write(component, LM49453_P0_DAC_HP_CLK_DIV_REG, clk_div);
1136dbf7a733SM R Swami Reddy
1137dbf7a733SM R Swami Reddy return 0;
1138dbf7a733SM R Swami Reddy }
1139dbf7a733SM R Swami Reddy
lm49453_set_dai_fmt(struct snd_soc_dai * codec_dai,unsigned int fmt)1140dbf7a733SM R Swami Reddy static int lm49453_set_dai_fmt(struct snd_soc_dai *codec_dai, unsigned int fmt)
1141dbf7a733SM R Swami Reddy {
1142f5d5240eSKuninori Morimoto struct snd_soc_component *component = codec_dai->component;
1143dbf7a733SM R Swami Reddy
11447e811ae7SM R Swami Reddy u16 aif_val;
1145dbf7a733SM R Swami Reddy int mode = 0;
1146dbf7a733SM R Swami Reddy int clk_phase = 0;
1147dbf7a733SM R Swami Reddy int clk_shift = 0;
1148dbf7a733SM R Swami Reddy
11498e08a0c9SMark Brown switch (fmt & SND_SOC_DAIFMT_CLOCK_PROVIDER_MASK) {
11508e08a0c9SMark Brown case SND_SOC_DAIFMT_CBC_CFC:
11517e811ae7SM R Swami Reddy aif_val = 0;
1152dbf7a733SM R Swami Reddy break;
11538e08a0c9SMark Brown case SND_SOC_DAIFMT_CBC_CFP:
11547e811ae7SM R Swami Reddy aif_val = LM49453_AUDIO_PORT1_BASIC_SYNC_MS;
1155dbf7a733SM R Swami Reddy break;
11568e08a0c9SMark Brown case SND_SOC_DAIFMT_CBP_CFC:
11577e811ae7SM R Swami Reddy aif_val = LM49453_AUDIO_PORT1_BASIC_CLK_MS;
1158dbf7a733SM R Swami Reddy break;
11598e08a0c9SMark Brown case SND_SOC_DAIFMT_CBP_CFP:
1160dbf7a733SM R Swami Reddy aif_val = LM49453_AUDIO_PORT1_BASIC_CLK_MS |
1161dbf7a733SM R Swami Reddy LM49453_AUDIO_PORT1_BASIC_SYNC_MS;
1162dbf7a733SM R Swami Reddy break;
1163dbf7a733SM R Swami Reddy default:
1164dbf7a733SM R Swami Reddy return -EINVAL;
1165dbf7a733SM R Swami Reddy }
1166dbf7a733SM R Swami Reddy
1167dbf7a733SM R Swami Reddy
1168dbf7a733SM R Swami Reddy switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
1169dbf7a733SM R Swami Reddy case SND_SOC_DAIFMT_I2S:
1170dbf7a733SM R Swami Reddy break;
1171dbf7a733SM R Swami Reddy case SND_SOC_DAIFMT_DSP_A:
1172dbf7a733SM R Swami Reddy mode = 1;
1173dbf7a733SM R Swami Reddy clk_phase = (1 << 5);
1174dbf7a733SM R Swami Reddy clk_shift = 1;
1175dbf7a733SM R Swami Reddy break;
1176dbf7a733SM R Swami Reddy case SND_SOC_DAIFMT_DSP_B:
1177dbf7a733SM R Swami Reddy mode = 1;
1178dbf7a733SM R Swami Reddy clk_phase = (1 << 5);
1179dbf7a733SM R Swami Reddy clk_shift = 0;
1180dbf7a733SM R Swami Reddy break;
1181dbf7a733SM R Swami Reddy default:
1182dbf7a733SM R Swami Reddy return -EINVAL;
1183dbf7a733SM R Swami Reddy }
1184dbf7a733SM R Swami Reddy
1185f5d5240eSKuninori Morimoto snd_soc_component_update_bits(component, LM49453_P0_AUDIO_PORT1_BASIC_REG,
1186ec20f2f8SAxel Lin LM49453_AUDIO_PORT1_BASIC_FMT_MASK|BIT(0)|BIT(5),
1187dbf7a733SM R Swami Reddy (aif_val | mode | clk_phase));
1188dbf7a733SM R Swami Reddy
1189f5d5240eSKuninori Morimoto snd_soc_component_write(component, LM49453_P0_AUDIO_PORT1_RX_MSB_REG, clk_shift);
1190dbf7a733SM R Swami Reddy
1191dbf7a733SM R Swami Reddy return 0;
1192dbf7a733SM R Swami Reddy }
1193dbf7a733SM R Swami Reddy
lm49453_set_dai_sysclk(struct snd_soc_dai * dai,int clk_id,unsigned int freq,int dir)1194dbf7a733SM R Swami Reddy static int lm49453_set_dai_sysclk(struct snd_soc_dai *dai, int clk_id,
1195dbf7a733SM R Swami Reddy unsigned int freq, int dir)
1196dbf7a733SM R Swami Reddy {
1197f5d5240eSKuninori Morimoto struct snd_soc_component *component = dai->component;
1198dbf7a733SM R Swami Reddy u16 pll_clk = 0;
1199dbf7a733SM R Swami Reddy
1200dbf7a733SM R Swami Reddy switch (freq) {
1201dbf7a733SM R Swami Reddy case 12288000:
1202dbf7a733SM R Swami Reddy case 26000000:
1203dbf7a733SM R Swami Reddy case 19200000:
1204dbf7a733SM R Swami Reddy /* pll clk slection */
1205dbf7a733SM R Swami Reddy pll_clk = 0;
1206dbf7a733SM R Swami Reddy break;
1207dbf7a733SM R Swami Reddy case 48000:
1208dbf7a733SM R Swami Reddy case 32576:
1209dbf7a733SM R Swami Reddy return 0;
1210dbf7a733SM R Swami Reddy default:
1211dbf7a733SM R Swami Reddy return -EINVAL;
1212dbf7a733SM R Swami Reddy }
1213dbf7a733SM R Swami Reddy
1214f5d5240eSKuninori Morimoto snd_soc_component_update_bits(component, LM49453_P0_PMC_SETUP_REG, BIT(4), pll_clk);
1215dbf7a733SM R Swami Reddy
1216dbf7a733SM R Swami Reddy return 0;
1217dbf7a733SM R Swami Reddy }
1218dbf7a733SM R Swami Reddy
lm49453_hp_mute(struct snd_soc_dai * dai,int mute,int direction)121954b59270SKuninori Morimoto static int lm49453_hp_mute(struct snd_soc_dai *dai, int mute, int direction)
1220dbf7a733SM R Swami Reddy {
1221f5d5240eSKuninori Morimoto snd_soc_component_update_bits(dai->component, LM49453_P0_DAC_DSP_REG, BIT(1)|BIT(0),
1222dbf7a733SM R Swami Reddy (mute ? (BIT(1)|BIT(0)) : 0));
1223dbf7a733SM R Swami Reddy return 0;
1224dbf7a733SM R Swami Reddy }
1225dbf7a733SM R Swami Reddy
lm49453_lo_mute(struct snd_soc_dai * dai,int mute,int direction)122654b59270SKuninori Morimoto static int lm49453_lo_mute(struct snd_soc_dai *dai, int mute, int direction)
1227dbf7a733SM R Swami Reddy {
1228f5d5240eSKuninori Morimoto snd_soc_component_update_bits(dai->component, LM49453_P0_DAC_DSP_REG, BIT(3)|BIT(2),
1229dbf7a733SM R Swami Reddy (mute ? (BIT(3)|BIT(2)) : 0));
1230dbf7a733SM R Swami Reddy return 0;
1231dbf7a733SM R Swami Reddy }
1232dbf7a733SM R Swami Reddy
lm49453_ls_mute(struct snd_soc_dai * dai,int mute,int direction)123354b59270SKuninori Morimoto static int lm49453_ls_mute(struct snd_soc_dai *dai, int mute, int direction)
1234dbf7a733SM R Swami Reddy {
1235f5d5240eSKuninori Morimoto snd_soc_component_update_bits(dai->component, LM49453_P0_DAC_DSP_REG, BIT(5)|BIT(4),
1236dbf7a733SM R Swami Reddy (mute ? (BIT(5)|BIT(4)) : 0));
1237dbf7a733SM R Swami Reddy return 0;
1238dbf7a733SM R Swami Reddy }
1239dbf7a733SM R Swami Reddy
lm49453_ep_mute(struct snd_soc_dai * dai,int mute,int direction)124054b59270SKuninori Morimoto static int lm49453_ep_mute(struct snd_soc_dai *dai, int mute, int direction)
1241dbf7a733SM R Swami Reddy {
1242f5d5240eSKuninori Morimoto snd_soc_component_update_bits(dai->component, LM49453_P0_DAC_DSP_REG, BIT(4),
1243dbf7a733SM R Swami Reddy (mute ? BIT(4) : 0));
1244dbf7a733SM R Swami Reddy return 0;
1245dbf7a733SM R Swami Reddy }
1246dbf7a733SM R Swami Reddy
lm49453_ha_mute(struct snd_soc_dai * dai,int mute,int direction)124754b59270SKuninori Morimoto static int lm49453_ha_mute(struct snd_soc_dai *dai, int mute, int direction)
1248dbf7a733SM R Swami Reddy {
1249f5d5240eSKuninori Morimoto snd_soc_component_update_bits(dai->component, LM49453_P0_DAC_DSP_REG, BIT(7)|BIT(6),
1250dbf7a733SM R Swami Reddy (mute ? (BIT(7)|BIT(6)) : 0));
1251dbf7a733SM R Swami Reddy return 0;
1252dbf7a733SM R Swami Reddy }
1253dbf7a733SM R Swami Reddy
lm49453_set_bias_level(struct snd_soc_component * component,enum snd_soc_bias_level level)1254f5d5240eSKuninori Morimoto static int lm49453_set_bias_level(struct snd_soc_component *component,
1255dbf7a733SM R Swami Reddy enum snd_soc_bias_level level)
1256dbf7a733SM R Swami Reddy {
1257f5d5240eSKuninori Morimoto struct lm49453_priv *lm49453 = snd_soc_component_get_drvdata(component);
1258dbf7a733SM R Swami Reddy
1259dbf7a733SM R Swami Reddy switch (level) {
1260dbf7a733SM R Swami Reddy case SND_SOC_BIAS_ON:
1261dbf7a733SM R Swami Reddy case SND_SOC_BIAS_PREPARE:
1262dbf7a733SM R Swami Reddy break;
1263dbf7a733SM R Swami Reddy
1264dbf7a733SM R Swami Reddy case SND_SOC_BIAS_STANDBY:
1265f5d5240eSKuninori Morimoto if (snd_soc_component_get_bias_level(component) == SND_SOC_BIAS_OFF)
1266dbf7a733SM R Swami Reddy regcache_sync(lm49453->regmap);
1267dbf7a733SM R Swami Reddy
1268f5d5240eSKuninori Morimoto snd_soc_component_update_bits(component, LM49453_P0_PMC_SETUP_REG,
1269dbf7a733SM R Swami Reddy LM49453_PMC_SETUP_CHIP_EN, LM49453_CHIP_EN);
1270dbf7a733SM R Swami Reddy break;
1271dbf7a733SM R Swami Reddy
1272dbf7a733SM R Swami Reddy case SND_SOC_BIAS_OFF:
1273f5d5240eSKuninori Morimoto snd_soc_component_update_bits(component, LM49453_P0_PMC_SETUP_REG,
1274dbf7a733SM R Swami Reddy LM49453_PMC_SETUP_CHIP_EN, 0);
1275dbf7a733SM R Swami Reddy break;
1276dbf7a733SM R Swami Reddy }
1277dbf7a733SM R Swami Reddy
1278dbf7a733SM R Swami Reddy return 0;
1279dbf7a733SM R Swami Reddy }
1280dbf7a733SM R Swami Reddy
1281dbf7a733SM R Swami Reddy /* Formates supported by LM49453 driver. */
1282dbf7a733SM R Swami Reddy #define LM49453_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE |\
1283dbf7a733SM R Swami Reddy SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S32_LE)
1284dbf7a733SM R Swami Reddy
128564793047SAxel Lin static const struct snd_soc_dai_ops lm49453_headset_dai_ops = {
1286dbf7a733SM R Swami Reddy .hw_params = lm49453_hw_params,
1287dbf7a733SM R Swami Reddy .set_sysclk = lm49453_set_dai_sysclk,
1288dbf7a733SM R Swami Reddy .set_fmt = lm49453_set_dai_fmt,
128954b59270SKuninori Morimoto .mute_stream = lm49453_hp_mute,
129054b59270SKuninori Morimoto .no_capture_mute = 1,
1291dbf7a733SM R Swami Reddy };
1292dbf7a733SM R Swami Reddy
129364793047SAxel Lin static const struct snd_soc_dai_ops lm49453_speaker_dai_ops = {
1294dbf7a733SM R Swami Reddy .hw_params = lm49453_hw_params,
1295dbf7a733SM R Swami Reddy .set_sysclk = lm49453_set_dai_sysclk,
1296dbf7a733SM R Swami Reddy .set_fmt = lm49453_set_dai_fmt,
129754b59270SKuninori Morimoto .mute_stream = lm49453_ls_mute,
129854b59270SKuninori Morimoto .no_capture_mute = 1,
1299dbf7a733SM R Swami Reddy };
1300dbf7a733SM R Swami Reddy
130164793047SAxel Lin static const struct snd_soc_dai_ops lm49453_haptic_dai_ops = {
1302dbf7a733SM R Swami Reddy .hw_params = lm49453_hw_params,
1303dbf7a733SM R Swami Reddy .set_sysclk = lm49453_set_dai_sysclk,
1304dbf7a733SM R Swami Reddy .set_fmt = lm49453_set_dai_fmt,
130554b59270SKuninori Morimoto .mute_stream = lm49453_ha_mute,
130654b59270SKuninori Morimoto .no_capture_mute = 1,
1307dbf7a733SM R Swami Reddy };
1308dbf7a733SM R Swami Reddy
130964793047SAxel Lin static const struct snd_soc_dai_ops lm49453_ep_dai_ops = {
1310dbf7a733SM R Swami Reddy .hw_params = lm49453_hw_params,
1311dbf7a733SM R Swami Reddy .set_sysclk = lm49453_set_dai_sysclk,
1312dbf7a733SM R Swami Reddy .set_fmt = lm49453_set_dai_fmt,
131354b59270SKuninori Morimoto .mute_stream = lm49453_ep_mute,
131454b59270SKuninori Morimoto .no_capture_mute = 1,
1315dbf7a733SM R Swami Reddy };
1316dbf7a733SM R Swami Reddy
131764793047SAxel Lin static const struct snd_soc_dai_ops lm49453_lineout_dai_ops = {
1318dbf7a733SM R Swami Reddy .hw_params = lm49453_hw_params,
1319dbf7a733SM R Swami Reddy .set_sysclk = lm49453_set_dai_sysclk,
1320dbf7a733SM R Swami Reddy .set_fmt = lm49453_set_dai_fmt,
132154b59270SKuninori Morimoto .mute_stream = lm49453_lo_mute,
132254b59270SKuninori Morimoto .no_capture_mute = 1,
1323dbf7a733SM R Swami Reddy };
1324dbf7a733SM R Swami Reddy
1325dbf7a733SM R Swami Reddy /* LM49453 dai structure. */
1326cd86e3ceSMark Brown static struct snd_soc_dai_driver lm49453_dai[] = {
1327dbf7a733SM R Swami Reddy {
1328dbf7a733SM R Swami Reddy .name = "LM49453 Headset",
1329dbf7a733SM R Swami Reddy .playback = {
1330dbf7a733SM R Swami Reddy .stream_name = "Headset",
1331dbf7a733SM R Swami Reddy .channels_min = 2,
1332dbf7a733SM R Swami Reddy .channels_max = 2,
1333dbf7a733SM R Swami Reddy .rates = SNDRV_PCM_RATE_8000_192000,
1334dbf7a733SM R Swami Reddy .formats = LM49453_FORMATS,
1335dbf7a733SM R Swami Reddy },
1336dbf7a733SM R Swami Reddy .capture = {
1337dbf7a733SM R Swami Reddy .stream_name = "Capture",
1338dbf7a733SM R Swami Reddy .channels_min = 1,
1339dbf7a733SM R Swami Reddy .channels_max = 5,
1340dbf7a733SM R Swami Reddy .rates = SNDRV_PCM_RATE_8000_192000,
1341dbf7a733SM R Swami Reddy .formats = LM49453_FORMATS,
1342dbf7a733SM R Swami Reddy },
1343dbf7a733SM R Swami Reddy .ops = &lm49453_headset_dai_ops,
13443b940ecdSKuninori Morimoto .symmetric_rate = 1,
1345dbf7a733SM R Swami Reddy },
1346dbf7a733SM R Swami Reddy {
1347dbf7a733SM R Swami Reddy .name = "LM49453 Speaker",
1348dbf7a733SM R Swami Reddy .playback = {
1349dbf7a733SM R Swami Reddy .stream_name = "Speaker",
1350dbf7a733SM R Swami Reddy .channels_min = 2,
1351dbf7a733SM R Swami Reddy .channels_max = 2,
1352dbf7a733SM R Swami Reddy .rates = SNDRV_PCM_RATE_8000_192000,
1353dbf7a733SM R Swami Reddy .formats = LM49453_FORMATS,
1354dbf7a733SM R Swami Reddy },
1355dbf7a733SM R Swami Reddy .ops = &lm49453_speaker_dai_ops,
1356dbf7a733SM R Swami Reddy },
1357dbf7a733SM R Swami Reddy {
1358dbf7a733SM R Swami Reddy .name = "LM49453 Haptic",
1359dbf7a733SM R Swami Reddy .playback = {
1360dbf7a733SM R Swami Reddy .stream_name = "Haptic",
1361dbf7a733SM R Swami Reddy .channels_min = 2,
1362dbf7a733SM R Swami Reddy .channels_max = 2,
1363dbf7a733SM R Swami Reddy .rates = SNDRV_PCM_RATE_8000_192000,
1364dbf7a733SM R Swami Reddy .formats = LM49453_FORMATS,
1365dbf7a733SM R Swami Reddy },
1366dbf7a733SM R Swami Reddy .ops = &lm49453_haptic_dai_ops,
1367dbf7a733SM R Swami Reddy },
1368dbf7a733SM R Swami Reddy {
1369dbf7a733SM R Swami Reddy .name = "LM49453 Earpiece",
1370dbf7a733SM R Swami Reddy .playback = {
1371dbf7a733SM R Swami Reddy .stream_name = "Earpiece",
1372dbf7a733SM R Swami Reddy .channels_min = 1,
1373dbf7a733SM R Swami Reddy .channels_max = 1,
1374dbf7a733SM R Swami Reddy .rates = SNDRV_PCM_RATE_8000_192000,
1375dbf7a733SM R Swami Reddy .formats = LM49453_FORMATS,
1376dbf7a733SM R Swami Reddy },
1377dbf7a733SM R Swami Reddy .ops = &lm49453_ep_dai_ops,
1378dbf7a733SM R Swami Reddy },
1379dbf7a733SM R Swami Reddy {
1380dbf7a733SM R Swami Reddy .name = "LM49453 line out",
1381dbf7a733SM R Swami Reddy .playback = {
1382dbf7a733SM R Swami Reddy .stream_name = "Lineout",
1383dbf7a733SM R Swami Reddy .channels_min = 2,
1384dbf7a733SM R Swami Reddy .channels_max = 2,
1385dbf7a733SM R Swami Reddy .rates = SNDRV_PCM_RATE_8000_192000,
1386dbf7a733SM R Swami Reddy .formats = LM49453_FORMATS,
1387dbf7a733SM R Swami Reddy },
1388dbf7a733SM R Swami Reddy .ops = &lm49453_lineout_dai_ops,
1389dbf7a733SM R Swami Reddy },
1390dbf7a733SM R Swami Reddy };
1391dbf7a733SM R Swami Reddy
1392f5d5240eSKuninori Morimoto static const struct snd_soc_component_driver soc_component_dev_lm49453 = {
1393dbf7a733SM R Swami Reddy .set_bias_level = lm49453_set_bias_level,
1394dbf7a733SM R Swami Reddy .controls = lm49453_snd_controls,
1395dbf7a733SM R Swami Reddy .num_controls = ARRAY_SIZE(lm49453_snd_controls),
1396dbf7a733SM R Swami Reddy .dapm_widgets = lm49453_dapm_widgets,
1397dbf7a733SM R Swami Reddy .num_dapm_widgets = ARRAY_SIZE(lm49453_dapm_widgets),
1398dbf7a733SM R Swami Reddy .dapm_routes = lm49453_audio_map,
1399dbf7a733SM R Swami Reddy .num_dapm_routes = ARRAY_SIZE(lm49453_audio_map),
1400f5d5240eSKuninori Morimoto .use_pmdown_time = 1,
1401f5d5240eSKuninori Morimoto .endianness = 1,
1402dbf7a733SM R Swami Reddy };
1403dbf7a733SM R Swami Reddy
1404dbf7a733SM R Swami Reddy static const struct regmap_config lm49453_regmap_config = {
1405dbf7a733SM R Swami Reddy .reg_bits = 8,
1406dbf7a733SM R Swami Reddy .val_bits = 8,
1407dbf7a733SM R Swami Reddy
1408dbf7a733SM R Swami Reddy .max_register = LM49453_MAX_REGISTER,
1409dbf7a733SM R Swami Reddy .reg_defaults = lm49453_reg_defs,
1410dbf7a733SM R Swami Reddy .num_reg_defaults = ARRAY_SIZE(lm49453_reg_defs),
1411dbf7a733SM R Swami Reddy .cache_type = REGCACHE_RBTREE,
1412dbf7a733SM R Swami Reddy };
1413dbf7a733SM R Swami Reddy
lm49453_i2c_probe(struct i2c_client * i2c)14146b84012eSStephen Kitt static int lm49453_i2c_probe(struct i2c_client *i2c)
1415dbf7a733SM R Swami Reddy {
1416dbf7a733SM R Swami Reddy struct lm49453_priv *lm49453;
1417dbf7a733SM R Swami Reddy int ret = 0;
1418dbf7a733SM R Swami Reddy
1419dbf7a733SM R Swami Reddy lm49453 = devm_kzalloc(&i2c->dev, sizeof(struct lm49453_priv),
1420dbf7a733SM R Swami Reddy GFP_KERNEL);
1421dbf7a733SM R Swami Reddy
1422dbf7a733SM R Swami Reddy if (lm49453 == NULL)
1423dbf7a733SM R Swami Reddy return -ENOMEM;
1424dbf7a733SM R Swami Reddy
1425dbf7a733SM R Swami Reddy i2c_set_clientdata(i2c, lm49453);
1426dbf7a733SM R Swami Reddy
14272fadf6a8SSachin Kamat lm49453->regmap = devm_regmap_init_i2c(i2c, &lm49453_regmap_config);
1428dbf7a733SM R Swami Reddy if (IS_ERR(lm49453->regmap)) {
1429dbf7a733SM R Swami Reddy ret = PTR_ERR(lm49453->regmap);
1430dbf7a733SM R Swami Reddy dev_err(&i2c->dev, "Failed to allocate register map: %d\n",
1431dbf7a733SM R Swami Reddy ret);
1432dbf7a733SM R Swami Reddy return ret;
1433dbf7a733SM R Swami Reddy }
1434dbf7a733SM R Swami Reddy
1435f5d5240eSKuninori Morimoto ret = devm_snd_soc_register_component(&i2c->dev,
1436f5d5240eSKuninori Morimoto &soc_component_dev_lm49453,
1437dbf7a733SM R Swami Reddy lm49453_dai, ARRAY_SIZE(lm49453_dai));
14382fadf6a8SSachin Kamat if (ret < 0)
1439f5d5240eSKuninori Morimoto dev_err(&i2c->dev, "Failed to register component: %d\n", ret);
1440dbf7a733SM R Swami Reddy
1441dbf7a733SM R Swami Reddy return ret;
1442dbf7a733SM R Swami Reddy }
1443dbf7a733SM R Swami Reddy
1444dbf7a733SM R Swami Reddy static const struct i2c_device_id lm49453_i2c_id[] = {
1445dbf7a733SM R Swami Reddy { "lm49453", 0 },
1446dbf7a733SM R Swami Reddy { }
1447dbf7a733SM R Swami Reddy };
1448dbf7a733SM R Swami Reddy MODULE_DEVICE_TABLE(i2c, lm49453_i2c_id);
1449dbf7a733SM R Swami Reddy
1450dbf7a733SM R Swami Reddy static struct i2c_driver lm49453_i2c_driver = {
1451dbf7a733SM R Swami Reddy .driver = {
1452dbf7a733SM R Swami Reddy .name = "lm49453",
1453dbf7a733SM R Swami Reddy },
1454*9abcd240SUwe Kleine-König .probe = lm49453_i2c_probe,
1455dbf7a733SM R Swami Reddy .id_table = lm49453_i2c_id,
1456dbf7a733SM R Swami Reddy };
1457dbf7a733SM R Swami Reddy
1458dbf7a733SM R Swami Reddy module_i2c_driver(lm49453_i2c_driver);
1459dbf7a733SM R Swami Reddy
1460dbf7a733SM R Swami Reddy MODULE_DESCRIPTION("ASoC LM49453 driver");
1461665010c2SMark Brown MODULE_AUTHOR("M R Swami Reddy <MR.Swami.Reddy@ti.com>");
1462dbf7a733SM R Swami Reddy MODULE_LICENSE("GPL v2");
1463