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