1 // SPDX-License-Identifier: GPL-2.0-only 2 /* 3 * Copyright (C) ST-Ericsson SA 2012 4 * 5 * Author: Ola Lilja <ola.o.lilja@stericsson.com>, 6 * Kristoffer Karlsson <kristoffer.karlsson@stericsson.com>, 7 * Roger Nilsson <roger.xr.nilsson@stericsson.com>, 8 * for ST-Ericsson. 9 * 10 * Based on the early work done by: 11 * Mikko J. Lehto <mikko.lehto@symbio.com>, 12 * Mikko Sarmanne <mikko.sarmanne@symbio.com>, 13 * Jarmo K. Kuronen <jarmo.kuronen@symbio.com>, 14 * for ST-Ericsson. 15 */ 16 17 #include <linux/kernel.h> 18 #include <linux/module.h> 19 #include <linux/device.h> 20 #include <linux/slab.h> 21 #include <linux/moduleparam.h> 22 #include <linux/init.h> 23 #include <linux/pm.h> 24 #include <linux/platform_device.h> 25 #include <linux/mfd/abx500/ab8500.h> 26 #include <linux/mfd/abx500.h> 27 #include <linux/mfd/abx500/ab8500-sysctrl.h> 28 #include <linux/mfd/abx500/ab8500-codec.h> 29 #include <linux/regulator/consumer.h> 30 #include <linux/of.h> 31 32 #include <sound/core.h> 33 #include <sound/pcm.h> 34 #include <sound/pcm_params.h> 35 #include <sound/initval.h> 36 #include <sound/soc.h> 37 #include <sound/soc-dapm.h> 38 #include <sound/tlv.h> 39 40 #include "ab8500-codec.h" 41 42 /* Macrocell value definitions */ 43 #define CLK_32K_OUT2_DISABLE 0x01 44 #define INACTIVE_RESET_AUDIO 0x02 45 #define ENABLE_AUDIO_CLK_TO_AUDIO_BLK 0x10 46 #define ENABLE_VINTCORE12_SUPPLY 0x04 47 #define GPIO27_DIR_OUTPUT 0x04 48 #define GPIO29_DIR_OUTPUT 0x10 49 #define GPIO31_DIR_OUTPUT 0x40 50 51 /* Macrocell register definitions */ 52 #define AB8500_GPIO_DIR4_REG 0x13 /* Bank AB8500_MISC */ 53 54 /* Private data for AB8500 device-driver */ 55 struct ab8500_codec_drvdata { 56 struct regmap *regmap; 57 }; 58 59 static inline const char *amic_micbias_str(enum amic_micbias micbias) 60 { 61 switch (micbias) { 62 case AMIC_MICBIAS_VAMIC1: 63 return "VAMIC1"; 64 case AMIC_MICBIAS_VAMIC2: 65 return "VAMIC2"; 66 default: 67 return "Unknown"; 68 } 69 } 70 71 static inline const char *amic_type_str(enum amic_type type) 72 { 73 switch (type) { 74 case AMIC_TYPE_DIFFERENTIAL: 75 return "DIFFERENTIAL"; 76 case AMIC_TYPE_SINGLE_ENDED: 77 return "SINGLE ENDED"; 78 default: 79 return "Unknown"; 80 } 81 } 82 83 /* 84 * Read'n'write functions 85 */ 86 87 /* Read a register from the audio-bank of AB8500 */ 88 static int ab8500_codec_read_reg(void *context, unsigned int reg, 89 unsigned int *value) 90 { 91 struct device *dev = context; 92 int status; 93 94 u8 value8; 95 status = abx500_get_register_interruptible(dev, AB8500_AUDIO, 96 reg, &value8); 97 *value = (unsigned int)value8; 98 99 return status; 100 } 101 102 /* Write to a register in the audio-bank of AB8500 */ 103 static int ab8500_codec_write_reg(void *context, unsigned int reg, 104 unsigned int value) 105 { 106 struct device *dev = context; 107 108 return abx500_set_register_interruptible(dev, AB8500_AUDIO, 109 reg, value); 110 } 111 112 static const struct regmap_config ab8500_codec_regmap = { 113 .reg_read = ab8500_codec_read_reg, 114 .reg_write = ab8500_codec_write_reg, 115 }; 116 117 /* 118 * Controls - DAPM 119 */ 120 121 /* Earpiece */ 122 123 /* Earpiece source selector */ 124 static const char * const enum_ear_lineout_source[] = {"Headset Left", 125 "Speaker Left"}; 126 static SOC_ENUM_SINGLE_DECL(dapm_enum_ear_lineout_source, AB8500_DMICFILTCONF, 127 AB8500_DMICFILTCONF_DA3TOEAR, enum_ear_lineout_source); 128 static const struct snd_kcontrol_new dapm_ear_lineout_source = 129 SOC_DAPM_ENUM("Earpiece or LineOut Mono Source", 130 dapm_enum_ear_lineout_source); 131 132 /* LineOut */ 133 134 /* LineOut source selector */ 135 static const char * const enum_lineout_source[] = {"Mono Path", "Stereo Path"}; 136 static SOC_ENUM_DOUBLE_DECL(dapm_enum_lineout_source, AB8500_ANACONF5, 137 AB8500_ANACONF5_HSLDACTOLOL, 138 AB8500_ANACONF5_HSRDACTOLOR, enum_lineout_source); 139 static const struct snd_kcontrol_new dapm_lineout_source[] = { 140 SOC_DAPM_ENUM("LineOut Source", dapm_enum_lineout_source), 141 }; 142 143 /* Handsfree */ 144 145 /* Speaker Left - ANC selector */ 146 static const char * const enum_HFx_sel[] = {"Audio Path", "ANC"}; 147 static SOC_ENUM_SINGLE_DECL(dapm_enum_HFl_sel, AB8500_DIGMULTCONF2, 148 AB8500_DIGMULTCONF2_HFLSEL, enum_HFx_sel); 149 static const struct snd_kcontrol_new dapm_HFl_select[] = { 150 SOC_DAPM_ENUM("Speaker Left Source", dapm_enum_HFl_sel), 151 }; 152 153 /* Speaker Right - ANC selector */ 154 static SOC_ENUM_SINGLE_DECL(dapm_enum_HFr_sel, AB8500_DIGMULTCONF2, 155 AB8500_DIGMULTCONF2_HFRSEL, enum_HFx_sel); 156 static const struct snd_kcontrol_new dapm_HFr_select[] = { 157 SOC_DAPM_ENUM("Speaker Right Source", dapm_enum_HFr_sel), 158 }; 159 160 /* Mic 1 */ 161 162 /* Mic 1 - Mic 1a or 1b selector */ 163 static const char * const enum_mic1ab_sel[] = {"Mic 1b", "Mic 1a"}; 164 static SOC_ENUM_SINGLE_DECL(dapm_enum_mic1ab_sel, AB8500_ANACONF3, 165 AB8500_ANACONF3_MIC1SEL, enum_mic1ab_sel); 166 static const struct snd_kcontrol_new dapm_mic1ab_mux[] = { 167 SOC_DAPM_ENUM("Mic 1a or 1b Select", dapm_enum_mic1ab_sel), 168 }; 169 170 /* Mic 1 - AD3 - Mic 1 or DMic 3 selector */ 171 static const char * const enum_ad3_sel[] = {"Mic 1", "DMic 3"}; 172 static SOC_ENUM_SINGLE_DECL(dapm_enum_ad3_sel, AB8500_DIGMULTCONF1, 173 AB8500_DIGMULTCONF1_AD3SEL, enum_ad3_sel); 174 static const struct snd_kcontrol_new dapm_ad3_select[] = { 175 SOC_DAPM_ENUM("AD3 Source Select", dapm_enum_ad3_sel), 176 }; 177 178 /* Mic 1 - AD6 - Mic 1 or DMic 6 selector */ 179 static const char * const enum_ad6_sel[] = {"Mic 1", "DMic 6"}; 180 static SOC_ENUM_SINGLE_DECL(dapm_enum_ad6_sel, AB8500_DIGMULTCONF1, 181 AB8500_DIGMULTCONF1_AD6SEL, enum_ad6_sel); 182 static const struct snd_kcontrol_new dapm_ad6_select[] = { 183 SOC_DAPM_ENUM("AD6 Source Select", dapm_enum_ad6_sel), 184 }; 185 186 /* Mic 2 */ 187 188 /* Mic 2 - AD5 - Mic 2 or DMic 5 selector */ 189 static const char * const enum_ad5_sel[] = {"Mic 2", "DMic 5"}; 190 static SOC_ENUM_SINGLE_DECL(dapm_enum_ad5_sel, AB8500_DIGMULTCONF1, 191 AB8500_DIGMULTCONF1_AD5SEL, enum_ad5_sel); 192 static const struct snd_kcontrol_new dapm_ad5_select[] = { 193 SOC_DAPM_ENUM("AD5 Source Select", dapm_enum_ad5_sel), 194 }; 195 196 /* LineIn */ 197 198 /* LineIn left - AD1 - LineIn Left or DMic 1 selector */ 199 static const char * const enum_ad1_sel[] = {"LineIn Left", "DMic 1"}; 200 static SOC_ENUM_SINGLE_DECL(dapm_enum_ad1_sel, AB8500_DIGMULTCONF1, 201 AB8500_DIGMULTCONF1_AD1SEL, enum_ad1_sel); 202 static const struct snd_kcontrol_new dapm_ad1_select[] = { 203 SOC_DAPM_ENUM("AD1 Source Select", dapm_enum_ad1_sel), 204 }; 205 206 /* LineIn right - Mic 2 or LineIn Right selector */ 207 static const char * const enum_mic2lr_sel[] = {"Mic 2", "LineIn Right"}; 208 static SOC_ENUM_SINGLE_DECL(dapm_enum_mic2lr_sel, AB8500_ANACONF3, 209 AB8500_ANACONF3_LINRSEL, enum_mic2lr_sel); 210 static const struct snd_kcontrol_new dapm_mic2lr_select[] = { 211 SOC_DAPM_ENUM("Mic 2 or LINR Select", dapm_enum_mic2lr_sel), 212 }; 213 214 /* LineIn right - AD2 - LineIn Right or DMic2 selector */ 215 static const char * const enum_ad2_sel[] = {"LineIn Right", "DMic 2"}; 216 static SOC_ENUM_SINGLE_DECL(dapm_enum_ad2_sel, AB8500_DIGMULTCONF1, 217 AB8500_DIGMULTCONF1_AD2SEL, enum_ad2_sel); 218 static const struct snd_kcontrol_new dapm_ad2_select[] = { 219 SOC_DAPM_ENUM("AD2 Source Select", dapm_enum_ad2_sel), 220 }; 221 222 223 /* ANC */ 224 225 static const char * const enum_anc_in_sel[] = {"Mic 1 / DMic 6", 226 "Mic 2 / DMic 5"}; 227 static SOC_ENUM_SINGLE_DECL(dapm_enum_anc_in_sel, AB8500_DMICFILTCONF, 228 AB8500_DMICFILTCONF_ANCINSEL, enum_anc_in_sel); 229 static const struct snd_kcontrol_new dapm_anc_in_select[] = { 230 SOC_DAPM_ENUM("ANC Source", dapm_enum_anc_in_sel), 231 }; 232 233 /* ANC - Enable/Disable */ 234 static const struct snd_kcontrol_new dapm_anc_enable[] = { 235 SOC_DAPM_SINGLE("Switch", AB8500_ANCCONF1, 236 AB8500_ANCCONF1_ENANC, 1, 0), 237 }; 238 239 /* ANC to Earpiece - Mute */ 240 static const struct snd_kcontrol_new dapm_anc_ear_mute[] = { 241 SOC_DAPM_SINGLE("Switch", AB8500_DIGMULTCONF1, 242 AB8500_DIGMULTCONF1_ANCSEL, 1, 0), 243 }; 244 245 246 247 /* Sidetone left */ 248 249 /* Sidetone left - Input selector */ 250 static const char * const enum_stfir1_in_sel[] = { 251 "LineIn Left", "LineIn Right", "Mic 1", "Headset Left" 252 }; 253 static SOC_ENUM_SINGLE_DECL(dapm_enum_stfir1_in_sel, AB8500_DIGMULTCONF2, 254 AB8500_DIGMULTCONF2_FIRSID1SEL, enum_stfir1_in_sel); 255 static const struct snd_kcontrol_new dapm_stfir1_in_select[] = { 256 SOC_DAPM_ENUM("Sidetone Left Source", dapm_enum_stfir1_in_sel), 257 }; 258 259 /* Sidetone right path */ 260 261 /* Sidetone right - Input selector */ 262 static const char * const enum_stfir2_in_sel[] = { 263 "LineIn Right", "Mic 1", "DMic 4", "Headset Right" 264 }; 265 static SOC_ENUM_SINGLE_DECL(dapm_enum_stfir2_in_sel, AB8500_DIGMULTCONF2, 266 AB8500_DIGMULTCONF2_FIRSID2SEL, enum_stfir2_in_sel); 267 static const struct snd_kcontrol_new dapm_stfir2_in_select[] = { 268 SOC_DAPM_ENUM("Sidetone Right Source", dapm_enum_stfir2_in_sel), 269 }; 270 271 /* Vibra */ 272 273 static const char * const enum_pwm2vibx[] = {"Audio Path", "PWM Generator"}; 274 275 static SOC_ENUM_SINGLE_DECL(dapm_enum_pwm2vib1, AB8500_PWMGENCONF1, 276 AB8500_PWMGENCONF1_PWMTOVIB1, enum_pwm2vibx); 277 278 static const struct snd_kcontrol_new dapm_pwm2vib1[] = { 279 SOC_DAPM_ENUM("Vibra 1 Controller", dapm_enum_pwm2vib1), 280 }; 281 282 static SOC_ENUM_SINGLE_DECL(dapm_enum_pwm2vib2, AB8500_PWMGENCONF1, 283 AB8500_PWMGENCONF1_PWMTOVIB2, enum_pwm2vibx); 284 285 static const struct snd_kcontrol_new dapm_pwm2vib2[] = { 286 SOC_DAPM_ENUM("Vibra 2 Controller", dapm_enum_pwm2vib2), 287 }; 288 289 /* 290 * DAPM-widgets 291 */ 292 293 static const struct snd_soc_dapm_widget ab8500_dapm_widgets[] = { 294 295 /* Clocks */ 296 SND_SOC_DAPM_CLOCK_SUPPLY("audioclk"), 297 298 /* Regulators */ 299 SND_SOC_DAPM_REGULATOR_SUPPLY("V-AUD", 0, 0), 300 SND_SOC_DAPM_REGULATOR_SUPPLY("V-AMIC1", 0, 0), 301 SND_SOC_DAPM_REGULATOR_SUPPLY("V-AMIC2", 0, 0), 302 SND_SOC_DAPM_REGULATOR_SUPPLY("V-DMIC", 0, 0), 303 304 /* Power */ 305 SND_SOC_DAPM_SUPPLY("Audio Power", 306 AB8500_POWERUP, AB8500_POWERUP_POWERUP, 0, 307 NULL, SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD), 308 SND_SOC_DAPM_SUPPLY("Audio Analog Power", 309 AB8500_POWERUP, AB8500_POWERUP_ENANA, 0, 310 NULL, SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD), 311 312 /* Main supply node */ 313 SND_SOC_DAPM_SUPPLY("Main Supply", SND_SOC_NOPM, 0, 0, 314 NULL, SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD), 315 316 /* DA/AD */ 317 318 SND_SOC_DAPM_AIF_IN("DA_IN1", NULL, 0, SND_SOC_NOPM, 0, 0), 319 SND_SOC_DAPM_AIF_IN("DA_IN2", NULL, 0, SND_SOC_NOPM, 0, 0), 320 SND_SOC_DAPM_AIF_IN("DA_IN3", NULL, 0, SND_SOC_NOPM, 0, 0), 321 SND_SOC_DAPM_AIF_IN("DA_IN4", NULL, 0, SND_SOC_NOPM, 0, 0), 322 SND_SOC_DAPM_AIF_IN("DA_IN5", NULL, 0, SND_SOC_NOPM, 0, 0), 323 SND_SOC_DAPM_AIF_IN("DA_IN6", NULL, 0, SND_SOC_NOPM, 0, 0), 324 SND_SOC_DAPM_AIF_OUT("AD_OUT1", NULL, 0, SND_SOC_NOPM, 0, 0), 325 SND_SOC_DAPM_AIF_OUT("AD_OUT2", NULL, 0, SND_SOC_NOPM, 0, 0), 326 SND_SOC_DAPM_AIF_OUT("AD_OUT3", NULL, 0, SND_SOC_NOPM, 0, 0), 327 SND_SOC_DAPM_AIF_OUT("AD_OUT4", NULL, 0, SND_SOC_NOPM, 0, 0), 328 SND_SOC_DAPM_AIF_OUT("AD_OUT57", NULL, 0, SND_SOC_NOPM, 0, 0), 329 SND_SOC_DAPM_AIF_OUT("AD_OUT68", NULL, 0, SND_SOC_NOPM, 0, 0), 330 331 /* Headset path */ 332 333 SND_SOC_DAPM_SUPPLY("Charge Pump", AB8500_ANACONF5, 334 AB8500_ANACONF5_ENCPHS, 0, NULL, 0), 335 336 SND_SOC_DAPM_DAC("DA1 Enable", "ab8500_0p", 337 AB8500_DAPATHENA, AB8500_DAPATHENA_ENDA1, 0), 338 SND_SOC_DAPM_DAC("DA2 Enable", "ab8500_0p", 339 AB8500_DAPATHENA, AB8500_DAPATHENA_ENDA2, 0), 340 341 SND_SOC_DAPM_PGA("HSL Digital Volume", SND_SOC_NOPM, 0, 0, 342 NULL, 0), 343 SND_SOC_DAPM_PGA("HSR Digital Volume", SND_SOC_NOPM, 0, 0, 344 NULL, 0), 345 346 SND_SOC_DAPM_DAC("HSL DAC", "ab8500_0p", 347 AB8500_DAPATHCONF, AB8500_DAPATHCONF_ENDACHSL, 0), 348 SND_SOC_DAPM_DAC("HSR DAC", "ab8500_0p", 349 AB8500_DAPATHCONF, AB8500_DAPATHCONF_ENDACHSR, 0), 350 SND_SOC_DAPM_MIXER("HSL DAC Mute", AB8500_MUTECONF, 351 AB8500_MUTECONF_MUTDACHSL, 1, 352 NULL, 0), 353 SND_SOC_DAPM_MIXER("HSR DAC Mute", AB8500_MUTECONF, 354 AB8500_MUTECONF_MUTDACHSR, 1, 355 NULL, 0), 356 SND_SOC_DAPM_DAC("HSL DAC Driver", "ab8500_0p", 357 AB8500_ANACONF3, AB8500_ANACONF3_ENDRVHSL, 0), 358 SND_SOC_DAPM_DAC("HSR DAC Driver", "ab8500_0p", 359 AB8500_ANACONF3, AB8500_ANACONF3_ENDRVHSR, 0), 360 361 SND_SOC_DAPM_MIXER("HSL Mute", 362 AB8500_MUTECONF, AB8500_MUTECONF_MUTHSL, 1, 363 NULL, 0), 364 SND_SOC_DAPM_MIXER("HSR Mute", 365 AB8500_MUTECONF, AB8500_MUTECONF_MUTHSR, 1, 366 NULL, 0), 367 SND_SOC_DAPM_MIXER("HSL Enable", 368 AB8500_ANACONF4, AB8500_ANACONF4_ENHSL, 0, 369 NULL, 0), 370 SND_SOC_DAPM_MIXER("HSR Enable", 371 AB8500_ANACONF4, AB8500_ANACONF4_ENHSR, 0, 372 NULL, 0), 373 SND_SOC_DAPM_PGA("HSL Volume", 374 SND_SOC_NOPM, 0, 0, 375 NULL, 0), 376 SND_SOC_DAPM_PGA("HSR Volume", 377 SND_SOC_NOPM, 0, 0, 378 NULL, 0), 379 380 SND_SOC_DAPM_OUTPUT("Headset Left"), 381 SND_SOC_DAPM_OUTPUT("Headset Right"), 382 383 /* LineOut path */ 384 385 SND_SOC_DAPM_MUX("LineOut Source", 386 SND_SOC_NOPM, 0, 0, dapm_lineout_source), 387 388 SND_SOC_DAPM_MIXER("LOL Disable HFL", 389 AB8500_ANACONF4, AB8500_ANACONF4_ENHFL, 1, 390 NULL, 0), 391 SND_SOC_DAPM_MIXER("LOR Disable HFR", 392 AB8500_ANACONF4, AB8500_ANACONF4_ENHFR, 1, 393 NULL, 0), 394 395 SND_SOC_DAPM_MIXER("LOL Enable", 396 AB8500_ANACONF5, AB8500_ANACONF5_ENLOL, 0, 397 NULL, 0), 398 SND_SOC_DAPM_MIXER("LOR Enable", 399 AB8500_ANACONF5, AB8500_ANACONF5_ENLOR, 0, 400 NULL, 0), 401 402 SND_SOC_DAPM_OUTPUT("LineOut Left"), 403 SND_SOC_DAPM_OUTPUT("LineOut Right"), 404 405 /* Earpiece path */ 406 407 SND_SOC_DAPM_MUX("Earpiece or LineOut Mono Source", 408 SND_SOC_NOPM, 0, 0, &dapm_ear_lineout_source), 409 SND_SOC_DAPM_MIXER("EAR DAC", 410 AB8500_DAPATHCONF, AB8500_DAPATHCONF_ENDACEAR, 0, 411 NULL, 0), 412 SND_SOC_DAPM_MIXER("EAR Mute", 413 AB8500_MUTECONF, AB8500_MUTECONF_MUTEAR, 1, 414 NULL, 0), 415 SND_SOC_DAPM_MIXER("EAR Enable", 416 AB8500_ANACONF4, AB8500_ANACONF4_ENEAR, 0, 417 NULL, 0), 418 419 SND_SOC_DAPM_OUTPUT("Earpiece"), 420 421 /* Handsfree path */ 422 423 SND_SOC_DAPM_MIXER("DA3 Channel Volume", 424 AB8500_DAPATHENA, AB8500_DAPATHENA_ENDA3, 0, 425 NULL, 0), 426 SND_SOC_DAPM_MIXER("DA4 Channel Volume", 427 AB8500_DAPATHENA, AB8500_DAPATHENA_ENDA4, 0, 428 NULL, 0), 429 SND_SOC_DAPM_MUX("Speaker Left Source", 430 SND_SOC_NOPM, 0, 0, dapm_HFl_select), 431 SND_SOC_DAPM_MUX("Speaker Right Source", 432 SND_SOC_NOPM, 0, 0, dapm_HFr_select), 433 SND_SOC_DAPM_MIXER("HFL DAC", AB8500_DAPATHCONF, 434 AB8500_DAPATHCONF_ENDACHFL, 0, 435 NULL, 0), 436 SND_SOC_DAPM_MIXER("HFR DAC", 437 AB8500_DAPATHCONF, AB8500_DAPATHCONF_ENDACHFR, 0, 438 NULL, 0), 439 SND_SOC_DAPM_MIXER("DA4 or ANC path to HfR", 440 AB8500_DIGMULTCONF2, AB8500_DIGMULTCONF2_DATOHFREN, 0, 441 NULL, 0), 442 SND_SOC_DAPM_MIXER("DA3 or ANC path to HfL", 443 AB8500_DIGMULTCONF2, AB8500_DIGMULTCONF2_DATOHFLEN, 0, 444 NULL, 0), 445 SND_SOC_DAPM_MIXER("HFL Enable", 446 AB8500_ANACONF4, AB8500_ANACONF4_ENHFL, 0, 447 NULL, 0), 448 SND_SOC_DAPM_MIXER("HFR Enable", 449 AB8500_ANACONF4, AB8500_ANACONF4_ENHFR, 0, 450 NULL, 0), 451 452 SND_SOC_DAPM_OUTPUT("Speaker Left"), 453 SND_SOC_DAPM_OUTPUT("Speaker Right"), 454 455 /* Vibrator path */ 456 457 SND_SOC_DAPM_INPUT("PWMGEN1"), 458 SND_SOC_DAPM_INPUT("PWMGEN2"), 459 460 SND_SOC_DAPM_MIXER("DA5 Channel Volume", 461 AB8500_DAPATHENA, AB8500_DAPATHENA_ENDA5, 0, 462 NULL, 0), 463 SND_SOC_DAPM_MIXER("DA6 Channel Volume", 464 AB8500_DAPATHENA, AB8500_DAPATHENA_ENDA6, 0, 465 NULL, 0), 466 SND_SOC_DAPM_MIXER("VIB1 DAC", 467 AB8500_DAPATHCONF, AB8500_DAPATHCONF_ENDACVIB1, 0, 468 NULL, 0), 469 SND_SOC_DAPM_MIXER("VIB2 DAC", 470 AB8500_DAPATHCONF, AB8500_DAPATHCONF_ENDACVIB2, 0, 471 NULL, 0), 472 SND_SOC_DAPM_MUX("Vibra 1 Controller", 473 SND_SOC_NOPM, 0, 0, dapm_pwm2vib1), 474 SND_SOC_DAPM_MUX("Vibra 2 Controller", 475 SND_SOC_NOPM, 0, 0, dapm_pwm2vib2), 476 SND_SOC_DAPM_MIXER("VIB1 Enable", 477 AB8500_ANACONF4, AB8500_ANACONF4_ENVIB1, 0, 478 NULL, 0), 479 SND_SOC_DAPM_MIXER("VIB2 Enable", 480 AB8500_ANACONF4, AB8500_ANACONF4_ENVIB2, 0, 481 NULL, 0), 482 483 SND_SOC_DAPM_OUTPUT("Vibra 1"), 484 SND_SOC_DAPM_OUTPUT("Vibra 2"), 485 486 /* Mic 1 */ 487 488 SND_SOC_DAPM_INPUT("Mic 1"), 489 490 SND_SOC_DAPM_MUX("Mic 1a or 1b Select", 491 SND_SOC_NOPM, 0, 0, dapm_mic1ab_mux), 492 SND_SOC_DAPM_MIXER("MIC1 Mute", 493 AB8500_ANACONF2, AB8500_ANACONF2_MUTMIC1, 1, 494 NULL, 0), 495 SND_SOC_DAPM_MIXER("MIC1A V-AMICx Enable", 496 AB8500_ANACONF2, AB8500_ANACONF2_ENMIC1, 0, 497 NULL, 0), 498 SND_SOC_DAPM_MIXER("MIC1B V-AMICx Enable", 499 AB8500_ANACONF2, AB8500_ANACONF2_ENMIC1, 0, 500 NULL, 0), 501 SND_SOC_DAPM_MIXER("MIC1 ADC", 502 AB8500_ANACONF3, AB8500_ANACONF3_ENADCMIC, 0, 503 NULL, 0), 504 SND_SOC_DAPM_MUX("AD3 Source Select", 505 SND_SOC_NOPM, 0, 0, dapm_ad3_select), 506 SND_SOC_DAPM_MIXER("AD3 Channel Volume", 507 SND_SOC_NOPM, 0, 0, 508 NULL, 0), 509 SND_SOC_DAPM_SUPPLY("AD34 Enable", AB8500_ADPATHENA, 510 AB8500_ADPATHENA_ENAD34, 0, NULL, 0), 511 512 /* Mic 2 */ 513 514 SND_SOC_DAPM_INPUT("Mic 2"), 515 516 SND_SOC_DAPM_MIXER("MIC2 Mute", 517 AB8500_ANACONF2, AB8500_ANACONF2_MUTMIC2, 1, 518 NULL, 0), 519 SND_SOC_DAPM_MIXER("MIC2 V-AMICx Enable", AB8500_ANACONF2, 520 AB8500_ANACONF2_ENMIC2, 0, 521 NULL, 0), 522 523 /* LineIn */ 524 525 SND_SOC_DAPM_INPUT("LineIn Left"), 526 SND_SOC_DAPM_INPUT("LineIn Right"), 527 528 SND_SOC_DAPM_MIXER("LINL Mute", 529 AB8500_ANACONF2, AB8500_ANACONF2_MUTLINL, 1, 530 NULL, 0), 531 SND_SOC_DAPM_MIXER("LINR Mute", 532 AB8500_ANACONF2, AB8500_ANACONF2_MUTLINR, 1, 533 NULL, 0), 534 SND_SOC_DAPM_MIXER("LINL Enable", AB8500_ANACONF2, 535 AB8500_ANACONF2_ENLINL, 0, 536 NULL, 0), 537 SND_SOC_DAPM_MIXER("LINR Enable", AB8500_ANACONF2, 538 AB8500_ANACONF2_ENLINR, 0, 539 NULL, 0), 540 541 /* LineIn Bypass path */ 542 SND_SOC_DAPM_MIXER("LINL to HSL Volume", 543 SND_SOC_NOPM, 0, 0, 544 NULL, 0), 545 SND_SOC_DAPM_MIXER("LINR to HSR Volume", 546 SND_SOC_NOPM, 0, 0, 547 NULL, 0), 548 549 /* LineIn, Mic 2 */ 550 SND_SOC_DAPM_MUX("Mic 2 or LINR Select", 551 SND_SOC_NOPM, 0, 0, dapm_mic2lr_select), 552 SND_SOC_DAPM_MIXER("LINL ADC", AB8500_ANACONF3, 553 AB8500_ANACONF3_ENADCLINL, 0, 554 NULL, 0), 555 SND_SOC_DAPM_MIXER("LINR ADC", AB8500_ANACONF3, 556 AB8500_ANACONF3_ENADCLINR, 0, 557 NULL, 0), 558 SND_SOC_DAPM_MUX("AD1 Source Select", 559 SND_SOC_NOPM, 0, 0, dapm_ad1_select), 560 SND_SOC_DAPM_MUX("AD2 Source Select", 561 SND_SOC_NOPM, 0, 0, dapm_ad2_select), 562 SND_SOC_DAPM_MIXER("AD1 Channel Volume", 563 SND_SOC_NOPM, 0, 0, 564 NULL, 0), 565 SND_SOC_DAPM_MIXER("AD2 Channel Volume", 566 SND_SOC_NOPM, 0, 0, 567 NULL, 0), 568 569 SND_SOC_DAPM_SUPPLY("AD12 Enable", AB8500_ADPATHENA, 570 AB8500_ADPATHENA_ENAD12, 0, NULL, 0), 571 572 /* HD Capture path */ 573 574 SND_SOC_DAPM_MUX("AD5 Source Select", 575 SND_SOC_NOPM, 0, 0, dapm_ad5_select), 576 SND_SOC_DAPM_MUX("AD6 Source Select", 577 SND_SOC_NOPM, 0, 0, dapm_ad6_select), 578 SND_SOC_DAPM_MIXER("AD5 Channel Volume", 579 SND_SOC_NOPM, 0, 0, 580 NULL, 0), 581 SND_SOC_DAPM_MIXER("AD6 Channel Volume", 582 SND_SOC_NOPM, 0, 0, 583 NULL, 0), 584 SND_SOC_DAPM_SUPPLY("AD5768 Enable", AB8500_ADPATHENA, 585 AB8500_ADPATHENA_ENAD5768, 0, NULL, 0), 586 587 /* Digital Microphone path */ 588 589 SND_SOC_DAPM_INPUT("DMic 1"), 590 SND_SOC_DAPM_INPUT("DMic 2"), 591 SND_SOC_DAPM_INPUT("DMic 3"), 592 SND_SOC_DAPM_INPUT("DMic 4"), 593 SND_SOC_DAPM_INPUT("DMic 5"), 594 SND_SOC_DAPM_INPUT("DMic 6"), 595 596 SND_SOC_DAPM_MIXER("DMIC1", 597 AB8500_DIGMICCONF, AB8500_DIGMICCONF_ENDMIC1, 0, 598 NULL, 0), 599 SND_SOC_DAPM_MIXER("DMIC2", 600 AB8500_DIGMICCONF, AB8500_DIGMICCONF_ENDMIC2, 0, 601 NULL, 0), 602 SND_SOC_DAPM_MIXER("DMIC3", 603 AB8500_DIGMICCONF, AB8500_DIGMICCONF_ENDMIC3, 0, 604 NULL, 0), 605 SND_SOC_DAPM_MIXER("DMIC4", 606 AB8500_DIGMICCONF, AB8500_DIGMICCONF_ENDMIC4, 0, 607 NULL, 0), 608 SND_SOC_DAPM_MIXER("DMIC5", 609 AB8500_DIGMICCONF, AB8500_DIGMICCONF_ENDMIC5, 0, 610 NULL, 0), 611 SND_SOC_DAPM_MIXER("DMIC6", 612 AB8500_DIGMICCONF, AB8500_DIGMICCONF_ENDMIC6, 0, 613 NULL, 0), 614 SND_SOC_DAPM_MIXER("AD4 Channel Volume", 615 SND_SOC_NOPM, 0, 0, 616 NULL, 0), 617 /* Acoustical Noise Cancellation path */ 618 619 SND_SOC_DAPM_MUX("ANC Source", 620 SND_SOC_NOPM, 0, 0, 621 dapm_anc_in_select), 622 SND_SOC_DAPM_SWITCH("ANC", 623 SND_SOC_NOPM, 0, 0, 624 dapm_anc_enable), 625 SND_SOC_DAPM_SWITCH("ANC to Earpiece", 626 SND_SOC_NOPM, 0, 0, 627 dapm_anc_ear_mute), 628 629 /* Sidetone Filter path */ 630 631 SND_SOC_DAPM_MUX("Sidetone Left Source", 632 SND_SOC_NOPM, 0, 0, 633 dapm_stfir1_in_select), 634 SND_SOC_DAPM_MUX("Sidetone Right Source", 635 SND_SOC_NOPM, 0, 0, 636 dapm_stfir2_in_select), 637 SND_SOC_DAPM_MIXER("STFIR1 Control", 638 SND_SOC_NOPM, 0, 0, 639 NULL, 0), 640 SND_SOC_DAPM_MIXER("STFIR2 Control", 641 SND_SOC_NOPM, 0, 0, 642 NULL, 0), 643 SND_SOC_DAPM_MIXER("STFIR1 Volume", 644 SND_SOC_NOPM, 0, 0, 645 NULL, 0), 646 SND_SOC_DAPM_MIXER("STFIR2 Volume", 647 SND_SOC_NOPM, 0, 0, 648 NULL, 0), 649 }; 650 651 /* 652 * DAPM-routes 653 */ 654 static const struct snd_soc_dapm_route ab8500_dapm_routes[] = { 655 /* Power AB8500 audio-block when AD/DA is active */ 656 {"Main Supply", NULL, "V-AUD"}, 657 {"Main Supply", NULL, "audioclk"}, 658 {"Main Supply", NULL, "Audio Power"}, 659 {"Main Supply", NULL, "Audio Analog Power"}, 660 661 /* Powerup charge pump if DA1/2 is in use */ 662 663 {"DA_IN1", NULL, "ab8500_0p"}, 664 {"DA_IN1", NULL, "Main Supply"}, 665 {"DA_IN1", NULL, "Charge Pump"}, 666 {"DA_IN2", NULL, "ab8500_0p"}, 667 {"DA_IN2", NULL, "Main Supply"}, 668 {"DA_IN2", NULL, "Charge Pump"}, 669 670 /* Headset path */ 671 672 {"DA1 Enable", NULL, "DA_IN1"}, 673 {"DA2 Enable", NULL, "DA_IN2"}, 674 675 {"HSL Digital Volume", NULL, "DA1 Enable"}, 676 {"HSR Digital Volume", NULL, "DA2 Enable"}, 677 678 {"HSL DAC", NULL, "HSL Digital Volume"}, 679 {"HSR DAC", NULL, "HSR Digital Volume"}, 680 681 {"HSL DAC Mute", NULL, "HSL DAC"}, 682 {"HSR DAC Mute", NULL, "HSR DAC"}, 683 684 {"HSL DAC Driver", NULL, "HSL DAC Mute"}, 685 {"HSR DAC Driver", NULL, "HSR DAC Mute"}, 686 687 {"HSL Mute", NULL, "HSL DAC Driver"}, 688 {"HSR Mute", NULL, "HSR DAC Driver"}, 689 690 {"HSL Enable", NULL, "HSL Mute"}, 691 {"HSR Enable", NULL, "HSR Mute"}, 692 693 {"HSL Volume", NULL, "HSL Enable"}, 694 {"HSR Volume", NULL, "HSR Enable"}, 695 696 {"Headset Left", NULL, "HSL Volume"}, 697 {"Headset Right", NULL, "HSR Volume"}, 698 699 /* HF or LineOut path */ 700 701 {"DA_IN3", NULL, "ab8500_0p"}, 702 {"DA_IN3", NULL, "Main Supply"}, 703 {"DA3 Channel Volume", NULL, "DA_IN3"}, 704 {"DA_IN4", NULL, "ab8500_0p"}, 705 {"DA_IN4", NULL, "Main Supply"}, 706 {"DA4 Channel Volume", NULL, "DA_IN4"}, 707 708 {"Speaker Left Source", "Audio Path", "DA3 Channel Volume"}, 709 {"Speaker Right Source", "Audio Path", "DA4 Channel Volume"}, 710 711 {"DA3 or ANC path to HfL", NULL, "Speaker Left Source"}, 712 {"DA4 or ANC path to HfR", NULL, "Speaker Right Source"}, 713 714 /* HF path */ 715 716 {"HFL DAC", NULL, "DA3 or ANC path to HfL"}, 717 {"HFR DAC", NULL, "DA4 or ANC path to HfR"}, 718 719 {"HFL Enable", NULL, "HFL DAC"}, 720 {"HFR Enable", NULL, "HFR DAC"}, 721 722 {"Speaker Left", NULL, "HFL Enable"}, 723 {"Speaker Right", NULL, "HFR Enable"}, 724 725 /* Earpiece path */ 726 727 {"Earpiece or LineOut Mono Source", "Headset Left", 728 "HSL Digital Volume"}, 729 {"Earpiece or LineOut Mono Source", "Speaker Left", 730 "DA3 or ANC path to HfL"}, 731 732 {"EAR DAC", NULL, "Earpiece or LineOut Mono Source"}, 733 734 {"EAR Mute", NULL, "EAR DAC"}, 735 736 {"EAR Enable", NULL, "EAR Mute"}, 737 738 {"Earpiece", NULL, "EAR Enable"}, 739 740 /* LineOut path stereo */ 741 742 {"LineOut Source", "Stereo Path", "HSL DAC Driver"}, 743 {"LineOut Source", "Stereo Path", "HSR DAC Driver"}, 744 745 /* LineOut path mono */ 746 747 {"LineOut Source", "Mono Path", "EAR DAC"}, 748 749 /* LineOut path */ 750 751 {"LOL Disable HFL", NULL, "LineOut Source"}, 752 {"LOR Disable HFR", NULL, "LineOut Source"}, 753 754 {"LOL Enable", NULL, "LOL Disable HFL"}, 755 {"LOR Enable", NULL, "LOR Disable HFR"}, 756 757 {"LineOut Left", NULL, "LOL Enable"}, 758 {"LineOut Right", NULL, "LOR Enable"}, 759 760 /* Vibrator path */ 761 762 {"DA_IN5", NULL, "ab8500_0p"}, 763 {"DA_IN5", NULL, "Main Supply"}, 764 {"DA5 Channel Volume", NULL, "DA_IN5"}, 765 {"DA_IN6", NULL, "ab8500_0p"}, 766 {"DA_IN6", NULL, "Main Supply"}, 767 {"DA6 Channel Volume", NULL, "DA_IN6"}, 768 769 {"VIB1 DAC", NULL, "DA5 Channel Volume"}, 770 {"VIB2 DAC", NULL, "DA6 Channel Volume"}, 771 772 {"Vibra 1 Controller", "Audio Path", "VIB1 DAC"}, 773 {"Vibra 2 Controller", "Audio Path", "VIB2 DAC"}, 774 {"Vibra 1 Controller", "PWM Generator", "PWMGEN1"}, 775 {"Vibra 2 Controller", "PWM Generator", "PWMGEN2"}, 776 777 {"VIB1 Enable", NULL, "Vibra 1 Controller"}, 778 {"VIB2 Enable", NULL, "Vibra 2 Controller"}, 779 780 {"Vibra 1", NULL, "VIB1 Enable"}, 781 {"Vibra 2", NULL, "VIB2 Enable"}, 782 783 784 /* Mic 2 */ 785 786 {"MIC2 V-AMICx Enable", NULL, "Mic 2"}, 787 788 /* LineIn */ 789 {"LINL Mute", NULL, "LineIn Left"}, 790 {"LINR Mute", NULL, "LineIn Right"}, 791 792 {"LINL Enable", NULL, "LINL Mute"}, 793 {"LINR Enable", NULL, "LINR Mute"}, 794 795 /* LineIn, Mic 2 */ 796 {"Mic 2 or LINR Select", "LineIn Right", "LINR Enable"}, 797 {"Mic 2 or LINR Select", "Mic 2", "MIC2 V-AMICx Enable"}, 798 799 {"LINL ADC", NULL, "LINL Enable"}, 800 {"LINR ADC", NULL, "Mic 2 or LINR Select"}, 801 802 {"AD1 Source Select", "LineIn Left", "LINL ADC"}, 803 {"AD2 Source Select", "LineIn Right", "LINR ADC"}, 804 805 {"AD1 Channel Volume", NULL, "AD1 Source Select"}, 806 {"AD2 Channel Volume", NULL, "AD2 Source Select"}, 807 808 {"AD1 Channel Volume", NULL, "AD12 Enable"}, 809 {"AD2 Channel Volume", NULL, "AD12 Enable"}, 810 811 {"ab8500_0c", NULL, "AD_OUT1"}, 812 {"AD_OUT1", NULL, "Main Supply"}, 813 {"AD_OUT1", NULL, "AD1 Channel Volume"}, 814 {"ab8500_0c", NULL, "AD_OUT2"}, 815 {"AD_OUT2", NULL, "Main Supply"}, 816 {"AD_OUT2", NULL, "AD2 Channel Volume"}, 817 818 /* Mic 1 */ 819 820 {"MIC1 Mute", NULL, "Mic 1"}, 821 822 {"MIC1A V-AMICx Enable", NULL, "MIC1 Mute"}, 823 {"MIC1B V-AMICx Enable", NULL, "MIC1 Mute"}, 824 825 {"Mic 1a or 1b Select", "Mic 1a", "MIC1A V-AMICx Enable"}, 826 {"Mic 1a or 1b Select", "Mic 1b", "MIC1B V-AMICx Enable"}, 827 828 {"MIC1 ADC", NULL, "Mic 1a or 1b Select"}, 829 830 {"AD3 Source Select", "Mic 1", "MIC1 ADC"}, 831 832 {"AD3 Channel Volume", NULL, "AD3 Source Select"}, 833 {"AD3 Channel Volume", NULL, "AD34 Enable"}, 834 835 {"ab8500_0c", NULL, "AD_OUT3"}, 836 {"AD_OUT3", NULL, "Main Supply"}, 837 {"AD_OUT3", NULL, "AD3 Channel Volume"}, 838 839 /* HD Capture path */ 840 841 {"AD5 Source Select", "Mic 2", "LINR ADC"}, 842 {"AD6 Source Select", "Mic 1", "MIC1 ADC"}, 843 844 {"AD5 Channel Volume", NULL, "AD5 Source Select"}, 845 {"AD6 Channel Volume", NULL, "AD6 Source Select"}, 846 {"AD5 Channel Volume", NULL, "AD5768 Enable"}, 847 {"AD6 Channel Volume", NULL, "AD5768 Enable"}, 848 849 {"ab8500_0c", NULL, "AD_OUT57"}, 850 {"AD_OUT57", NULL, "Main Supply"}, 851 {"AD_OUT57", NULL, "AD5 Channel Volume"}, 852 {"ab8500_0c", NULL, "AD_OUT68"}, 853 {"AD_OUT68", NULL, "Main Supply"}, 854 {"AD_OUT68", NULL, "AD6 Channel Volume"}, 855 856 /* Digital Microphone path */ 857 858 {"DMic 1", NULL, "V-DMIC"}, 859 {"DMic 2", NULL, "V-DMIC"}, 860 {"DMic 3", NULL, "V-DMIC"}, 861 {"DMic 4", NULL, "V-DMIC"}, 862 {"DMic 5", NULL, "V-DMIC"}, 863 {"DMic 6", NULL, "V-DMIC"}, 864 865 {"DMIC1", NULL, "DMic 1"}, 866 {"DMIC2", NULL, "DMic 2"}, 867 {"DMIC3", NULL, "DMic 3"}, 868 {"DMIC4", NULL, "DMic 4"}, 869 {"DMIC5", NULL, "DMic 5"}, 870 {"DMIC6", NULL, "DMic 6"}, 871 872 {"AD1 Source Select", "DMic 1", "DMIC1"}, 873 {"AD2 Source Select", "DMic 2", "DMIC2"}, 874 {"AD3 Source Select", "DMic 3", "DMIC3"}, 875 {"AD5 Source Select", "DMic 5", "DMIC5"}, 876 {"AD6 Source Select", "DMic 6", "DMIC6"}, 877 878 {"AD4 Channel Volume", NULL, "DMIC4"}, 879 {"AD4 Channel Volume", NULL, "AD34 Enable"}, 880 881 {"ab8500_0c", NULL, "AD_OUT4"}, 882 {"AD_OUT4", NULL, "Main Supply"}, 883 {"AD_OUT4", NULL, "AD4 Channel Volume"}, 884 885 /* LineIn Bypass path */ 886 887 {"LINL to HSL Volume", NULL, "LINL Enable"}, 888 {"LINR to HSR Volume", NULL, "LINR Enable"}, 889 890 {"HSL DAC Driver", NULL, "LINL to HSL Volume"}, 891 {"HSR DAC Driver", NULL, "LINR to HSR Volume"}, 892 893 /* ANC path (Acoustic Noise Cancellation) */ 894 895 {"ANC Source", "Mic 2 / DMic 5", "AD5 Channel Volume"}, 896 {"ANC Source", "Mic 1 / DMic 6", "AD6 Channel Volume"}, 897 898 {"ANC", "Switch", "ANC Source"}, 899 900 {"Speaker Left Source", "ANC", "ANC"}, 901 {"Speaker Right Source", "ANC", "ANC"}, 902 {"ANC to Earpiece", "Switch", "ANC"}, 903 904 {"HSL Digital Volume", NULL, "ANC to Earpiece"}, 905 906 /* Sidetone Filter path */ 907 908 {"Sidetone Left Source", "LineIn Left", "AD1 Channel Volume"}, 909 {"Sidetone Left Source", "LineIn Right", "AD2 Channel Volume"}, 910 {"Sidetone Left Source", "Mic 1", "AD3 Channel Volume"}, 911 {"Sidetone Left Source", "Headset Left", "DA_IN1"}, 912 {"Sidetone Right Source", "LineIn Right", "AD2 Channel Volume"}, 913 {"Sidetone Right Source", "Mic 1", "AD3 Channel Volume"}, 914 {"Sidetone Right Source", "DMic 4", "AD4 Channel Volume"}, 915 {"Sidetone Right Source", "Headset Right", "DA_IN2"}, 916 917 {"STFIR1 Control", NULL, "Sidetone Left Source"}, 918 {"STFIR2 Control", NULL, "Sidetone Right Source"}, 919 920 {"STFIR1 Volume", NULL, "STFIR1 Control"}, 921 {"STFIR2 Volume", NULL, "STFIR2 Control"}, 922 923 {"DA1 Enable", NULL, "STFIR1 Volume"}, 924 {"DA2 Enable", NULL, "STFIR2 Volume"}, 925 }; 926 927 static const struct snd_soc_dapm_route ab8500_dapm_routes_mic1a_vamicx[] = { 928 {"MIC1A V-AMICx Enable", NULL, "V-AMIC1"}, 929 {"MIC1A V-AMICx Enable", NULL, "V-AMIC2"}, 930 }; 931 932 static const struct snd_soc_dapm_route ab8500_dapm_routes_mic1b_vamicx[] = { 933 {"MIC1B V-AMICx Enable", NULL, "V-AMIC1"}, 934 {"MIC1B V-AMICx Enable", NULL, "V-AMIC2"}, 935 }; 936 937 static const struct snd_soc_dapm_route ab8500_dapm_routes_mic2_vamicx[] = { 938 {"MIC2 V-AMICx Enable", NULL, "V-AMIC1"}, 939 {"MIC2 V-AMICx Enable", NULL, "V-AMIC2"}, 940 }; 941 942 /* 943 * Controls - Non-DAPM ASoC 944 */ 945 946 static DECLARE_TLV_DB_SCALE(adx_dig_gain_tlv, -3200, 100, 1); 947 /* -32dB = Mute */ 948 949 static DECLARE_TLV_DB_SCALE(dax_dig_gain_tlv, -6300, 100, 1); 950 /* -63dB = Mute */ 951 952 static DECLARE_TLV_DB_SCALE(hs_ear_dig_gain_tlv, -100, 100, 1); 953 /* -1dB = Mute */ 954 955 static const DECLARE_TLV_DB_RANGE(hs_gain_tlv, 956 0, 3, TLV_DB_SCALE_ITEM(-3200, 400, 0), 957 4, 15, TLV_DB_SCALE_ITEM(-1800, 200, 0) 958 ); 959 960 static DECLARE_TLV_DB_SCALE(mic_gain_tlv, 0, 100, 0); 961 962 static DECLARE_TLV_DB_SCALE(lin_gain_tlv, -1000, 200, 0); 963 964 static DECLARE_TLV_DB_SCALE(lin2hs_gain_tlv, -3800, 200, 1); 965 /* -38dB = Mute */ 966 967 static const char * const enum_hsfadspeed[] = {"2ms", "0.5ms", "10.6ms", 968 "5ms"}; 969 static SOC_ENUM_SINGLE_DECL(soc_enum_hsfadspeed, 970 AB8500_DIGMICCONF, AB8500_DIGMICCONF_HSFADSPEED, enum_hsfadspeed); 971 972 static const char * const enum_envdetthre[] = { 973 "250mV", "300mV", "350mV", "400mV", 974 "450mV", "500mV", "550mV", "600mV", 975 "650mV", "700mV", "750mV", "800mV", 976 "850mV", "900mV", "950mV", "1.00V" }; 977 static SOC_ENUM_SINGLE_DECL(soc_enum_envdeththre, 978 AB8500_ENVCPCONF, AB8500_ENVCPCONF_ENVDETHTHRE, enum_envdetthre); 979 static SOC_ENUM_SINGLE_DECL(soc_enum_envdetlthre, 980 AB8500_ENVCPCONF, AB8500_ENVCPCONF_ENVDETLTHRE, enum_envdetthre); 981 static const char * const enum_envdettime[] = { 982 "26.6us", "53.2us", "106us", "213us", 983 "426us", "851us", "1.70ms", "3.40ms", 984 "6.81ms", "13.6ms", "27.2ms", "54.5ms", 985 "109ms", "218ms", "436ms", "872ms" }; 986 static SOC_ENUM_SINGLE_DECL(soc_enum_envdettime, 987 AB8500_SIGENVCONF, AB8500_SIGENVCONF_ENVDETTIME, enum_envdettime); 988 989 static const char * const enum_sinc31[] = {"Sinc 3", "Sinc 1"}; 990 static SOC_ENUM_SINGLE_DECL(soc_enum_hsesinc, AB8500_HSLEARDIGGAIN, 991 AB8500_HSLEARDIGGAIN_HSSINC1, enum_sinc31); 992 993 static const char * const enum_fadespeed[] = {"1ms", "4ms", "8ms", "16ms"}; 994 static SOC_ENUM_SINGLE_DECL(soc_enum_fadespeed, AB8500_HSRDIGGAIN, 995 AB8500_HSRDIGGAIN_FADESPEED, enum_fadespeed); 996 997 /* Earpiece */ 998 999 static const char * const enum_lowpow[] = {"Normal", "Low Power"}; 1000 static SOC_ENUM_SINGLE_DECL(soc_enum_eardaclowpow, AB8500_ANACONF1, 1001 AB8500_ANACONF1_EARDACLOWPOW, enum_lowpow); 1002 static SOC_ENUM_SINGLE_DECL(soc_enum_eardrvlowpow, AB8500_ANACONF1, 1003 AB8500_ANACONF1_EARDRVLOWPOW, enum_lowpow); 1004 1005 static const char * const enum_av_mode[] = {"Audio", "Voice"}; 1006 static SOC_ENUM_DOUBLE_DECL(soc_enum_ad12voice, AB8500_ADFILTCONF, 1007 AB8500_ADFILTCONF_AD1VOICE, AB8500_ADFILTCONF_AD2VOICE, enum_av_mode); 1008 static SOC_ENUM_DOUBLE_DECL(soc_enum_ad34voice, AB8500_ADFILTCONF, 1009 AB8500_ADFILTCONF_AD3VOICE, AB8500_ADFILTCONF_AD4VOICE, enum_av_mode); 1010 1011 /* DA */ 1012 1013 static SOC_ENUM_SINGLE_DECL(soc_enum_da12voice, 1014 AB8500_DASLOTCONF1, AB8500_DASLOTCONF1_DA12VOICE, 1015 enum_av_mode); 1016 static SOC_ENUM_SINGLE_DECL(soc_enum_da34voice, 1017 AB8500_DASLOTCONF3, AB8500_DASLOTCONF3_DA34VOICE, 1018 enum_av_mode); 1019 static SOC_ENUM_SINGLE_DECL(soc_enum_da56voice, 1020 AB8500_DASLOTCONF5, AB8500_DASLOTCONF5_DA56VOICE, 1021 enum_av_mode); 1022 1023 static const char * const enum_da2hslr[] = {"Sidetone", "Audio Path"}; 1024 static SOC_ENUM_DOUBLE_DECL(soc_enum_da2hslr, AB8500_DIGMULTCONF1, 1025 AB8500_DIGMULTCONF1_DATOHSLEN, 1026 AB8500_DIGMULTCONF1_DATOHSREN, enum_da2hslr); 1027 1028 static const char * const enum_sinc53[] = {"Sinc 5", "Sinc 3"}; 1029 static SOC_ENUM_DOUBLE_DECL(soc_enum_dmic12sinc, AB8500_DMICFILTCONF, 1030 AB8500_DMICFILTCONF_DMIC1SINC3, 1031 AB8500_DMICFILTCONF_DMIC2SINC3, enum_sinc53); 1032 static SOC_ENUM_DOUBLE_DECL(soc_enum_dmic34sinc, AB8500_DMICFILTCONF, 1033 AB8500_DMICFILTCONF_DMIC3SINC3, 1034 AB8500_DMICFILTCONF_DMIC4SINC3, enum_sinc53); 1035 static SOC_ENUM_DOUBLE_DECL(soc_enum_dmic56sinc, AB8500_DMICFILTCONF, 1036 AB8500_DMICFILTCONF_DMIC5SINC3, 1037 AB8500_DMICFILTCONF_DMIC6SINC3, enum_sinc53); 1038 1039 /* Digital interface - DA from slot mapping */ 1040 static const char * const enum_da_from_slot_map[] = {"SLOT0", 1041 "SLOT1", 1042 "SLOT2", 1043 "SLOT3", 1044 "SLOT4", 1045 "SLOT5", 1046 "SLOT6", 1047 "SLOT7", 1048 "SLOT8", 1049 "SLOT9", 1050 "SLOT10", 1051 "SLOT11", 1052 "SLOT12", 1053 "SLOT13", 1054 "SLOT14", 1055 "SLOT15", 1056 "SLOT16", 1057 "SLOT17", 1058 "SLOT18", 1059 "SLOT19", 1060 "SLOT20", 1061 "SLOT21", 1062 "SLOT22", 1063 "SLOT23", 1064 "SLOT24", 1065 "SLOT25", 1066 "SLOT26", 1067 "SLOT27", 1068 "SLOT28", 1069 "SLOT29", 1070 "SLOT30", 1071 "SLOT31"}; 1072 static SOC_ENUM_SINGLE_DECL(soc_enum_da1slotmap, 1073 AB8500_DASLOTCONF1, AB8500_DASLOTCONFX_SLTODAX_SHIFT, 1074 enum_da_from_slot_map); 1075 static SOC_ENUM_SINGLE_DECL(soc_enum_da2slotmap, 1076 AB8500_DASLOTCONF2, AB8500_DASLOTCONFX_SLTODAX_SHIFT, 1077 enum_da_from_slot_map); 1078 static SOC_ENUM_SINGLE_DECL(soc_enum_da3slotmap, 1079 AB8500_DASLOTCONF3, AB8500_DASLOTCONFX_SLTODAX_SHIFT, 1080 enum_da_from_slot_map); 1081 static SOC_ENUM_SINGLE_DECL(soc_enum_da4slotmap, 1082 AB8500_DASLOTCONF4, AB8500_DASLOTCONFX_SLTODAX_SHIFT, 1083 enum_da_from_slot_map); 1084 static SOC_ENUM_SINGLE_DECL(soc_enum_da5slotmap, 1085 AB8500_DASLOTCONF5, AB8500_DASLOTCONFX_SLTODAX_SHIFT, 1086 enum_da_from_slot_map); 1087 static SOC_ENUM_SINGLE_DECL(soc_enum_da6slotmap, 1088 AB8500_DASLOTCONF6, AB8500_DASLOTCONFX_SLTODAX_SHIFT, 1089 enum_da_from_slot_map); 1090 static SOC_ENUM_SINGLE_DECL(soc_enum_da7slotmap, 1091 AB8500_DASLOTCONF7, AB8500_DASLOTCONFX_SLTODAX_SHIFT, 1092 enum_da_from_slot_map); 1093 static SOC_ENUM_SINGLE_DECL(soc_enum_da8slotmap, 1094 AB8500_DASLOTCONF8, AB8500_DASLOTCONFX_SLTODAX_SHIFT, 1095 enum_da_from_slot_map); 1096 1097 /* Digital interface - AD to slot mapping */ 1098 static const char * const enum_ad_to_slot_map[] = {"AD_OUT1", 1099 "AD_OUT2", 1100 "AD_OUT3", 1101 "AD_OUT4", 1102 "AD_OUT5", 1103 "AD_OUT6", 1104 "AD_OUT7", 1105 "AD_OUT8", 1106 "zeroes", 1107 "zeroes", 1108 "zeroes", 1109 "zeroes", 1110 "tristate", 1111 "tristate", 1112 "tristate", 1113 "tristate"}; 1114 static SOC_ENUM_SINGLE_DECL(soc_enum_adslot0map, 1115 AB8500_ADSLOTSEL1, AB8500_ADSLOTSELX_EVEN_SHIFT, 1116 enum_ad_to_slot_map); 1117 static SOC_ENUM_SINGLE_DECL(soc_enum_adslot1map, 1118 AB8500_ADSLOTSEL1, AB8500_ADSLOTSELX_ODD_SHIFT, 1119 enum_ad_to_slot_map); 1120 static SOC_ENUM_SINGLE_DECL(soc_enum_adslot2map, 1121 AB8500_ADSLOTSEL2, AB8500_ADSLOTSELX_EVEN_SHIFT, 1122 enum_ad_to_slot_map); 1123 static SOC_ENUM_SINGLE_DECL(soc_enum_adslot3map, 1124 AB8500_ADSLOTSEL2, AB8500_ADSLOTSELX_ODD_SHIFT, 1125 enum_ad_to_slot_map); 1126 static SOC_ENUM_SINGLE_DECL(soc_enum_adslot4map, 1127 AB8500_ADSLOTSEL3, AB8500_ADSLOTSELX_EVEN_SHIFT, 1128 enum_ad_to_slot_map); 1129 static SOC_ENUM_SINGLE_DECL(soc_enum_adslot5map, 1130 AB8500_ADSLOTSEL3, AB8500_ADSLOTSELX_ODD_SHIFT, 1131 enum_ad_to_slot_map); 1132 static SOC_ENUM_SINGLE_DECL(soc_enum_adslot6map, 1133 AB8500_ADSLOTSEL4, AB8500_ADSLOTSELX_EVEN_SHIFT, 1134 enum_ad_to_slot_map); 1135 static SOC_ENUM_SINGLE_DECL(soc_enum_adslot7map, 1136 AB8500_ADSLOTSEL4, AB8500_ADSLOTSELX_ODD_SHIFT, 1137 enum_ad_to_slot_map); 1138 static SOC_ENUM_SINGLE_DECL(soc_enum_adslot8map, 1139 AB8500_ADSLOTSEL5, AB8500_ADSLOTSELX_EVEN_SHIFT, 1140 enum_ad_to_slot_map); 1141 static SOC_ENUM_SINGLE_DECL(soc_enum_adslot9map, 1142 AB8500_ADSLOTSEL5, AB8500_ADSLOTSELX_ODD_SHIFT, 1143 enum_ad_to_slot_map); 1144 static SOC_ENUM_SINGLE_DECL(soc_enum_adslot10map, 1145 AB8500_ADSLOTSEL6, AB8500_ADSLOTSELX_EVEN_SHIFT, 1146 enum_ad_to_slot_map); 1147 static SOC_ENUM_SINGLE_DECL(soc_enum_adslot11map, 1148 AB8500_ADSLOTSEL6, AB8500_ADSLOTSELX_ODD_SHIFT, 1149 enum_ad_to_slot_map); 1150 static SOC_ENUM_SINGLE_DECL(soc_enum_adslot12map, 1151 AB8500_ADSLOTSEL7, AB8500_ADSLOTSELX_EVEN_SHIFT, 1152 enum_ad_to_slot_map); 1153 static SOC_ENUM_SINGLE_DECL(soc_enum_adslot13map, 1154 AB8500_ADSLOTSEL7, AB8500_ADSLOTSELX_ODD_SHIFT, 1155 enum_ad_to_slot_map); 1156 static SOC_ENUM_SINGLE_DECL(soc_enum_adslot14map, 1157 AB8500_ADSLOTSEL8, AB8500_ADSLOTSELX_EVEN_SHIFT, 1158 enum_ad_to_slot_map); 1159 static SOC_ENUM_SINGLE_DECL(soc_enum_adslot15map, 1160 AB8500_ADSLOTSEL8, AB8500_ADSLOTSELX_ODD_SHIFT, 1161 enum_ad_to_slot_map); 1162 static SOC_ENUM_SINGLE_DECL(soc_enum_adslot16map, 1163 AB8500_ADSLOTSEL9, AB8500_ADSLOTSELX_EVEN_SHIFT, 1164 enum_ad_to_slot_map); 1165 static SOC_ENUM_SINGLE_DECL(soc_enum_adslot17map, 1166 AB8500_ADSLOTSEL9, AB8500_ADSLOTSELX_ODD_SHIFT, 1167 enum_ad_to_slot_map); 1168 static SOC_ENUM_SINGLE_DECL(soc_enum_adslot18map, 1169 AB8500_ADSLOTSEL10, AB8500_ADSLOTSELX_EVEN_SHIFT, 1170 enum_ad_to_slot_map); 1171 static SOC_ENUM_SINGLE_DECL(soc_enum_adslot19map, 1172 AB8500_ADSLOTSEL10, AB8500_ADSLOTSELX_ODD_SHIFT, 1173 enum_ad_to_slot_map); 1174 static SOC_ENUM_SINGLE_DECL(soc_enum_adslot20map, 1175 AB8500_ADSLOTSEL11, AB8500_ADSLOTSELX_EVEN_SHIFT, 1176 enum_ad_to_slot_map); 1177 static SOC_ENUM_SINGLE_DECL(soc_enum_adslot21map, 1178 AB8500_ADSLOTSEL11, AB8500_ADSLOTSELX_ODD_SHIFT, 1179 enum_ad_to_slot_map); 1180 static SOC_ENUM_SINGLE_DECL(soc_enum_adslot22map, 1181 AB8500_ADSLOTSEL12, AB8500_ADSLOTSELX_EVEN_SHIFT, 1182 enum_ad_to_slot_map); 1183 static SOC_ENUM_SINGLE_DECL(soc_enum_adslot23map, 1184 AB8500_ADSLOTSEL12, AB8500_ADSLOTSELX_ODD_SHIFT, 1185 enum_ad_to_slot_map); 1186 static SOC_ENUM_SINGLE_DECL(soc_enum_adslot24map, 1187 AB8500_ADSLOTSEL13, AB8500_ADSLOTSELX_EVEN_SHIFT, 1188 enum_ad_to_slot_map); 1189 static SOC_ENUM_SINGLE_DECL(soc_enum_adslot25map, 1190 AB8500_ADSLOTSEL13, AB8500_ADSLOTSELX_ODD_SHIFT, 1191 enum_ad_to_slot_map); 1192 static SOC_ENUM_SINGLE_DECL(soc_enum_adslot26map, 1193 AB8500_ADSLOTSEL14, AB8500_ADSLOTSELX_EVEN_SHIFT, 1194 enum_ad_to_slot_map); 1195 static SOC_ENUM_SINGLE_DECL(soc_enum_adslot27map, 1196 AB8500_ADSLOTSEL14, AB8500_ADSLOTSELX_ODD_SHIFT, 1197 enum_ad_to_slot_map); 1198 static SOC_ENUM_SINGLE_DECL(soc_enum_adslot28map, 1199 AB8500_ADSLOTSEL15, AB8500_ADSLOTSELX_EVEN_SHIFT, 1200 enum_ad_to_slot_map); 1201 static SOC_ENUM_SINGLE_DECL(soc_enum_adslot29map, 1202 AB8500_ADSLOTSEL15, AB8500_ADSLOTSELX_ODD_SHIFT, 1203 enum_ad_to_slot_map); 1204 static SOC_ENUM_SINGLE_DECL(soc_enum_adslot30map, 1205 AB8500_ADSLOTSEL16, AB8500_ADSLOTSELX_EVEN_SHIFT, 1206 enum_ad_to_slot_map); 1207 static SOC_ENUM_SINGLE_DECL(soc_enum_adslot31map, 1208 AB8500_ADSLOTSEL16, AB8500_ADSLOTSELX_ODD_SHIFT, 1209 enum_ad_to_slot_map); 1210 1211 /* Digital interface - Burst mode */ 1212 static const char * const enum_mask[] = {"Unmasked", "Masked"}; 1213 static SOC_ENUM_SINGLE_DECL(soc_enum_bfifomask, 1214 AB8500_FIFOCONF1, AB8500_FIFOCONF1_BFIFOMASK, 1215 enum_mask); 1216 static const char * const enum_bitclk0[] = {"19_2_MHz", "38_4_MHz"}; 1217 static SOC_ENUM_SINGLE_DECL(soc_enum_bfifo19m2, 1218 AB8500_FIFOCONF1, AB8500_FIFOCONF1_BFIFO19M2, 1219 enum_bitclk0); 1220 static const char * const enum_slavemaster[] = {"Slave", "Master"}; 1221 static SOC_ENUM_SINGLE_DECL(soc_enum_bfifomast, 1222 AB8500_FIFOCONF3, AB8500_FIFOCONF3_BFIFOMAST_SHIFT, 1223 enum_slavemaster); 1224 1225 /* ANC */ 1226 1227 static struct snd_kcontrol_new ab8500_ctrls[] = { 1228 /* Charge pump */ 1229 SOC_ENUM("Charge Pump High Threshold For Low Voltage", 1230 soc_enum_envdeththre), 1231 SOC_ENUM("Charge Pump Low Threshold For Low Voltage", 1232 soc_enum_envdetlthre), 1233 SOC_SINGLE("Charge Pump Envelope Detection Switch", 1234 AB8500_SIGENVCONF, AB8500_SIGENVCONF_ENVDETCPEN, 1235 1, 0), 1236 SOC_ENUM("Charge Pump Envelope Detection Decay Time", 1237 soc_enum_envdettime), 1238 1239 /* Headset */ 1240 SOC_ENUM("Headset Mode", soc_enum_da12voice), 1241 SOC_SINGLE("Headset High Pass Switch", 1242 AB8500_ANACONF1, AB8500_ANACONF1_HSHPEN, 1243 1, 0), 1244 SOC_SINGLE("Headset Low Power Switch", 1245 AB8500_ANACONF1, AB8500_ANACONF1_HSLOWPOW, 1246 1, 0), 1247 SOC_SINGLE("Headset DAC Low Power Switch", 1248 AB8500_ANACONF1, AB8500_ANACONF1_DACLOWPOW1, 1249 1, 0), 1250 SOC_SINGLE("Headset DAC Drv Low Power Switch", 1251 AB8500_ANACONF1, AB8500_ANACONF1_DACLOWPOW0, 1252 1, 0), 1253 SOC_ENUM("Headset Fade Speed", soc_enum_hsfadspeed), 1254 SOC_ENUM("Headset Source", soc_enum_da2hslr), 1255 SOC_ENUM("Headset Filter", soc_enum_hsesinc), 1256 SOC_DOUBLE_R_TLV("Headset Master Volume", 1257 AB8500_DADIGGAIN1, AB8500_DADIGGAIN2, 1258 0, AB8500_DADIGGAINX_DAXGAIN_MAX, 1, dax_dig_gain_tlv), 1259 SOC_DOUBLE_R_TLV("Headset Digital Volume", 1260 AB8500_HSLEARDIGGAIN, AB8500_HSRDIGGAIN, 1261 0, AB8500_HSLEARDIGGAIN_HSLDGAIN_MAX, 1, hs_ear_dig_gain_tlv), 1262 SOC_DOUBLE_TLV("Headset Volume", 1263 AB8500_ANAGAIN3, 1264 AB8500_ANAGAIN3_HSLGAIN, AB8500_ANAGAIN3_HSRGAIN, 1265 AB8500_ANAGAIN3_HSXGAIN_MAX, 1, hs_gain_tlv), 1266 1267 /* Earpiece */ 1268 SOC_ENUM("Earpiece DAC Mode", 1269 soc_enum_eardaclowpow), 1270 SOC_ENUM("Earpiece DAC Drv Mode", 1271 soc_enum_eardrvlowpow), 1272 1273 /* HandsFree */ 1274 SOC_ENUM("HF Mode", soc_enum_da34voice), 1275 SOC_SINGLE("HF and Headset Swap Switch", 1276 AB8500_DASLOTCONF1, AB8500_DASLOTCONF1_SWAPDA12_34, 1277 1, 0), 1278 SOC_DOUBLE("HF Low EMI Mode Switch", 1279 AB8500_CLASSDCONF1, 1280 AB8500_CLASSDCONF1_HFLSWAPEN, AB8500_CLASSDCONF1_HFRSWAPEN, 1281 1, 0), 1282 SOC_DOUBLE("HF FIR Bypass Switch", 1283 AB8500_CLASSDCONF2, 1284 AB8500_CLASSDCONF2_FIRBYP0, AB8500_CLASSDCONF2_FIRBYP1, 1285 1, 0), 1286 SOC_DOUBLE("HF High Volume Switch", 1287 AB8500_CLASSDCONF2, 1288 AB8500_CLASSDCONF2_HIGHVOLEN0, AB8500_CLASSDCONF2_HIGHVOLEN1, 1289 1, 0), 1290 SOC_SINGLE("HF L and R Bridge Switch", 1291 AB8500_CLASSDCONF1, AB8500_CLASSDCONF1_PARLHF, 1292 1, 0), 1293 SOC_DOUBLE_R_TLV("HF Master Volume", 1294 AB8500_DADIGGAIN3, AB8500_DADIGGAIN4, 1295 0, AB8500_DADIGGAINX_DAXGAIN_MAX, 1, dax_dig_gain_tlv), 1296 1297 /* Vibra */ 1298 SOC_DOUBLE("Vibra High Volume Switch", 1299 AB8500_CLASSDCONF2, 1300 AB8500_CLASSDCONF2_HIGHVOLEN2, AB8500_CLASSDCONF2_HIGHVOLEN3, 1301 1, 0), 1302 SOC_DOUBLE("Vibra Low EMI Mode Switch", 1303 AB8500_CLASSDCONF1, 1304 AB8500_CLASSDCONF1_VIB1SWAPEN, AB8500_CLASSDCONF1_VIB2SWAPEN, 1305 1, 0), 1306 SOC_DOUBLE("Vibra FIR Bypass Switch", 1307 AB8500_CLASSDCONF2, 1308 AB8500_CLASSDCONF2_FIRBYP2, AB8500_CLASSDCONF2_FIRBYP3, 1309 1, 0), 1310 SOC_ENUM("Vibra Mode", soc_enum_da56voice), 1311 SOC_DOUBLE_R("Vibra PWM Duty Cycle N", 1312 AB8500_PWMGENCONF3, AB8500_PWMGENCONF5, 1313 AB8500_PWMGENCONFX_PWMVIBXDUTCYC, 1314 AB8500_PWMGENCONFX_PWMVIBXDUTCYC_MAX, 0), 1315 SOC_DOUBLE_R("Vibra PWM Duty Cycle P", 1316 AB8500_PWMGENCONF2, AB8500_PWMGENCONF4, 1317 AB8500_PWMGENCONFX_PWMVIBXDUTCYC, 1318 AB8500_PWMGENCONFX_PWMVIBXDUTCYC_MAX, 0), 1319 SOC_SINGLE("Vibra 1 and 2 Bridge Switch", 1320 AB8500_CLASSDCONF1, AB8500_CLASSDCONF1_PARLVIB, 1321 1, 0), 1322 SOC_DOUBLE_R_TLV("Vibra Master Volume", 1323 AB8500_DADIGGAIN5, AB8500_DADIGGAIN6, 1324 0, AB8500_DADIGGAINX_DAXGAIN_MAX, 1, dax_dig_gain_tlv), 1325 1326 /* HandsFree, Vibra */ 1327 SOC_SINGLE("ClassD High Pass Volume", 1328 AB8500_CLASSDCONF3, AB8500_CLASSDCONF3_DITHHPGAIN, 1329 AB8500_CLASSDCONF3_DITHHPGAIN_MAX, 0), 1330 SOC_SINGLE("ClassD White Volume", 1331 AB8500_CLASSDCONF3, AB8500_CLASSDCONF3_DITHWGAIN, 1332 AB8500_CLASSDCONF3_DITHWGAIN_MAX, 0), 1333 1334 /* Mic 1, Mic 2, LineIn */ 1335 SOC_DOUBLE_R_TLV("Mic Master Volume", 1336 AB8500_ADDIGGAIN3, AB8500_ADDIGGAIN4, 1337 0, AB8500_ADDIGGAINX_ADXGAIN_MAX, 1, adx_dig_gain_tlv), 1338 1339 /* Mic 1 */ 1340 SOC_SINGLE_TLV("Mic 1", 1341 AB8500_ANAGAIN1, 1342 AB8500_ANAGAINX_MICXGAIN, 1343 AB8500_ANAGAINX_MICXGAIN_MAX, 0, mic_gain_tlv), 1344 SOC_SINGLE("Mic 1 Low Power Switch", 1345 AB8500_ANAGAIN1, AB8500_ANAGAINX_LOWPOWMICX, 1346 1, 0), 1347 1348 /* Mic 2 */ 1349 SOC_DOUBLE("Mic High Pass Switch", 1350 AB8500_ADFILTCONF, 1351 AB8500_ADFILTCONF_AD3NH, AB8500_ADFILTCONF_AD4NH, 1352 1, 1), 1353 SOC_ENUM("Mic Mode", soc_enum_ad34voice), 1354 SOC_ENUM("Mic Filter", soc_enum_dmic34sinc), 1355 SOC_SINGLE_TLV("Mic 2", 1356 AB8500_ANAGAIN2, 1357 AB8500_ANAGAINX_MICXGAIN, 1358 AB8500_ANAGAINX_MICXGAIN_MAX, 0, mic_gain_tlv), 1359 SOC_SINGLE("Mic 2 Low Power Switch", 1360 AB8500_ANAGAIN2, AB8500_ANAGAINX_LOWPOWMICX, 1361 1, 0), 1362 1363 /* LineIn */ 1364 SOC_DOUBLE("LineIn High Pass Switch", 1365 AB8500_ADFILTCONF, 1366 AB8500_ADFILTCONF_AD1NH, AB8500_ADFILTCONF_AD2NH, 1367 1, 1), 1368 SOC_ENUM("LineIn Filter", soc_enum_dmic12sinc), 1369 SOC_ENUM("LineIn Mode", soc_enum_ad12voice), 1370 SOC_DOUBLE_R_TLV("LineIn Master Volume", 1371 AB8500_ADDIGGAIN1, AB8500_ADDIGGAIN2, 1372 0, AB8500_ADDIGGAINX_ADXGAIN_MAX, 1, adx_dig_gain_tlv), 1373 SOC_DOUBLE_TLV("LineIn", 1374 AB8500_ANAGAIN4, 1375 AB8500_ANAGAIN4_LINLGAIN, AB8500_ANAGAIN4_LINRGAIN, 1376 AB8500_ANAGAIN4_LINXGAIN_MAX, 0, lin_gain_tlv), 1377 SOC_DOUBLE_R_TLV("LineIn to Headset Volume", 1378 AB8500_DIGLINHSLGAIN, AB8500_DIGLINHSRGAIN, 1379 AB8500_DIGLINHSXGAIN_LINTOHSXGAIN, 1380 AB8500_DIGLINHSXGAIN_LINTOHSXGAIN_MAX, 1381 1, lin2hs_gain_tlv), 1382 1383 /* DMic */ 1384 SOC_ENUM("DMic Filter", soc_enum_dmic56sinc), 1385 SOC_DOUBLE_R_TLV("DMic Master Volume", 1386 AB8500_ADDIGGAIN5, AB8500_ADDIGGAIN6, 1387 0, AB8500_ADDIGGAINX_ADXGAIN_MAX, 1, adx_dig_gain_tlv), 1388 1389 /* Digital gains */ 1390 SOC_ENUM("Digital Gain Fade Speed", soc_enum_fadespeed), 1391 1392 /* Analog loopback */ 1393 SOC_DOUBLE_R_TLV("Analog Loopback Volume", 1394 AB8500_ADDIGLOOPGAIN1, AB8500_ADDIGLOOPGAIN2, 1395 0, AB8500_ADDIGLOOPGAINX_ADXLBGAIN_MAX, 1, dax_dig_gain_tlv), 1396 1397 /* Digital interface - DA from slot mapping */ 1398 SOC_ENUM("Digital Interface DA 1 From Slot Map", soc_enum_da1slotmap), 1399 SOC_ENUM("Digital Interface DA 2 From Slot Map", soc_enum_da2slotmap), 1400 SOC_ENUM("Digital Interface DA 3 From Slot Map", soc_enum_da3slotmap), 1401 SOC_ENUM("Digital Interface DA 4 From Slot Map", soc_enum_da4slotmap), 1402 SOC_ENUM("Digital Interface DA 5 From Slot Map", soc_enum_da5slotmap), 1403 SOC_ENUM("Digital Interface DA 6 From Slot Map", soc_enum_da6slotmap), 1404 SOC_ENUM("Digital Interface DA 7 From Slot Map", soc_enum_da7slotmap), 1405 SOC_ENUM("Digital Interface DA 8 From Slot Map", soc_enum_da8slotmap), 1406 1407 /* Digital interface - AD to slot mapping */ 1408 SOC_ENUM("Digital Interface AD To Slot 0 Map", soc_enum_adslot0map), 1409 SOC_ENUM("Digital Interface AD To Slot 1 Map", soc_enum_adslot1map), 1410 SOC_ENUM("Digital Interface AD To Slot 2 Map", soc_enum_adslot2map), 1411 SOC_ENUM("Digital Interface AD To Slot 3 Map", soc_enum_adslot3map), 1412 SOC_ENUM("Digital Interface AD To Slot 4 Map", soc_enum_adslot4map), 1413 SOC_ENUM("Digital Interface AD To Slot 5 Map", soc_enum_adslot5map), 1414 SOC_ENUM("Digital Interface AD To Slot 6 Map", soc_enum_adslot6map), 1415 SOC_ENUM("Digital Interface AD To Slot 7 Map", soc_enum_adslot7map), 1416 SOC_ENUM("Digital Interface AD To Slot 8 Map", soc_enum_adslot8map), 1417 SOC_ENUM("Digital Interface AD To Slot 9 Map", soc_enum_adslot9map), 1418 SOC_ENUM("Digital Interface AD To Slot 10 Map", soc_enum_adslot10map), 1419 SOC_ENUM("Digital Interface AD To Slot 11 Map", soc_enum_adslot11map), 1420 SOC_ENUM("Digital Interface AD To Slot 12 Map", soc_enum_adslot12map), 1421 SOC_ENUM("Digital Interface AD To Slot 13 Map", soc_enum_adslot13map), 1422 SOC_ENUM("Digital Interface AD To Slot 14 Map", soc_enum_adslot14map), 1423 SOC_ENUM("Digital Interface AD To Slot 15 Map", soc_enum_adslot15map), 1424 SOC_ENUM("Digital Interface AD To Slot 16 Map", soc_enum_adslot16map), 1425 SOC_ENUM("Digital Interface AD To Slot 17 Map", soc_enum_adslot17map), 1426 SOC_ENUM("Digital Interface AD To Slot 18 Map", soc_enum_adslot18map), 1427 SOC_ENUM("Digital Interface AD To Slot 19 Map", soc_enum_adslot19map), 1428 SOC_ENUM("Digital Interface AD To Slot 20 Map", soc_enum_adslot20map), 1429 SOC_ENUM("Digital Interface AD To Slot 21 Map", soc_enum_adslot21map), 1430 SOC_ENUM("Digital Interface AD To Slot 22 Map", soc_enum_adslot22map), 1431 SOC_ENUM("Digital Interface AD To Slot 23 Map", soc_enum_adslot23map), 1432 SOC_ENUM("Digital Interface AD To Slot 24 Map", soc_enum_adslot24map), 1433 SOC_ENUM("Digital Interface AD To Slot 25 Map", soc_enum_adslot25map), 1434 SOC_ENUM("Digital Interface AD To Slot 26 Map", soc_enum_adslot26map), 1435 SOC_ENUM("Digital Interface AD To Slot 27 Map", soc_enum_adslot27map), 1436 SOC_ENUM("Digital Interface AD To Slot 28 Map", soc_enum_adslot28map), 1437 SOC_ENUM("Digital Interface AD To Slot 29 Map", soc_enum_adslot29map), 1438 SOC_ENUM("Digital Interface AD To Slot 30 Map", soc_enum_adslot30map), 1439 SOC_ENUM("Digital Interface AD To Slot 31 Map", soc_enum_adslot31map), 1440 1441 /* Digital interface - Loopback */ 1442 SOC_SINGLE("Digital Interface AD 1 Loopback Switch", 1443 AB8500_DASLOTCONF1, AB8500_DASLOTCONF1_DAI7TOADO1, 1444 1, 0), 1445 SOC_SINGLE("Digital Interface AD 2 Loopback Switch", 1446 AB8500_DASLOTCONF2, AB8500_DASLOTCONF2_DAI8TOADO2, 1447 1, 0), 1448 SOC_SINGLE("Digital Interface AD 3 Loopback Switch", 1449 AB8500_DASLOTCONF3, AB8500_DASLOTCONF3_DAI7TOADO3, 1450 1, 0), 1451 SOC_SINGLE("Digital Interface AD 4 Loopback Switch", 1452 AB8500_DASLOTCONF4, AB8500_DASLOTCONF4_DAI8TOADO4, 1453 1, 0), 1454 SOC_SINGLE("Digital Interface AD 5 Loopback Switch", 1455 AB8500_DASLOTCONF5, AB8500_DASLOTCONF5_DAI7TOADO5, 1456 1, 0), 1457 SOC_SINGLE("Digital Interface AD 6 Loopback Switch", 1458 AB8500_DASLOTCONF6, AB8500_DASLOTCONF6_DAI8TOADO6, 1459 1, 0), 1460 SOC_SINGLE("Digital Interface AD 7 Loopback Switch", 1461 AB8500_DASLOTCONF7, AB8500_DASLOTCONF7_DAI8TOADO7, 1462 1, 0), 1463 SOC_SINGLE("Digital Interface AD 8 Loopback Switch", 1464 AB8500_DASLOTCONF8, AB8500_DASLOTCONF8_DAI7TOADO8, 1465 1, 0), 1466 1467 /* Digital interface - Burst FIFO */ 1468 SOC_SINGLE("Digital Interface 0 FIFO Enable Switch", 1469 AB8500_DIGIFCONF3, AB8500_DIGIFCONF3_IF0BFIFOEN, 1470 1, 0), 1471 SOC_ENUM("Burst FIFO Mask", soc_enum_bfifomask), 1472 SOC_ENUM("Burst FIFO Bit-clock Frequency", soc_enum_bfifo19m2), 1473 SOC_SINGLE("Burst FIFO Threshold", 1474 AB8500_FIFOCONF1, AB8500_FIFOCONF1_BFIFOINT_SHIFT, 1475 AB8500_FIFOCONF1_BFIFOINT_MAX, 0), 1476 SOC_SINGLE("Burst FIFO Length", 1477 AB8500_FIFOCONF2, AB8500_FIFOCONF2_BFIFOTX_SHIFT, 1478 AB8500_FIFOCONF2_BFIFOTX_MAX, 0), 1479 SOC_SINGLE("Burst FIFO EOS Extra Slots", 1480 AB8500_FIFOCONF3, AB8500_FIFOCONF3_BFIFOEXSL_SHIFT, 1481 AB8500_FIFOCONF3_BFIFOEXSL_MAX, 0), 1482 SOC_SINGLE("Burst FIFO FS Extra Bit-clocks", 1483 AB8500_FIFOCONF3, AB8500_FIFOCONF3_PREBITCLK0_SHIFT, 1484 AB8500_FIFOCONF3_PREBITCLK0_MAX, 0), 1485 SOC_ENUM("Burst FIFO Interface Mode", soc_enum_bfifomast), 1486 1487 SOC_SINGLE("Burst FIFO Interface Switch", 1488 AB8500_FIFOCONF3, AB8500_FIFOCONF3_BFIFORUN_SHIFT, 1489 1, 0), 1490 SOC_SINGLE("Burst FIFO Switch Frame Number", 1491 AB8500_FIFOCONF4, AB8500_FIFOCONF4_BFIFOFRAMSW_SHIFT, 1492 AB8500_FIFOCONF4_BFIFOFRAMSW_MAX, 0), 1493 SOC_SINGLE("Burst FIFO Wake Up Delay", 1494 AB8500_FIFOCONF5, AB8500_FIFOCONF5_BFIFOWAKEUP_SHIFT, 1495 AB8500_FIFOCONF5_BFIFOWAKEUP_MAX, 0), 1496 SOC_SINGLE("Burst FIFO Samples In FIFO", 1497 AB8500_FIFOCONF6, AB8500_FIFOCONF6_BFIFOSAMPLE_SHIFT, 1498 AB8500_FIFOCONF6_BFIFOSAMPLE_MAX, 0), 1499 1500 /* ANC */ 1501 SOC_SINGLE_XR_SX("ANC Warp Delay Shift", 1502 AB8500_ANCCONF2, 1, AB8500_ANCCONF2_SHIFT, 1503 AB8500_ANCCONF2_MIN, AB8500_ANCCONF2_MAX, 0), 1504 SOC_SINGLE_XR_SX("ANC FIR Output Shift", 1505 AB8500_ANCCONF3, 1, AB8500_ANCCONF3_SHIFT, 1506 AB8500_ANCCONF3_MIN, AB8500_ANCCONF3_MAX, 0), 1507 SOC_SINGLE_XR_SX("ANC IIR Output Shift", 1508 AB8500_ANCCONF4, 1, AB8500_ANCCONF4_SHIFT, 1509 AB8500_ANCCONF4_MIN, AB8500_ANCCONF4_MAX, 0), 1510 SOC_SINGLE_XR_SX("ANC Warp Delay", 1511 AB8500_ANCCONF9, 2, AB8500_ANC_WARP_DELAY_SHIFT, 1512 AB8500_ANC_WARP_DELAY_MIN, AB8500_ANC_WARP_DELAY_MAX, 0), 1513 1514 /* Sidetone */ 1515 SOC_SINGLE_STROBE("Sidetone Reset", 1516 AB8500_SIDFIRADR, AB8500_SIDFIRADR_FIRSIDSET, 0), 1517 }; 1518 1519 /* 1520 * Extended interface for codec-driver 1521 */ 1522 1523 static int ab8500_audio_init_audioblock(struct snd_soc_component *component) 1524 { 1525 int status; 1526 u8 mask = AB8500_STW4500CTRL3_CLK32KOUT2DIS | 1527 AB8500_STW4500CTRL3_RESETAUDN; 1528 1529 dev_dbg(component->dev, "%s: Enter.\n", __func__); 1530 1531 /* Reset the audio registers and disable the unused 32 kHz output. */ 1532 status = ab8500_sysctrl_write(AB8500_STW4500CTRL3, mask, 1533 AB8500_STW4500CTRL3_CLK32KOUT2DIS); 1534 if (status < 0) 1535 return status; 1536 1537 return ab8500_sysctrl_write(AB8500_STW4500CTRL3, mask, mask); 1538 } 1539 1540 static int ab8500_audio_setup_mics(struct snd_soc_component *component, 1541 struct amic_settings *amics) 1542 { 1543 struct device *dev = component->dev; 1544 struct ab8500 *ab8500 = dev_get_drvdata(dev->parent); 1545 struct snd_soc_dapm_context *dapm = snd_soc_component_to_dapm(component); 1546 u8 value8; 1547 unsigned int value; 1548 int status; 1549 const struct snd_soc_dapm_route *route; 1550 1551 dev_dbg(component->dev, "%s: Enter.\n", __func__); 1552 1553 /* Set DMic-clocks to outputs; these GPIOs do not exist on AB8505. */ 1554 if (!is_ab8505(ab8500)) { 1555 status = abx500_get_register_interruptible(dev, AB8500_MISC, 1556 AB8500_GPIO_DIR4_REG, 1557 &value8); 1558 if (status < 0) 1559 return status; 1560 value = value8 | GPIO27_DIR_OUTPUT | GPIO29_DIR_OUTPUT | 1561 GPIO31_DIR_OUTPUT; 1562 status = abx500_set_register_interruptible(dev, AB8500_MISC, 1563 AB8500_GPIO_DIR4_REG, 1564 value); 1565 if (status < 0) 1566 return status; 1567 } 1568 1569 /* Attach regulators to AMic DAPM-paths */ 1570 dev_dbg(component->dev, "%s: Mic 1a regulator: %s\n", __func__, 1571 amic_micbias_str(amics->mic1a_micbias)); 1572 route = &ab8500_dapm_routes_mic1a_vamicx[amics->mic1a_micbias]; 1573 status = snd_soc_dapm_add_routes(dapm, route, 1); 1574 dev_dbg(component->dev, "%s: Mic 1b regulator: %s\n", __func__, 1575 amic_micbias_str(amics->mic1b_micbias)); 1576 route = &ab8500_dapm_routes_mic1b_vamicx[amics->mic1b_micbias]; 1577 status |= snd_soc_dapm_add_routes(dapm, route, 1); 1578 dev_dbg(component->dev, "%s: Mic 2 regulator: %s\n", __func__, 1579 amic_micbias_str(amics->mic2_micbias)); 1580 route = &ab8500_dapm_routes_mic2_vamicx[amics->mic2_micbias]; 1581 status |= snd_soc_dapm_add_routes(dapm, route, 1); 1582 if (status < 0) { 1583 dev_err(component->dev, 1584 "%s: Failed to add AMic-regulator DAPM-routes (%d).\n", 1585 __func__, status); 1586 return status; 1587 } 1588 1589 /* Set AMic-configuration */ 1590 dev_dbg(component->dev, "%s: Mic 1 mic-type: %s\n", __func__, 1591 amic_type_str(amics->mic1_type)); 1592 snd_soc_component_update_bits(component, AB8500_ANAGAIN1, AB8500_ANAGAINX_ENSEMICX, 1593 amics->mic1_type == AMIC_TYPE_DIFFERENTIAL ? 1594 0 : AB8500_ANAGAINX_ENSEMICX); 1595 dev_dbg(component->dev, "%s: Mic 2 mic-type: %s\n", __func__, 1596 amic_type_str(amics->mic2_type)); 1597 snd_soc_component_update_bits(component, AB8500_ANAGAIN2, AB8500_ANAGAINX_ENSEMICX, 1598 amics->mic2_type == AMIC_TYPE_DIFFERENTIAL ? 1599 0 : AB8500_ANAGAINX_ENSEMICX); 1600 1601 return 0; 1602 } 1603 1604 static int ab8500_audio_set_ear_cmv(struct snd_soc_component *component, 1605 enum ear_cm_voltage ear_cmv) 1606 { 1607 char *cmv_str; 1608 1609 switch (ear_cmv) { 1610 case EAR_CMV_0_95V: 1611 cmv_str = "0.95V"; 1612 break; 1613 case EAR_CMV_1_10V: 1614 cmv_str = "1.10V"; 1615 break; 1616 case EAR_CMV_1_27V: 1617 cmv_str = "1.27V"; 1618 break; 1619 case EAR_CMV_1_58V: 1620 cmv_str = "1.58V"; 1621 break; 1622 default: 1623 dev_err(component->dev, 1624 "%s: Unknown earpiece CM-voltage (%d)!\n", 1625 __func__, (int)ear_cmv); 1626 return -EINVAL; 1627 } 1628 dev_dbg(component->dev, "%s: Earpiece CM-voltage: %s\n", __func__, 1629 cmv_str); 1630 snd_soc_component_update_bits(component, AB8500_ANACONF1, AB8500_ANACONF1_EARSELCM, 1631 ear_cmv); 1632 1633 return 0; 1634 } 1635 1636 static int ab8500_codec_set_dai_fmt(struct snd_soc_dai *dai, unsigned int fmt) 1637 { 1638 struct snd_soc_component *component = dai->component; 1639 unsigned int conf1_mask, conf1_val = 0; 1640 unsigned int conf2_mask, conf2_val = 0; 1641 unsigned int conf3_mask, conf3_val = 0; 1642 bool provider = false; 1643 int ret; 1644 1645 dev_dbg(component->dev, "%s: Enter (fmt = 0x%x)\n", __func__, fmt); 1646 1647 conf3_mask = BIT(AB8500_DIGIFCONF3_IF1DATOIF0AD) | 1648 BIT(AB8500_DIGIFCONF3_IF1CLKTOIF0CLK) | 1649 BIT(AB8500_DIGIFCONF3_IF0BFIFOEN) | 1650 BIT(AB8500_DIGIFCONF3_IF0MASTER); 1651 1652 switch (fmt & SND_SOC_DAIFMT_CLOCK_PROVIDER_MASK) { 1653 case SND_SOC_DAIFMT_CBP_CFP: 1654 dev_dbg(component->dev, 1655 "%s: IF0 Master-mode: AB8500 provider.\n", __func__); 1656 conf3_val |= BIT(AB8500_DIGIFCONF3_IF0MASTER); 1657 provider = true; 1658 break; 1659 case SND_SOC_DAIFMT_CBC_CFC: 1660 dev_dbg(component->dev, 1661 "%s: IF0 Master-mode: AB8500 consumer.\n", __func__); 1662 break; 1663 case SND_SOC_DAIFMT_CBC_CFP: 1664 case SND_SOC_DAIFMT_CBP_CFC: 1665 dev_err(component->dev, 1666 "%s: ERROR: The device is either a provider or a consumer.\n", 1667 __func__); 1668 fallthrough; 1669 default: 1670 dev_err(component->dev, 1671 "%s: ERROR: Unsupported clocking mask 0x%x\n", 1672 __func__, fmt & SND_SOC_DAIFMT_CLOCK_PROVIDER_MASK); 1673 return -EINVAL; 1674 } 1675 1676 conf1_mask = BIT(AB8500_DIGIFCONF1_ENMASTGEN) | 1677 BIT(AB8500_DIGIFCONF1_ENFSBITCLK0); 1678 switch (fmt & SND_SOC_DAIFMT_CLOCK_MASK) { 1679 case SND_SOC_DAIFMT_CONT: 1680 if (provider) 1681 conf1_val = conf1_mask; 1682 break; 1683 case SND_SOC_DAIFMT_GATED: 1684 if (provider) 1685 conf1_val = BIT(AB8500_DIGIFCONF1_ENMASTGEN); 1686 break; 1687 default: 1688 dev_err(component->dev, "%s: Unsupported clock mask 0x%x\n", 1689 __func__, fmt & SND_SOC_DAIFMT_CLOCK_MASK); 1690 return -EINVAL; 1691 } 1692 1693 conf2_mask = BIT(AB8500_DIGIFCONF2_IF0FORMAT0) | 1694 BIT(AB8500_DIGIFCONF2_IF0FORMAT1) | 1695 BIT(AB8500_DIGIFCONF2_IF0DEL) | 1696 BIT(AB8500_DIGIFCONF2_FSYNC0P) | 1697 BIT(AB8500_DIGIFCONF2_BITCLK0P); 1698 1699 switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) { 1700 case SND_SOC_DAIFMT_I2S: /* I2S mode */ 1701 dev_dbg(component->dev, "%s: IF0 Protocol: I2S\n", __func__); 1702 conf2_val |= BIT(AB8500_DIGIFCONF2_IF0FORMAT1) | 1703 BIT(AB8500_DIGIFCONF2_IF0DEL); 1704 break; 1705 1706 case SND_SOC_DAIFMT_DSP_A: /* L data MSB after FRM LRC */ 1707 dev_dbg(component->dev, 1708 "%s: IF0 Protocol: DSP A (TDM)\n", __func__); 1709 conf2_val |= BIT(AB8500_DIGIFCONF2_IF0FORMAT0) | 1710 BIT(AB8500_DIGIFCONF2_IF0DEL); 1711 break; 1712 1713 case SND_SOC_DAIFMT_DSP_B: /* L data MSB during FRM LRC */ 1714 dev_dbg(component->dev, 1715 "%s: IF0 Protocol: DSP B (TDM)\n", __func__); 1716 conf2_val |= BIT(AB8500_DIGIFCONF2_IF0FORMAT0); 1717 break; 1718 1719 default: 1720 dev_err(component->dev, 1721 "%s: ERROR: Unsupported format (0x%x)!\n", 1722 __func__, fmt & SND_SOC_DAIFMT_FORMAT_MASK); 1723 return -EINVAL; 1724 } 1725 1726 switch (fmt & SND_SOC_DAIFMT_INV_MASK) { 1727 case SND_SOC_DAIFMT_NB_NF: /* normal bit clock + frame */ 1728 dev_dbg(component->dev, 1729 "%s: IF0: Normal bit clock, normal frame\n", 1730 __func__); 1731 break; 1732 case SND_SOC_DAIFMT_NB_IF: /* normal BCLK + inv FRM */ 1733 dev_dbg(component->dev, 1734 "%s: IF0: Normal bit clock, inverted frame\n", 1735 __func__); 1736 conf2_val |= BIT(AB8500_DIGIFCONF2_FSYNC0P); 1737 break; 1738 case SND_SOC_DAIFMT_IB_NF: /* invert BCLK + nor FRM */ 1739 dev_dbg(component->dev, 1740 "%s: IF0: Inverted bit clock, normal frame\n", 1741 __func__); 1742 conf2_val |= BIT(AB8500_DIGIFCONF2_BITCLK0P); 1743 break; 1744 case SND_SOC_DAIFMT_IB_IF: /* invert BCLK + FRM */ 1745 dev_dbg(component->dev, 1746 "%s: IF0: Inverted bit clock, inverted frame\n", 1747 __func__); 1748 conf2_val |= BIT(AB8500_DIGIFCONF2_FSYNC0P) | 1749 BIT(AB8500_DIGIFCONF2_BITCLK0P); 1750 break; 1751 default: 1752 dev_err(component->dev, 1753 "%s: ERROR: Unsupported INV mask 0x%x\n", 1754 __func__, fmt & SND_SOC_DAIFMT_INV_MASK); 1755 return -EINVAL; 1756 } 1757 1758 ret = snd_soc_component_update_bits(component, AB8500_DIGIFCONF3, 1759 conf3_mask, conf3_val); 1760 if (ret < 0) 1761 return ret; 1762 1763 ret = snd_soc_component_update_bits(component, AB8500_DIGIFCONF1, 1764 conf1_mask, conf1_val); 1765 if (ret < 0) 1766 return ret; 1767 1768 ret = snd_soc_component_update_bits(component, AB8500_DIGIFCONF2, 1769 conf2_mask, conf2_val); 1770 1771 return ret < 0 ? ret : 0; 1772 } 1773 1774 static int ab8500_codec_set_dai_tdm_slot(struct snd_soc_dai *dai, 1775 unsigned int tx_mask, unsigned int rx_mask, 1776 int slots, int slot_width) 1777 { 1778 struct snd_soc_component *component = dai->component; 1779 unsigned int active_mask, clock_ratio, slot, value, ad_out, reg; 1780 unsigned int tx_active, rx_active; 1781 unsigned int conf1_val, conf2_val; 1782 unsigned int mask; 1783 int channel, ret; 1784 1785 mask = BIT(AB8500_DIGIFCONF2_IF0WL0) | 1786 BIT(AB8500_DIGIFCONF2_IF0WL1); 1787 conf2_val = 0; 1788 1789 switch (slot_width) { 1790 case 16: 1791 break; 1792 case 20: 1793 conf2_val |= BIT(AB8500_DIGIFCONF2_IF0WL0); 1794 break; 1795 case 24: 1796 conf2_val |= BIT(AB8500_DIGIFCONF2_IF0WL1); 1797 break; 1798 case 32: 1799 conf2_val |= BIT(AB8500_DIGIFCONF2_IF0WL1) | 1800 BIT(AB8500_DIGIFCONF2_IF0WL0); 1801 break; 1802 default: 1803 dev_err(dai->component->dev, "%s: Unsupported slot-width 0x%x\n", 1804 __func__, slot_width); 1805 return -EINVAL; 1806 } 1807 1808 switch (slots) { 1809 case 2: 1810 case 4: 1811 case 8: 1812 case 16: 1813 break; 1814 default: 1815 dev_err(dai->component->dev, 1816 "%s: ERROR: Unsupported number of slots (%d)!\n", 1817 __func__, slots); 1818 return -EINVAL; 1819 } 1820 1821 clock_ratio = slots * slot_width; 1822 switch (clock_ratio) { 1823 case 32: 1824 conf1_val = 0; 1825 break; 1826 case 64: 1827 conf1_val = BIT(AB8500_DIGIFCONF1_IF0BITCLKOS0); 1828 break; 1829 case 128: 1830 conf1_val = BIT(AB8500_DIGIFCONF1_IF0BITCLKOS1); 1831 break; 1832 case 256: 1833 conf1_val = BIT(AB8500_DIGIFCONF1_IF0BITCLKOS0) | 1834 BIT(AB8500_DIGIFCONF1_IF0BITCLKOS1); 1835 break; 1836 default: 1837 dev_err(component->dev, "%s: Unsupported BCLK ratio (%u)!\n", 1838 __func__, clock_ratio); 1839 return -EINVAL; 1840 } 1841 1842 active_mask = GENMASK(min(slots, 8) - 1, 0); 1843 if ((tx_mask | rx_mask) & ~active_mask) { 1844 dev_err(component->dev, "%s: Slot mask exceeds slot count\n", 1845 __func__); 1846 return -EINVAL; 1847 } 1848 1849 tx_active = hweight32(tx_mask); 1850 rx_active = hweight32(rx_mask); 1851 if (tx_active != 0 && tx_active != 1 && tx_active != 2 && 1852 tx_active != 8) { 1853 dev_err(component->dev, "%s: Unsupported active TX slots (%u)!\n", 1854 __func__, tx_active); 1855 return -EINVAL; 1856 } 1857 if (rx_active != 0 && rx_active != 1 && rx_active != 2 && 1858 rx_active != 8) { 1859 dev_err(component->dev, "%s: Unsupported active RX slots (%u)!\n", 1860 __func__, rx_active); 1861 return -EINVAL; 1862 } 1863 1864 dev_dbg(component->dev, 1865 "%s: %d slots of %d bits, TX active: %u, RX active: %u\n", 1866 __func__, slots, slot_width, tx_active, rx_active); 1867 1868 ret = snd_soc_component_update_bits(component, AB8500_DIGIFCONF2, 1869 mask, conf2_val); 1870 if (ret < 0) 1871 return ret; 1872 1873 mask = BIT(AB8500_DIGIFCONF1_IF0BITCLKOS0) | 1874 BIT(AB8500_DIGIFCONF1_IF0BITCLKOS1); 1875 ret = snd_soc_component_update_bits(component, AB8500_DIGIFCONF1, 1876 mask, conf1_val); 1877 if (ret < 0) 1878 return ret; 1879 1880 mask = AB8500_DASLOTCONFX_SLTODAX_MASK; 1881 if (tx_active == 1 || tx_active == 2) { 1882 slot = __ffs(tx_mask) + AB8500_DA_DATA0_OFFSET; 1883 reg = AB8500_DASLOTCONF1; 1884 ret = snd_soc_component_update_bits(component, reg, mask, slot); 1885 if (ret < 0) 1886 return ret; 1887 reg = AB8500_DASLOTCONF3; 1888 ret = snd_soc_component_update_bits(component, reg, mask, slot); 1889 if (ret < 0) 1890 return ret; 1891 1892 if (tx_active == 2) 1893 slot = __fls(tx_mask) + AB8500_DA_DATA0_OFFSET; 1894 reg = AB8500_DASLOTCONF2; 1895 ret = snd_soc_component_update_bits(component, reg, mask, slot); 1896 if (ret < 0) 1897 return ret; 1898 reg = AB8500_DASLOTCONF4; 1899 ret = snd_soc_component_update_bits(component, reg, mask, slot); 1900 if (ret < 0) 1901 return ret; 1902 } else if (tx_active == 8) { 1903 channel = 0; 1904 for (slot = 0; slot < 8; slot++) { 1905 if (!(tx_mask & BIT(slot))) 1906 continue; 1907 reg = AB8500_DASLOTCONF1 + channel++; 1908 value = slot + AB8500_DA_DATA0_OFFSET; 1909 ret = snd_soc_component_update_bits(component, reg, mask, value); 1910 if (ret < 0) 1911 return ret; 1912 } 1913 } 1914 1915 if (rx_active == 1 || rx_active == 2) { 1916 slot = __ffs(rx_mask) + AB8500_AD_DATA0_OFFSET; 1917 value = AB8500_ADSLOTSELX_AD_OUT_TO_SLOT(AB8500_AD_OUT3, 1918 slot); 1919 reg = AB8500_ADSLOTSEL(slot); 1920 mask = AB8500_MASK_SLOT(slot); 1921 ret = snd_soc_component_update_bits(component, reg, mask, value); 1922 if (ret < 0) 1923 return ret; 1924 1925 if (rx_active == 2) { 1926 slot = __fls(rx_mask) + AB8500_AD_DATA0_OFFSET; 1927 value = AB8500_ADSLOTSELX_AD_OUT_TO_SLOT(AB8500_AD_OUT2, 1928 slot); 1929 reg = AB8500_ADSLOTSEL(slot); 1930 mask = AB8500_MASK_SLOT(slot); 1931 ret = snd_soc_component_update_bits(component, reg, mask, value); 1932 if (ret < 0) 1933 return ret; 1934 } 1935 } else if (rx_active == 8) { 1936 channel = 0; 1937 for (slot = 0; slot < 8; slot++) { 1938 if (!(rx_mask & BIT(slot))) 1939 continue; 1940 ad_out = AB8500_AD_OUT1 + channel++; 1941 value = AB8500_ADSLOTSELX_AD_OUT_TO_SLOT(ad_out, slot); 1942 reg = AB8500_ADSLOTSEL(slot); 1943 mask = AB8500_MASK_SLOT(slot); 1944 ret = snd_soc_component_update_bits(component, reg, mask, value); 1945 if (ret < 0) 1946 return ret; 1947 } 1948 } 1949 1950 return 0; 1951 } 1952 1953 static const struct snd_soc_dai_ops ab8500_codec_ops = { 1954 .set_fmt = ab8500_codec_set_dai_fmt, 1955 .set_tdm_slot = ab8500_codec_set_dai_tdm_slot, 1956 }; 1957 1958 static struct snd_soc_dai_driver ab8500_codec_dai[] = { 1959 { 1960 .name = "ab8500-codec-dai.0", 1961 .id = 0, 1962 .playback = { 1963 .stream_name = "ab8500_0p", 1964 .channels_min = 1, 1965 .channels_max = 8, 1966 .rates = AB8500_SUPPORTED_RATE, 1967 .formats = AB8500_SUPPORTED_FMT, 1968 }, 1969 .ops = &ab8500_codec_ops, 1970 .symmetric_rate = 1 1971 }, 1972 { 1973 .name = "ab8500-codec-dai.1", 1974 .id = 1, 1975 .capture = { 1976 .stream_name = "ab8500_0c", 1977 .channels_min = 1, 1978 .channels_max = 8, 1979 .rates = AB8500_SUPPORTED_RATE, 1980 .formats = AB8500_SUPPORTED_FMT, 1981 }, 1982 .ops = &ab8500_codec_ops, 1983 .symmetric_rate = 1 1984 } 1985 }; 1986 1987 static void ab8500_codec_of_probe(struct device *dev, struct device_node *np, 1988 struct ab8500_codec_platform_data *codec) 1989 { 1990 u32 value; 1991 1992 if (of_property_read_bool(np, "stericsson,amic1-type-single-ended")) 1993 codec->amics.mic1_type = AMIC_TYPE_SINGLE_ENDED; 1994 else 1995 codec->amics.mic1_type = AMIC_TYPE_DIFFERENTIAL; 1996 1997 if (of_property_read_bool(np, "stericsson,amic2-type-single-ended")) 1998 codec->amics.mic2_type = AMIC_TYPE_SINGLE_ENDED; 1999 else 2000 codec->amics.mic2_type = AMIC_TYPE_DIFFERENTIAL; 2001 2002 /* Has a non-standard Vamic been requested? */ 2003 if (of_property_read_bool(np, "stericsson,amic1a-bias-vamic2")) 2004 codec->amics.mic1a_micbias = AMIC_MICBIAS_VAMIC2; 2005 else 2006 codec->amics.mic1a_micbias = AMIC_MICBIAS_VAMIC1; 2007 2008 if (of_property_read_bool(np, "stericsson,amic1b-bias-vamic2")) 2009 codec->amics.mic1b_micbias = AMIC_MICBIAS_VAMIC2; 2010 else 2011 codec->amics.mic1b_micbias = AMIC_MICBIAS_VAMIC1; 2012 2013 if (of_property_read_bool(np, "stericsson,amic2-bias-vamic1")) 2014 codec->amics.mic2_micbias = AMIC_MICBIAS_VAMIC1; 2015 else 2016 codec->amics.mic2_micbias = AMIC_MICBIAS_VAMIC2; 2017 2018 if (!of_property_read_u32(np, "stericsson,earpeice-cmv", &value)) { 2019 switch (value) { 2020 case 950 : 2021 codec->ear_cmv = EAR_CMV_0_95V; 2022 break; 2023 case 1100 : 2024 codec->ear_cmv = EAR_CMV_1_10V; 2025 break; 2026 case 1270 : 2027 codec->ear_cmv = EAR_CMV_1_27V; 2028 break; 2029 case 1580 : 2030 codec->ear_cmv = EAR_CMV_1_58V; 2031 break; 2032 default : 2033 codec->ear_cmv = EAR_CMV_UNKNOWN; 2034 dev_err(dev, "Unsuitable earpiece voltage found in DT\n"); 2035 } 2036 } else { 2037 dev_warn(dev, "No earpiece voltage found in DT - using default\n"); 2038 codec->ear_cmv = EAR_CMV_0_95V; 2039 } 2040 } 2041 2042 static int ab8500_codec_probe(struct snd_soc_component *component) 2043 { 2044 struct device *dev = component->dev; 2045 struct device_node *np = dev->of_node; 2046 struct ab8500_codec_platform_data codec_pdata; 2047 int status; 2048 2049 dev_dbg(dev, "%s: Enter.\n", __func__); 2050 2051 ab8500_codec_of_probe(dev, np, &codec_pdata); 2052 2053 status = ab8500_audio_init_audioblock(component); 2054 if (status < 0) { 2055 dev_err(dev, "%s: failed to init audio-block (%d)!\n", 2056 __func__, status); 2057 return status; 2058 } 2059 2060 status = ab8500_audio_setup_mics(component, &codec_pdata.amics); 2061 if (status < 0) { 2062 pr_err("%s: Failed to setup mics (%d)!\n", __func__, status); 2063 return status; 2064 } 2065 status = ab8500_audio_set_ear_cmv(component, codec_pdata.ear_cmv); 2066 if (status < 0) { 2067 pr_err("%s: Failed to set earpiece CM-voltage (%d)!\n", 2068 __func__, status); 2069 return status; 2070 } 2071 2072 /* Override HW-defaults */ 2073 snd_soc_component_write(component, AB8500_ANACONF5, 2074 BIT(AB8500_ANACONF5_HSAUTOEN)); 2075 snd_soc_component_write(component, AB8500_SHORTCIRCONF, 2076 BIT(AB8500_SHORTCIRCONF_HSZCDDIS)); 2077 2078 return status; 2079 } 2080 2081 static const struct snd_soc_component_driver ab8500_component_driver = { 2082 .probe = ab8500_codec_probe, 2083 .controls = ab8500_ctrls, 2084 .num_controls = ARRAY_SIZE(ab8500_ctrls), 2085 .dapm_widgets = ab8500_dapm_widgets, 2086 .num_dapm_widgets = ARRAY_SIZE(ab8500_dapm_widgets), 2087 .dapm_routes = ab8500_dapm_routes, 2088 .num_dapm_routes = ARRAY_SIZE(ab8500_dapm_routes), 2089 .idle_bias_on = 1, 2090 .use_pmdown_time = 1, 2091 .endianness = 1, 2092 }; 2093 2094 static int ab8500_codec_driver_probe(struct platform_device *pdev) 2095 { 2096 int status; 2097 struct ab8500_codec_drvdata *drvdata; 2098 2099 dev_dbg(&pdev->dev, "%s: Enter.\n", __func__); 2100 2101 /* Create driver private-data struct */ 2102 drvdata = devm_kzalloc(&pdev->dev, sizeof(struct ab8500_codec_drvdata), 2103 GFP_KERNEL); 2104 if (!drvdata) 2105 return -ENOMEM; 2106 dev_set_drvdata(&pdev->dev, drvdata); 2107 2108 drvdata->regmap = devm_regmap_init(&pdev->dev, NULL, &pdev->dev, 2109 &ab8500_codec_regmap); 2110 if (IS_ERR(drvdata->regmap)) { 2111 status = PTR_ERR(drvdata->regmap); 2112 dev_err(&pdev->dev, "%s: Failed to allocate regmap: %d\n", 2113 __func__, status); 2114 return status; 2115 } 2116 2117 dev_dbg(&pdev->dev, "%s: Register codec.\n", __func__); 2118 status = devm_snd_soc_register_component(&pdev->dev, 2119 &ab8500_component_driver, 2120 ab8500_codec_dai, 2121 ARRAY_SIZE(ab8500_codec_dai)); 2122 if (status < 0) 2123 dev_err(&pdev->dev, 2124 "%s: Error: Failed to register codec (%d).\n", 2125 __func__, status); 2126 2127 return status; 2128 } 2129 2130 static struct platform_driver ab8500_codec_platform_driver = { 2131 .driver = { 2132 .name = "ab8500-codec", 2133 }, 2134 .probe = ab8500_codec_driver_probe, 2135 }; 2136 module_platform_driver(ab8500_codec_platform_driver); 2137 2138 MODULE_DESCRIPTION("ASoC AB8500 codec driver"); 2139 MODULE_LICENSE("GPL v2"); 2140