aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/linux/mfd/wm8994/registers.h115
-rw-r--r--sound/soc/codecs/wm8994.c198
2 files changed, 301 insertions, 12 deletions
diff --git a/include/linux/mfd/wm8994/registers.h b/include/linux/mfd/wm8994/registers.h
index 3eb70a4e7681..423b2b5c94ea 100644
--- a/include/linux/mfd/wm8994/registers.h
+++ b/include/linux/mfd/wm8994/registers.h
@@ -246,6 +246,15 @@
246#define WM8994_INTERRUPT_STATUS_2_MASK 0x739 246#define WM8994_INTERRUPT_STATUS_2_MASK 0x739
247#define WM8994_INTERRUPT_CONTROL 0x740 247#define WM8994_INTERRUPT_CONTROL 0x740
248#define WM8994_IRQ_DEBOUNCE 0x748 248#define WM8994_IRQ_DEBOUNCE 0x748
249#define WM8958_DSP2_PROGRAM 0x900
250#define WM8958_DSP2_CONFIG 0x901
251#define WM8958_DSP2_MAGICNUM 0xA00
252#define WM8958_DSP2_RELEASEYEAR 0xA01
253#define WM8958_DSP2_RELEASEMONTHDAY 0xA02
254#define WM8958_DSP2_RELEASETIME 0xA03
255#define WM8958_DSP2_VERMAJMIN 0xA04
256#define WM8958_DSP2_VERBUILD 0xA05
257#define WM8958_DSP2_EXECCONTROL 0xA0D
249#define WM8994_WRITE_SEQUENCER_0 0x3000 258#define WM8994_WRITE_SEQUENCER_0 0x3000
250#define WM8994_WRITE_SEQUENCER_1 0x3001 259#define WM8994_WRITE_SEQUENCER_1 0x3001
251#define WM8994_WRITE_SEQUENCER_2 0x3002 260#define WM8994_WRITE_SEQUENCER_2 0x3002
@@ -2079,6 +2088,14 @@
2079/* 2088/*
2080 * R520 (0x208) - Clocking (1) 2089 * R520 (0x208) - Clocking (1)
2081 */ 2090 */
2091#define WM8958_DSP2CLK_ENA 0x4000 /* DSP2CLK_ENA */
2092#define WM8958_DSP2CLK_ENA_MASK 0x4000 /* DSP2CLK_ENA */
2093#define WM8958_DSP2CLK_ENA_SHIFT 14 /* DSP2CLK_ENA */
2094#define WM8958_DSP2CLK_ENA_WIDTH 1 /* DSP2CLK_ENA */
2095#define WM8958_DSP2CLK_SRC 0x1000 /* DSP2CLK_SRC */
2096#define WM8958_DSP2CLK_SRC_MASK 0x1000 /* DSP2CLK_SRC */
2097#define WM8958_DSP2CLK_SRC_SHIFT 12 /* DSP2CLK_SRC */
2098#define WM8958_DSP2CLK_SRC_WIDTH 1 /* DSP2CLK_SRC */
2082#define WM8994_TOCLK_ENA 0x0010 /* TOCLK_ENA */ 2099#define WM8994_TOCLK_ENA 0x0010 /* TOCLK_ENA */
2083#define WM8994_TOCLK_ENA_MASK 0x0010 /* TOCLK_ENA */ 2100#define WM8994_TOCLK_ENA_MASK 0x0010 /* TOCLK_ENA */
2084#define WM8994_TOCLK_ENA_SHIFT 4 /* TOCLK_ENA */ 2101#define WM8994_TOCLK_ENA_SHIFT 4 /* TOCLK_ENA */
@@ -4356,4 +4373,102 @@
4356#define WM8994_TEMP_SHUT_DB_SHIFT 0 /* TEMP_SHUT_DB */ 4373#define WM8994_TEMP_SHUT_DB_SHIFT 0 /* TEMP_SHUT_DB */
4357#define WM8994_TEMP_SHUT_DB_WIDTH 1 /* TEMP_SHUT_DB */ 4374#define WM8994_TEMP_SHUT_DB_WIDTH 1 /* TEMP_SHUT_DB */
4358 4375
4376/*
4377 * R2304 (0x900) - DSP2_Program
4378 */
4379#define WM8958_DSP2_ENA 0x0001 /* DSP2_ENA */
4380#define WM8958_DSP2_ENA_MASK 0x0001 /* DSP2_ENA */
4381#define WM8958_DSP2_ENA_SHIFT 0 /* DSP2_ENA */
4382#define WM8958_DSP2_ENA_WIDTH 1 /* DSP2_ENA */
4383
4384/*
4385 * R2305 (0x901) - DSP2_Config
4386 */
4387#define WM8958_MBC_SEL_MASK 0x0030 /* MBC_SEL - [5:4] */
4388#define WM8958_MBC_SEL_SHIFT 4 /* MBC_SEL - [5:4] */
4389#define WM8958_MBC_SEL_WIDTH 2 /* MBC_SEL - [5:4] */
4390#define WM8958_MBC_ENA 0x0001 /* MBC_ENA */
4391#define WM8958_MBC_ENA_MASK 0x0001 /* MBC_ENA */
4392#define WM8958_MBC_ENA_SHIFT 0 /* MBC_ENA */
4393#define WM8958_MBC_ENA_WIDTH 1 /* MBC_ENA */
4394
4395/*
4396 * R2560 (0xA00) - DSP2_MagicNum
4397 */
4398#define WM8958_DSP2_MAGIC_NUM_MASK 0xFFFF /* DSP2_MAGIC_NUM - [15:0] */
4399#define WM8958_DSP2_MAGIC_NUM_SHIFT 0 /* DSP2_MAGIC_NUM - [15:0] */
4400#define WM8958_DSP2_MAGIC_NUM_WIDTH 16 /* DSP2_MAGIC_NUM - [15:0] */
4401
4402/*
4403 * R2561 (0xA01) - DSP2_ReleaseYear
4404 */
4405#define WM8958_DSP2_RELEASE_YEAR_MASK 0xFFFF /* DSP2_RELEASE_YEAR - [15:0] */
4406#define WM8958_DSP2_RELEASE_YEAR_SHIFT 0 /* DSP2_RELEASE_YEAR - [15:0] */
4407#define WM8958_DSP2_RELEASE_YEAR_WIDTH 16 /* DSP2_RELEASE_YEAR - [15:0] */
4408
4409/*
4410 * R2562 (0xA02) - DSP2_ReleaseMonthDay
4411 */
4412#define WM8958_DSP2_RELEASE_MONTH_MASK 0xFF00 /* DSP2_RELEASE_MONTH - [15:8] */
4413#define WM8958_DSP2_RELEASE_MONTH_SHIFT 8 /* DSP2_RELEASE_MONTH - [15:8] */
4414#define WM8958_DSP2_RELEASE_MONTH_WIDTH 8 /* DSP2_RELEASE_MONTH - [15:8] */
4415#define WM8958_DSP2_RELEASE_DAY_MASK 0x00FF /* DSP2_RELEASE_DAY - [7:0] */
4416#define WM8958_DSP2_RELEASE_DAY_SHIFT 0 /* DSP2_RELEASE_DAY - [7:0] */
4417#define WM8958_DSP2_RELEASE_DAY_WIDTH 8 /* DSP2_RELEASE_DAY - [7:0] */
4418
4419/*
4420 * R2563 (0xA03) - DSP2_ReleaseTime
4421 */
4422#define WM8958_DSP2_RELEASE_HOURS_MASK 0xFF00 /* DSP2_RELEASE_HOURS - [15:8] */
4423#define WM8958_DSP2_RELEASE_HOURS_SHIFT 8 /* DSP2_RELEASE_HOURS - [15:8] */
4424#define WM8958_DSP2_RELEASE_HOURS_WIDTH 8 /* DSP2_RELEASE_HOURS - [15:8] */
4425#define WM8958_DSP2_RELEASE_MINS_MASK 0x00FF /* DSP2_RELEASE_MINS - [7:0] */
4426#define WM8958_DSP2_RELEASE_MINS_SHIFT 0 /* DSP2_RELEASE_MINS - [7:0] */
4427#define WM8958_DSP2_RELEASE_MINS_WIDTH 8 /* DSP2_RELEASE_MINS - [7:0] */
4428
4429/*
4430 * R2564 (0xA04) - DSP2_VerMajMin
4431 */
4432#define WM8958_DSP2_MAJOR_VER_MASK 0xFF00 /* DSP2_MAJOR_VER - [15:8] */
4433#define WM8958_DSP2_MAJOR_VER_SHIFT 8 /* DSP2_MAJOR_VER - [15:8] */
4434#define WM8958_DSP2_MAJOR_VER_WIDTH 8 /* DSP2_MAJOR_VER - [15:8] */
4435#define WM8958_DSP2_MINOR_VER_MASK 0x00FF /* DSP2_MINOR_VER - [7:0] */
4436#define WM8958_DSP2_MINOR_VER_SHIFT 0 /* DSP2_MINOR_VER - [7:0] */
4437#define WM8958_DSP2_MINOR_VER_WIDTH 8 /* DSP2_MINOR_VER - [7:0] */
4438
4439/*
4440 * R2565 (0xA05) - DSP2_VerBuild
4441 */
4442#define WM8958_DSP2_BUILD_VER_MASK 0xFFFF /* DSP2_BUILD_VER - [15:0] */
4443#define WM8958_DSP2_BUILD_VER_SHIFT 0 /* DSP2_BUILD_VER - [15:0] */
4444#define WM8958_DSP2_BUILD_VER_WIDTH 16 /* DSP2_BUILD_VER - [15:0] */
4445
4446/*
4447 * R2573 (0xA0D) - DSP2_ExecControl
4448 */
4449#define WM8958_DSP2_STOPC 0x0020 /* DSP2_STOPC */
4450#define WM8958_DSP2_STOPC_MASK 0x0020 /* DSP2_STOPC */
4451#define WM8958_DSP2_STOPC_SHIFT 5 /* DSP2_STOPC */
4452#define WM8958_DSP2_STOPC_WIDTH 1 /* DSP2_STOPC */
4453#define WM8958_DSP2_STOPS 0x0010 /* DSP2_STOPS */
4454#define WM8958_DSP2_STOPS_MASK 0x0010 /* DSP2_STOPS */
4455#define WM8958_DSP2_STOPS_SHIFT 4 /* DSP2_STOPS */
4456#define WM8958_DSP2_STOPS_WIDTH 1 /* DSP2_STOPS */
4457#define WM8958_DSP2_STOPI 0x0008 /* DSP2_STOPI */
4458#define WM8958_DSP2_STOPI_MASK 0x0008 /* DSP2_STOPI */
4459#define WM8958_DSP2_STOPI_SHIFT 3 /* DSP2_STOPI */
4460#define WM8958_DSP2_STOPI_WIDTH 1 /* DSP2_STOPI */
4461#define WM8958_DSP2_STOP 0x0004 /* DSP2_STOP */
4462#define WM8958_DSP2_STOP_MASK 0x0004 /* DSP2_STOP */
4463#define WM8958_DSP2_STOP_SHIFT 2 /* DSP2_STOP */
4464#define WM8958_DSP2_STOP_WIDTH 1 /* DSP2_STOP */
4465#define WM8958_DSP2_RUNR 0x0002 /* DSP2_RUNR */
4466#define WM8958_DSP2_RUNR_MASK 0x0002 /* DSP2_RUNR */
4467#define WM8958_DSP2_RUNR_SHIFT 1 /* DSP2_RUNR */
4468#define WM8958_DSP2_RUNR_WIDTH 1 /* DSP2_RUNR */
4469#define WM8958_DSP2_RUN 0x0001 /* DSP2_RUN */
4470#define WM8958_DSP2_RUN_MASK 0x0001 /* DSP2_RUN */
4471#define WM8958_DSP2_RUN_SHIFT 0 /* DSP2_RUN */
4472#define WM8958_DSP2_RUN_WIDTH 1 /* DSP2_RUN */
4473
4359#endif 4474#endif
diff --git a/sound/soc/codecs/wm8994.c b/sound/soc/codecs/wm8994.c
index fb0609315cd6..b30b2dd3f1f4 100644
--- a/sound/soc/codecs/wm8994.c
+++ b/sound/soc/codecs/wm8994.c
@@ -80,6 +80,8 @@ struct wm8994_priv {
80 int dac_rates[2]; 80 int dac_rates[2];
81 int lrclk_shared[2]; 81 int lrclk_shared[2];
82 82
83 int mbc_ena[3];
84
83 /* Platform dependant DRC configuration */ 85 /* Platform dependant DRC configuration */
84 const char **drc_texts; 86 const char **drc_texts;
85 int drc_cfg[WM8994_NUM_DRC]; 87 int drc_cfg[WM8994_NUM_DRC];
@@ -137,6 +139,7 @@ static int wm8994_volatile(unsigned int reg)
137 case WM8994_RATE_STATUS: 139 case WM8994_RATE_STATUS:
138 case WM8994_LDO_1: 140 case WM8994_LDO_1:
139 case WM8994_LDO_2: 141 case WM8994_LDO_2:
142 case WM8958_DSP2_EXECCONTROL:
140 return 1; 143 return 1;
141 default: 144 default:
142 return 0; 145 return 0;
@@ -520,6 +523,168 @@ static const struct soc_enum aif2dacl_src =
520static const struct soc_enum aif2dacr_src = 523static const struct soc_enum aif2dacr_src =
521 SOC_ENUM_SINGLE(WM8994_AIF2_CONTROL_2, 14, 2, aif_chan_src_text); 524 SOC_ENUM_SINGLE(WM8994_AIF2_CONTROL_2, 14, 2, aif_chan_src_text);
522 525
526static void wm8958_mbc_apply(struct snd_soc_codec *codec, int mbc, int start)
527{
528 struct wm8994_priv *wm8994 = snd_soc_codec_get_drvdata(codec);
529 int pwr_reg = snd_soc_read(codec, WM8994_POWER_MANAGEMENT_5);
530 int ena, reg, aif;
531
532 switch (mbc) {
533 case 0:
534 pwr_reg &= (WM8994_AIF1DAC1L_ENA | WM8994_AIF1DAC1R_ENA);
535 aif = 0;
536 break;
537 case 1:
538 pwr_reg &= (WM8994_AIF1DAC2L_ENA | WM8994_AIF1DAC2R_ENA);
539 aif = 0;
540 break;
541 case 2:
542 pwr_reg &= (WM8994_AIF2DACL_ENA | WM8994_AIF2DACR_ENA);
543 aif = 1;
544 break;
545 default:
546 BUG();
547 return;
548 }
549
550 /* We can only enable the MBC if the AIF is enabled and we
551 * want it to be enabled. */
552 ena = pwr_reg && wm8994->mbc_ena[mbc];
553
554 reg = snd_soc_read(codec, WM8958_DSP2_PROGRAM);
555
556 dev_dbg(codec->dev, "MBC %d startup: %d, power: %x, DSP: %x\n",
557 mbc, start, pwr_reg, reg);
558
559 if (start && ena) {
560 /* If the DSP is already running then noop */
561 if (reg & WM8958_DSP2_ENA)
562 return;
563
564 /* Switch the clock over to the appropriate AIF */
565 snd_soc_update_bits(codec, WM8994_CLOCKING_1,
566 WM8958_DSP2CLK_SRC | WM8958_DSP2CLK_ENA,
567 aif << WM8958_DSP2CLK_SRC_SHIFT |
568 WM8958_DSP2CLK_ENA);
569
570 snd_soc_update_bits(codec, WM8958_DSP2_PROGRAM,
571 WM8958_DSP2_ENA, WM8958_DSP2_ENA);
572
573 /* TODO: Apply any user specified MBC settings */
574
575 /* Run the DSP */
576 snd_soc_write(codec, WM8958_DSP2_EXECCONTROL,
577 WM8958_DSP2_RUNR);
578
579 /* And we're off! */
580 snd_soc_update_bits(codec, WM8958_DSP2_CONFIG,
581 WM8958_MBC_ENA | WM8958_MBC_SEL_MASK,
582 mbc << WM8958_MBC_SEL_SHIFT |
583 WM8958_MBC_ENA);
584 } else {
585 /* If the DSP is already stopped then noop */
586 if (!(reg & WM8958_DSP2_ENA))
587 return;
588
589 snd_soc_update_bits(codec, WM8958_DSP2_CONFIG,
590 WM8958_MBC_ENA, 0);
591 snd_soc_update_bits(codec, WM8958_DSP2_PROGRAM,
592 WM8958_DSP2_ENA, 0);
593 snd_soc_update_bits(codec, WM8994_CLOCKING_1,
594 WM8958_DSP2CLK_ENA, 0);
595 }
596}
597
598static int wm8958_aif_ev(struct snd_soc_dapm_widget *w,
599 struct snd_kcontrol *kcontrol, int event)
600{
601 struct snd_soc_codec *codec = w->codec;
602 int mbc;
603
604 switch (w->shift) {
605 case 13:
606 case 12:
607 mbc = 2;
608 break;
609 case 11:
610 case 10:
611 mbc = 1;
612 break;
613 case 9:
614 case 8:
615 mbc = 0;
616 break;
617 default:
618 BUG();
619 return -EINVAL;
620 }
621
622 switch (event) {
623 case SND_SOC_DAPM_POST_PMU:
624 wm8958_mbc_apply(codec, mbc, 1);
625 break;
626 case SND_SOC_DAPM_POST_PMD:
627 wm8958_mbc_apply(codec, mbc, 0);
628 break;
629 }
630
631 return 0;
632}
633
634static int wm8958_mbc_info(struct snd_kcontrol *kcontrol,
635 struct snd_ctl_elem_info *uinfo)
636{
637 uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
638 uinfo->count = 1;
639 uinfo->value.integer.min = 0;
640 uinfo->value.integer.max = 1;
641 return 0;
642}
643
644static int wm8958_mbc_get(struct snd_kcontrol *kcontrol,
645 struct snd_ctl_elem_value *ucontrol)
646{
647 int mbc = kcontrol->private_value;
648 struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
649 struct wm8994_priv *wm8994 = snd_soc_codec_get_drvdata(codec);
650
651 ucontrol->value.integer.value[0] = wm8994->mbc_ena[mbc];
652
653 return 0;
654}
655
656static int wm8958_mbc_put(struct snd_kcontrol *kcontrol,
657 struct snd_ctl_elem_value *ucontrol)
658{
659 int mbc = kcontrol->private_value;
660 int i;
661 struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
662 struct wm8994_priv *wm8994 = snd_soc_codec_get_drvdata(codec);
663
664 if (ucontrol->value.integer.value[0] > 1)
665 return -EINVAL;
666
667 for (i = 0; i < ARRAY_SIZE(wm8994->mbc_ena); i++) {
668 if (mbc != i && wm8994->mbc_ena[i]) {
669 dev_dbg(codec->dev, "MBC %d active already\n", mbc);
670 return -EBUSY;
671 }
672 }
673
674 wm8994->mbc_ena[mbc] = ucontrol->value.integer.value[0];
675
676 wm8958_mbc_apply(codec, mbc, wm8994->mbc_ena[mbc]);
677
678 return 0;
679}
680
681#define WM8958_MBC_SWITCH(xname, xval) {\
682 .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname), \
683 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,\
684 .info = wm8958_mbc_info, \
685 .get = wm8958_mbc_get, .put = wm8958_mbc_put, \
686 .private_value = xval }
687
523static const struct snd_kcontrol_new wm8994_snd_controls[] = { 688static const struct snd_kcontrol_new wm8994_snd_controls[] = {
524SOC_DOUBLE_R_TLV("AIF1ADC1 Volume", WM8994_AIF1_ADC1_LEFT_VOLUME, 689SOC_DOUBLE_R_TLV("AIF1ADC1 Volume", WM8994_AIF1_ADC1_LEFT_VOLUME,
525 WM8994_AIF1_ADC1_RIGHT_VOLUME, 690 WM8994_AIF1_ADC1_RIGHT_VOLUME,
@@ -649,6 +814,9 @@ SOC_SINGLE_TLV("AIF2 EQ5 Volume", WM8994_AIF2_EQ_GAINS_2, 6, 31, 0,
649 814
650static const struct snd_kcontrol_new wm8958_snd_controls[] = { 815static const struct snd_kcontrol_new wm8958_snd_controls[] = {
651SOC_SINGLE_TLV("AIF3 Boost Volume", WM8958_AIF3_CONTROL_2, 10, 3, 0, aif_tlv), 816SOC_SINGLE_TLV("AIF3 Boost Volume", WM8958_AIF3_CONTROL_2, 10, 3, 0, aif_tlv),
817WM8958_MBC_SWITCH("AIF1DAC1 MBC Switch", 0),
818WM8958_MBC_SWITCH("AIF1DAC2 MBC Switch", 1),
819WM8958_MBC_SWITCH("AIF2DAC MBC Switch", 2),
652}; 820};
653 821
654static int clk_sys_event(struct snd_soc_dapm_widget *w, 822static int clk_sys_event(struct snd_soc_dapm_widget *w,
@@ -1018,19 +1186,23 @@ SND_SOC_DAPM_AIF_OUT("AIF1ADC1L", "AIF1 Capture",
1018 0, WM8994_POWER_MANAGEMENT_4, 9, 0), 1186 0, WM8994_POWER_MANAGEMENT_4, 9, 0),
1019SND_SOC_DAPM_AIF_OUT("AIF1ADC1R", "AIF1 Capture", 1187SND_SOC_DAPM_AIF_OUT("AIF1ADC1R", "AIF1 Capture",
1020 0, WM8994_POWER_MANAGEMENT_4, 8, 0), 1188 0, WM8994_POWER_MANAGEMENT_4, 8, 0),
1021SND_SOC_DAPM_AIF_IN("AIF1DAC1L", NULL, 0, 1189SND_SOC_DAPM_AIF_IN_E("AIF1DAC1L", NULL, 0,
1022 WM8994_POWER_MANAGEMENT_5, 9, 0), 1190 WM8994_POWER_MANAGEMENT_5, 9, 0, wm8958_aif_ev,
1023SND_SOC_DAPM_AIF_IN("AIF1DAC1R", NULL, 0, 1191 SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD),
1024 WM8994_POWER_MANAGEMENT_5, 8, 0), 1192SND_SOC_DAPM_AIF_IN_E("AIF1DAC1R", NULL, 0,
1193 WM8994_POWER_MANAGEMENT_5, 8, 0, wm8958_aif_ev,
1194 SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD),
1025 1195
1026SND_SOC_DAPM_AIF_OUT("AIF1ADC2L", "AIF1 Capture", 1196SND_SOC_DAPM_AIF_OUT("AIF1ADC2L", "AIF1 Capture",
1027 0, WM8994_POWER_MANAGEMENT_4, 11, 0), 1197 0, WM8994_POWER_MANAGEMENT_4, 11, 0),
1028SND_SOC_DAPM_AIF_OUT("AIF1ADC2R", "AIF1 Capture", 1198SND_SOC_DAPM_AIF_OUT("AIF1ADC2R", "AIF1 Capture",
1029 0, WM8994_POWER_MANAGEMENT_4, 10, 0), 1199 0, WM8994_POWER_MANAGEMENT_4, 10, 0),
1030SND_SOC_DAPM_AIF_IN("AIF1DAC2L", NULL, 0, 1200SND_SOC_DAPM_AIF_IN_E("AIF1DAC2L", NULL, 0,
1031 WM8994_POWER_MANAGEMENT_5, 11, 0), 1201 WM8994_POWER_MANAGEMENT_5, 11, 0, wm8958_aif_ev,
1032SND_SOC_DAPM_AIF_IN("AIF1DAC2R", NULL, 0, 1202 SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD),
1033 WM8994_POWER_MANAGEMENT_5, 10, 0), 1203SND_SOC_DAPM_AIF_IN_E("AIF1DAC2R", NULL, 0,
1204 WM8994_POWER_MANAGEMENT_5, 10, 0, wm8958_aif_ev,
1205 SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD),
1034 1206
1035SND_SOC_DAPM_MIXER("AIF1ADC1L Mixer", SND_SOC_NOPM, 0, 0, 1207SND_SOC_DAPM_MIXER("AIF1ADC1L Mixer", SND_SOC_NOPM, 0, 0,
1036 aif1adc1l_mix, ARRAY_SIZE(aif1adc1l_mix)), 1208 aif1adc1l_mix, ARRAY_SIZE(aif1adc1l_mix)),
@@ -1059,10 +1231,12 @@ SND_SOC_DAPM_AIF_OUT("AIF2ADCL", NULL, 0,
1059 WM8994_POWER_MANAGEMENT_4, 13, 0), 1231 WM8994_POWER_MANAGEMENT_4, 13, 0),
1060SND_SOC_DAPM_AIF_OUT("AIF2ADCR", NULL, 0, 1232SND_SOC_DAPM_AIF_OUT("AIF2ADCR", NULL, 0,
1061 WM8994_POWER_MANAGEMENT_4, 12, 0), 1233 WM8994_POWER_MANAGEMENT_4, 12, 0),
1062SND_SOC_DAPM_AIF_IN("AIF2DACL", NULL, 0, 1234SND_SOC_DAPM_AIF_IN_E("AIF2DACL", NULL, 0,
1063 WM8994_POWER_MANAGEMENT_5, 13, 0), 1235 WM8994_POWER_MANAGEMENT_5, 13, 0, wm8958_aif_ev,
1064SND_SOC_DAPM_AIF_IN("AIF2DACR", NULL, 0, 1236 SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD),
1065 WM8994_POWER_MANAGEMENT_5, 12, 0), 1237SND_SOC_DAPM_AIF_IN_E("AIF2DACR", NULL, 0,
1238 WM8994_POWER_MANAGEMENT_5, 12, 0, wm8958_aif_ev,
1239 SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD),
1066 1240
1067SND_SOC_DAPM_AIF_IN("AIF1DACDAT", "AIF1 Playback", 0, SND_SOC_NOPM, 0, 0), 1241SND_SOC_DAPM_AIF_IN("AIF1DACDAT", "AIF1 Playback", 0, SND_SOC_NOPM, 0, 0),
1068SND_SOC_DAPM_AIF_IN("AIF2DACDAT", "AIF2 Playback", 0, SND_SOC_NOPM, 0, 0), 1242SND_SOC_DAPM_AIF_IN("AIF2DACDAT", "AIF2 Playback", 0, SND_SOC_NOPM, 0, 0),