mirror of
https://gitee.com/openharmony/kernel_linux
synced 2025-02-23 13:12:26 +00:00
sound fixes for 3.4-rc5
A workaround for an ASUS laptop and a few ASoC changes; most of the commits are tagged for stable, too. -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.18 (GNU/Linux) iQIcBAABAgAGBQJPmUKpAAoJEGwxgFQ9KSmk3eIP/iGu1az70dixqEjfOifTcJcv V3VS5HIko0n3+iAkBQr+lo7RLnMQsqy5DQzv6h8FVzuyYgYVvT2eKLPEUh1p+LNw tZaosfrrnvGhthF5uDVKUeDe69wujfW68gLJJdp+dnUU28RG/cCuUu4+ae2nCBE+ Glus4Zn5wC06P2Uuv67AHYiraCahiuwbrrXAYa0X8glEE7Vpg5t09d3l/KHBIbFH g46UF5D7LYoMHEThgeyYgq8lEK2THUJlLl887dZTjSqS9ps52cOyRlQmljRvvDXw BNdOSSu0YqRBX0ja7kIkadCVfZpQEyqfW6ISETozchPYogO9SHXz0plEB/OXWB+q dUwJGRdoWeJtW/jyd4RHIJlxYektY1ygUsrCeKdIM3lO3M8RnwMosUcy0rW9yKsA C8BIJz6KdEsiOHpTvvadln5MoarvoPIQXdw8yahJnisd5Kbrx1bQX8PPLhOatRpF U125ywvif5miV66+0ocnTB2eNJTy4zyokpR6JAQ1z9I+IZOF4mwH+OgLEGlTm28k Dn/UCxYhEGvLH0vrtU/WiPXE42Jw1ZeRRn56ErWPWOpRBzaJjK4hRu9zFK3cL9xh bBfP4hsMq2X8lW5nIFz5FLeocnIaMe0CCyNH9X+EoH+BS9HVx274a63t0te8fKtV E457r7iBnssONY4WIG2l =KjOE -----END PGP SIGNATURE----- Merge tag 'sound-3.4' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound Pull sound fixes from Takashi Iwai: "A workaround for an ASUS laptop and a few ASoC changes; most of the commits are tagged for stable, too." * tag 'sound-3.4' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound: ASoC: wm8994: Improve sequencing of AIF channel enables ALSA: HDA: Add external mic quirk for Asus Zenbook UX31E ASoC: fsi: update for dmaengine prep_slave_sg fallout. ASoC: core: Fix card RTD count for deferred probe. ASoC: cs42l73: don't use negative array index ASoC: dapm: Ensure power gets managed for line widgets
This commit is contained in:
commit
2390c0fca6
@ -6109,6 +6109,7 @@ static const struct alc_fixup alc269_fixups[] = {
|
|||||||
|
|
||||||
static const struct snd_pci_quirk alc269_fixup_tbl[] = {
|
static const struct snd_pci_quirk alc269_fixup_tbl[] = {
|
||||||
SND_PCI_QUIRK(0x103c, 0x1586, "HP", ALC269_FIXUP_MIC2_MUTE_LED),
|
SND_PCI_QUIRK(0x103c, 0x1586, "HP", ALC269_FIXUP_MIC2_MUTE_LED),
|
||||||
|
SND_PCI_QUIRK(0x1043, 0x1427, "Asus Zenbook UX31E", ALC269VB_FIXUP_DMIC),
|
||||||
SND_PCI_QUIRK(0x1043, 0x1a13, "Asus G73Jw", ALC269_FIXUP_ASUS_G73JW),
|
SND_PCI_QUIRK(0x1043, 0x1a13, "Asus G73Jw", ALC269_FIXUP_ASUS_G73JW),
|
||||||
SND_PCI_QUIRK(0x1043, 0x16e3, "ASUS UX50", ALC269_FIXUP_STEREO_DMIC),
|
SND_PCI_QUIRK(0x1043, 0x16e3, "ASUS UX50", ALC269_FIXUP_STEREO_DMIC),
|
||||||
SND_PCI_QUIRK(0x1043, 0x831a, "ASUS P901", ALC269_FIXUP_STEREO_DMIC),
|
SND_PCI_QUIRK(0x1043, 0x831a, "ASUS P901", ALC269_FIXUP_STEREO_DMIC),
|
||||||
|
@ -929,6 +929,8 @@ static int cs42l73_set_mclk(struct snd_soc_dai *dai, unsigned int freq)
|
|||||||
|
|
||||||
/* MCLKX -> MCLK */
|
/* MCLKX -> MCLK */
|
||||||
mclkx_coeff = cs42l73_get_mclkx_coeff(freq);
|
mclkx_coeff = cs42l73_get_mclkx_coeff(freq);
|
||||||
|
if (mclkx_coeff < 0)
|
||||||
|
return mclkx_coeff;
|
||||||
|
|
||||||
mclk = cs42l73_mclkx_coeffs[mclkx_coeff].mclkx /
|
mclk = cs42l73_mclkx_coeffs[mclkx_coeff].mclkx /
|
||||||
cs42l73_mclkx_coeffs[mclkx_coeff].ratio;
|
cs42l73_mclkx_coeffs[mclkx_coeff].ratio;
|
||||||
|
@ -1000,6 +1000,204 @@ static void wm8994_update_class_w(struct snd_soc_codec *codec)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int aif1clk_ev(struct snd_soc_dapm_widget *w,
|
||||||
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
|
{
|
||||||
|
struct snd_soc_codec *codec = w->codec;
|
||||||
|
struct wm8994 *control = codec->control_data;
|
||||||
|
int mask = WM8994_AIF1DAC1L_ENA | WM8994_AIF1DAC1R_ENA;
|
||||||
|
int dac;
|
||||||
|
int adc;
|
||||||
|
int val;
|
||||||
|
|
||||||
|
switch (control->type) {
|
||||||
|
case WM8994:
|
||||||
|
case WM8958:
|
||||||
|
mask |= WM8994_AIF1DAC2L_ENA | WM8994_AIF1DAC2R_ENA;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (event) {
|
||||||
|
case SND_SOC_DAPM_PRE_PMU:
|
||||||
|
val = snd_soc_read(codec, WM8994_AIF1_CONTROL_1);
|
||||||
|
if ((val & WM8994_AIF1ADCL_SRC) &&
|
||||||
|
(val & WM8994_AIF1ADCR_SRC))
|
||||||
|
adc = WM8994_AIF1ADC1R_ENA | WM8994_AIF1ADC2R_ENA;
|
||||||
|
else if (!(val & WM8994_AIF1ADCL_SRC) &&
|
||||||
|
!(val & WM8994_AIF1ADCR_SRC))
|
||||||
|
adc = WM8994_AIF1ADC1L_ENA | WM8994_AIF1ADC2L_ENA;
|
||||||
|
else
|
||||||
|
adc = WM8994_AIF1ADC1R_ENA | WM8994_AIF1ADC2R_ENA |
|
||||||
|
WM8994_AIF1ADC1L_ENA | WM8994_AIF1ADC2L_ENA;
|
||||||
|
|
||||||
|
val = snd_soc_read(codec, WM8994_AIF1_CONTROL_2);
|
||||||
|
if ((val & WM8994_AIF1DACL_SRC) &&
|
||||||
|
(val & WM8994_AIF1DACR_SRC))
|
||||||
|
dac = WM8994_AIF1DAC1R_ENA | WM8994_AIF1DAC2R_ENA;
|
||||||
|
else if (!(val & WM8994_AIF1DACL_SRC) &&
|
||||||
|
!(val & WM8994_AIF1DACR_SRC))
|
||||||
|
dac = WM8994_AIF1DAC1L_ENA | WM8994_AIF1DAC2L_ENA;
|
||||||
|
else
|
||||||
|
dac = WM8994_AIF1DAC1R_ENA | WM8994_AIF1DAC2R_ENA |
|
||||||
|
WM8994_AIF1DAC1L_ENA | WM8994_AIF1DAC2L_ENA;
|
||||||
|
|
||||||
|
snd_soc_update_bits(codec, WM8994_POWER_MANAGEMENT_4,
|
||||||
|
mask, adc);
|
||||||
|
snd_soc_update_bits(codec, WM8994_POWER_MANAGEMENT_5,
|
||||||
|
mask, dac);
|
||||||
|
snd_soc_update_bits(codec, WM8994_CLOCKING_1,
|
||||||
|
WM8994_AIF1DSPCLK_ENA |
|
||||||
|
WM8994_SYSDSPCLK_ENA,
|
||||||
|
WM8994_AIF1DSPCLK_ENA |
|
||||||
|
WM8994_SYSDSPCLK_ENA);
|
||||||
|
snd_soc_update_bits(codec, WM8994_POWER_MANAGEMENT_4, mask,
|
||||||
|
WM8994_AIF1ADC1R_ENA |
|
||||||
|
WM8994_AIF1ADC1L_ENA |
|
||||||
|
WM8994_AIF1ADC2R_ENA |
|
||||||
|
WM8994_AIF1ADC2L_ENA);
|
||||||
|
snd_soc_update_bits(codec, WM8994_POWER_MANAGEMENT_5, mask,
|
||||||
|
WM8994_AIF1DAC1R_ENA |
|
||||||
|
WM8994_AIF1DAC1L_ENA |
|
||||||
|
WM8994_AIF1DAC2R_ENA |
|
||||||
|
WM8994_AIF1DAC2L_ENA);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SND_SOC_DAPM_PRE_PMD:
|
||||||
|
case SND_SOC_DAPM_POST_PMD:
|
||||||
|
snd_soc_update_bits(codec, WM8994_POWER_MANAGEMENT_5,
|
||||||
|
mask, 0);
|
||||||
|
snd_soc_update_bits(codec, WM8994_POWER_MANAGEMENT_4,
|
||||||
|
mask, 0);
|
||||||
|
|
||||||
|
val = snd_soc_read(codec, WM8994_CLOCKING_1);
|
||||||
|
if (val & WM8994_AIF2DSPCLK_ENA)
|
||||||
|
val = WM8994_SYSDSPCLK_ENA;
|
||||||
|
else
|
||||||
|
val = 0;
|
||||||
|
snd_soc_update_bits(codec, WM8994_CLOCKING_1,
|
||||||
|
WM8994_SYSDSPCLK_ENA |
|
||||||
|
WM8994_AIF1DSPCLK_ENA, val);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int aif2clk_ev(struct snd_soc_dapm_widget *w,
|
||||||
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
|
{
|
||||||
|
struct snd_soc_codec *codec = w->codec;
|
||||||
|
int dac;
|
||||||
|
int adc;
|
||||||
|
int val;
|
||||||
|
|
||||||
|
switch (event) {
|
||||||
|
case SND_SOC_DAPM_PRE_PMU:
|
||||||
|
val = snd_soc_read(codec, WM8994_AIF2_CONTROL_1);
|
||||||
|
if ((val & WM8994_AIF2ADCL_SRC) &&
|
||||||
|
(val & WM8994_AIF2ADCR_SRC))
|
||||||
|
adc = WM8994_AIF2ADCR_ENA;
|
||||||
|
else if (!(val & WM8994_AIF2ADCL_SRC) &&
|
||||||
|
!(val & WM8994_AIF2ADCR_SRC))
|
||||||
|
adc = WM8994_AIF2ADCL_ENA;
|
||||||
|
else
|
||||||
|
adc = WM8994_AIF2ADCL_ENA | WM8994_AIF2ADCR_ENA;
|
||||||
|
|
||||||
|
|
||||||
|
val = snd_soc_read(codec, WM8994_AIF2_CONTROL_2);
|
||||||
|
if ((val & WM8994_AIF2DACL_SRC) &&
|
||||||
|
(val & WM8994_AIF2DACR_SRC))
|
||||||
|
dac = WM8994_AIF2DACR_ENA;
|
||||||
|
else if (!(val & WM8994_AIF2DACL_SRC) &&
|
||||||
|
!(val & WM8994_AIF2DACR_SRC))
|
||||||
|
dac = WM8994_AIF2DACL_ENA;
|
||||||
|
else
|
||||||
|
dac = WM8994_AIF2DACL_ENA | WM8994_AIF2DACR_ENA;
|
||||||
|
|
||||||
|
snd_soc_update_bits(codec, WM8994_POWER_MANAGEMENT_4,
|
||||||
|
WM8994_AIF2ADCL_ENA |
|
||||||
|
WM8994_AIF2ADCR_ENA, adc);
|
||||||
|
snd_soc_update_bits(codec, WM8994_POWER_MANAGEMENT_5,
|
||||||
|
WM8994_AIF2DACL_ENA |
|
||||||
|
WM8994_AIF2DACR_ENA, dac);
|
||||||
|
snd_soc_update_bits(codec, WM8994_CLOCKING_1,
|
||||||
|
WM8994_AIF2DSPCLK_ENA |
|
||||||
|
WM8994_SYSDSPCLK_ENA,
|
||||||
|
WM8994_AIF2DSPCLK_ENA |
|
||||||
|
WM8994_SYSDSPCLK_ENA);
|
||||||
|
snd_soc_update_bits(codec, WM8994_POWER_MANAGEMENT_4,
|
||||||
|
WM8994_AIF2ADCL_ENA |
|
||||||
|
WM8994_AIF2ADCR_ENA,
|
||||||
|
WM8994_AIF2ADCL_ENA |
|
||||||
|
WM8994_AIF2ADCR_ENA);
|
||||||
|
snd_soc_update_bits(codec, WM8994_POWER_MANAGEMENT_5,
|
||||||
|
WM8994_AIF2DACL_ENA |
|
||||||
|
WM8994_AIF2DACR_ENA,
|
||||||
|
WM8994_AIF2DACL_ENA |
|
||||||
|
WM8994_AIF2DACR_ENA);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SND_SOC_DAPM_PRE_PMD:
|
||||||
|
case SND_SOC_DAPM_POST_PMD:
|
||||||
|
snd_soc_update_bits(codec, WM8994_POWER_MANAGEMENT_5,
|
||||||
|
WM8994_AIF2DACL_ENA |
|
||||||
|
WM8994_AIF2DACR_ENA, 0);
|
||||||
|
snd_soc_update_bits(codec, WM8994_POWER_MANAGEMENT_5,
|
||||||
|
WM8994_AIF2ADCL_ENA |
|
||||||
|
WM8994_AIF2ADCR_ENA, 0);
|
||||||
|
|
||||||
|
val = snd_soc_read(codec, WM8994_CLOCKING_1);
|
||||||
|
if (val & WM8994_AIF1DSPCLK_ENA)
|
||||||
|
val = WM8994_SYSDSPCLK_ENA;
|
||||||
|
else
|
||||||
|
val = 0;
|
||||||
|
snd_soc_update_bits(codec, WM8994_CLOCKING_1,
|
||||||
|
WM8994_SYSDSPCLK_ENA |
|
||||||
|
WM8994_AIF2DSPCLK_ENA, val);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int aif1clk_late_ev(struct snd_soc_dapm_widget *w,
|
||||||
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
|
{
|
||||||
|
struct snd_soc_codec *codec = w->codec;
|
||||||
|
struct wm8994_priv *wm8994 = snd_soc_codec_get_drvdata(codec);
|
||||||
|
|
||||||
|
switch (event) {
|
||||||
|
case SND_SOC_DAPM_PRE_PMU:
|
||||||
|
wm8994->aif1clk_enable = 1;
|
||||||
|
break;
|
||||||
|
case SND_SOC_DAPM_POST_PMD:
|
||||||
|
wm8994->aif1clk_disable = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int aif2clk_late_ev(struct snd_soc_dapm_widget *w,
|
||||||
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
|
{
|
||||||
|
struct snd_soc_codec *codec = w->codec;
|
||||||
|
struct wm8994_priv *wm8994 = snd_soc_codec_get_drvdata(codec);
|
||||||
|
|
||||||
|
switch (event) {
|
||||||
|
case SND_SOC_DAPM_PRE_PMU:
|
||||||
|
wm8994->aif2clk_enable = 1;
|
||||||
|
break;
|
||||||
|
case SND_SOC_DAPM_POST_PMD:
|
||||||
|
wm8994->aif2clk_disable = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int late_enable_ev(struct snd_soc_dapm_widget *w,
|
static int late_enable_ev(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
@ -1009,12 +1207,14 @@ static int late_enable_ev(struct snd_soc_dapm_widget *w,
|
|||||||
switch (event) {
|
switch (event) {
|
||||||
case SND_SOC_DAPM_PRE_PMU:
|
case SND_SOC_DAPM_PRE_PMU:
|
||||||
if (wm8994->aif1clk_enable) {
|
if (wm8994->aif1clk_enable) {
|
||||||
|
aif1clk_ev(w, kcontrol, event);
|
||||||
snd_soc_update_bits(codec, WM8994_AIF1_CLOCKING_1,
|
snd_soc_update_bits(codec, WM8994_AIF1_CLOCKING_1,
|
||||||
WM8994_AIF1CLK_ENA_MASK,
|
WM8994_AIF1CLK_ENA_MASK,
|
||||||
WM8994_AIF1CLK_ENA);
|
WM8994_AIF1CLK_ENA);
|
||||||
wm8994->aif1clk_enable = 0;
|
wm8994->aif1clk_enable = 0;
|
||||||
}
|
}
|
||||||
if (wm8994->aif2clk_enable) {
|
if (wm8994->aif2clk_enable) {
|
||||||
|
aif2clk_ev(w, kcontrol, event);
|
||||||
snd_soc_update_bits(codec, WM8994_AIF2_CLOCKING_1,
|
snd_soc_update_bits(codec, WM8994_AIF2_CLOCKING_1,
|
||||||
WM8994_AIF2CLK_ENA_MASK,
|
WM8994_AIF2CLK_ENA_MASK,
|
||||||
WM8994_AIF2CLK_ENA);
|
WM8994_AIF2CLK_ENA);
|
||||||
@ -1040,11 +1240,13 @@ static int late_disable_ev(struct snd_soc_dapm_widget *w,
|
|||||||
if (wm8994->aif1clk_disable) {
|
if (wm8994->aif1clk_disable) {
|
||||||
snd_soc_update_bits(codec, WM8994_AIF1_CLOCKING_1,
|
snd_soc_update_bits(codec, WM8994_AIF1_CLOCKING_1,
|
||||||
WM8994_AIF1CLK_ENA_MASK, 0);
|
WM8994_AIF1CLK_ENA_MASK, 0);
|
||||||
|
aif1clk_ev(w, kcontrol, event);
|
||||||
wm8994->aif1clk_disable = 0;
|
wm8994->aif1clk_disable = 0;
|
||||||
}
|
}
|
||||||
if (wm8994->aif2clk_disable) {
|
if (wm8994->aif2clk_disable) {
|
||||||
snd_soc_update_bits(codec, WM8994_AIF2_CLOCKING_1,
|
snd_soc_update_bits(codec, WM8994_AIF2_CLOCKING_1,
|
||||||
WM8994_AIF2CLK_ENA_MASK, 0);
|
WM8994_AIF2CLK_ENA_MASK, 0);
|
||||||
|
aif2clk_ev(w, kcontrol, event);
|
||||||
wm8994->aif2clk_disable = 0;
|
wm8994->aif2clk_disable = 0;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -1053,42 +1255,6 @@ static int late_disable_ev(struct snd_soc_dapm_widget *w,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int aif1clk_ev(struct snd_soc_dapm_widget *w,
|
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
|
||||||
{
|
|
||||||
struct snd_soc_codec *codec = w->codec;
|
|
||||||
struct wm8994_priv *wm8994 = snd_soc_codec_get_drvdata(codec);
|
|
||||||
|
|
||||||
switch (event) {
|
|
||||||
case SND_SOC_DAPM_PRE_PMU:
|
|
||||||
wm8994->aif1clk_enable = 1;
|
|
||||||
break;
|
|
||||||
case SND_SOC_DAPM_POST_PMD:
|
|
||||||
wm8994->aif1clk_disable = 1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int aif2clk_ev(struct snd_soc_dapm_widget *w,
|
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
|
||||||
{
|
|
||||||
struct snd_soc_codec *codec = w->codec;
|
|
||||||
struct wm8994_priv *wm8994 = snd_soc_codec_get_drvdata(codec);
|
|
||||||
|
|
||||||
switch (event) {
|
|
||||||
case SND_SOC_DAPM_PRE_PMU:
|
|
||||||
wm8994->aif2clk_enable = 1;
|
|
||||||
break;
|
|
||||||
case SND_SOC_DAPM_POST_PMD:
|
|
||||||
wm8994->aif2clk_disable = 1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int adc_mux_ev(struct snd_soc_dapm_widget *w,
|
static int adc_mux_ev(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
@ -1385,9 +1551,9 @@ static const struct snd_kcontrol_new aif2dacr_src_mux =
|
|||||||
SOC_DAPM_ENUM("AIF2DACR Mux", aif2dacr_src_enum);
|
SOC_DAPM_ENUM("AIF2DACR Mux", aif2dacr_src_enum);
|
||||||
|
|
||||||
static const struct snd_soc_dapm_widget wm8994_lateclk_revd_widgets[] = {
|
static const struct snd_soc_dapm_widget wm8994_lateclk_revd_widgets[] = {
|
||||||
SND_SOC_DAPM_SUPPLY("AIF1CLK", SND_SOC_NOPM, 0, 0, aif1clk_ev,
|
SND_SOC_DAPM_SUPPLY("AIF1CLK", SND_SOC_NOPM, 0, 0, aif1clk_late_ev,
|
||||||
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
|
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
|
||||||
SND_SOC_DAPM_SUPPLY("AIF2CLK", SND_SOC_NOPM, 0, 0, aif2clk_ev,
|
SND_SOC_DAPM_SUPPLY("AIF2CLK", SND_SOC_NOPM, 0, 0, aif2clk_late_ev,
|
||||||
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
|
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
|
||||||
|
|
||||||
SND_SOC_DAPM_PGA_E("Late DAC1L Enable PGA", SND_SOC_NOPM, 0, 0, NULL, 0,
|
SND_SOC_DAPM_PGA_E("Late DAC1L Enable PGA", SND_SOC_NOPM, 0, 0, NULL, 0,
|
||||||
@ -1416,8 +1582,10 @@ SND_SOC_DAPM_POST("Late Disable PGA", late_disable_ev)
|
|||||||
};
|
};
|
||||||
|
|
||||||
static const struct snd_soc_dapm_widget wm8994_lateclk_widgets[] = {
|
static const struct snd_soc_dapm_widget wm8994_lateclk_widgets[] = {
|
||||||
SND_SOC_DAPM_SUPPLY("AIF1CLK", WM8994_AIF1_CLOCKING_1, 0, 0, NULL, 0),
|
SND_SOC_DAPM_SUPPLY("AIF1CLK", WM8994_AIF1_CLOCKING_1, 0, 0, aif1clk_ev,
|
||||||
SND_SOC_DAPM_SUPPLY("AIF2CLK", WM8994_AIF2_CLOCKING_1, 0, 0, NULL, 0),
|
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_PRE_PMD),
|
||||||
|
SND_SOC_DAPM_SUPPLY("AIF2CLK", WM8994_AIF2_CLOCKING_1, 0, 0, aif2clk_ev,
|
||||||
|
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_PRE_PMD),
|
||||||
SND_SOC_DAPM_PGA("Direct Voice", SND_SOC_NOPM, 0, 0, NULL, 0),
|
SND_SOC_DAPM_PGA("Direct Voice", SND_SOC_NOPM, 0, 0, NULL, 0),
|
||||||
SND_SOC_DAPM_MIXER("SPKL", WM8994_POWER_MANAGEMENT_3, 8, 0,
|
SND_SOC_DAPM_MIXER("SPKL", WM8994_POWER_MANAGEMENT_3, 8, 0,
|
||||||
left_speaker_mixer, ARRAY_SIZE(left_speaker_mixer)),
|
left_speaker_mixer, ARRAY_SIZE(left_speaker_mixer)),
|
||||||
@ -1470,30 +1638,30 @@ SND_SOC_DAPM_SUPPLY("VMID", SND_SOC_NOPM, 0, 0, vmid_event,
|
|||||||
SND_SOC_DAPM_SUPPLY("CLK_SYS", SND_SOC_NOPM, 0, 0, clk_sys_event,
|
SND_SOC_DAPM_SUPPLY("CLK_SYS", SND_SOC_NOPM, 0, 0, clk_sys_event,
|
||||||
SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD),
|
SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD),
|
||||||
|
|
||||||
SND_SOC_DAPM_SUPPLY("DSP1CLK", WM8994_CLOCKING_1, 3, 0, NULL, 0),
|
SND_SOC_DAPM_SUPPLY("DSP1CLK", SND_SOC_NOPM, 3, 0, NULL, 0),
|
||||||
SND_SOC_DAPM_SUPPLY("DSP2CLK", WM8994_CLOCKING_1, 2, 0, NULL, 0),
|
SND_SOC_DAPM_SUPPLY("DSP2CLK", SND_SOC_NOPM, 2, 0, NULL, 0),
|
||||||
SND_SOC_DAPM_SUPPLY("DSPINTCLK", WM8994_CLOCKING_1, 1, 0, NULL, 0),
|
SND_SOC_DAPM_SUPPLY("DSPINTCLK", SND_SOC_NOPM, 1, 0, NULL, 0),
|
||||||
|
|
||||||
SND_SOC_DAPM_AIF_OUT("AIF1ADC1L", NULL,
|
SND_SOC_DAPM_AIF_OUT("AIF1ADC1L", NULL,
|
||||||
0, WM8994_POWER_MANAGEMENT_4, 9, 0),
|
0, SND_SOC_NOPM, 9, 0),
|
||||||
SND_SOC_DAPM_AIF_OUT("AIF1ADC1R", NULL,
|
SND_SOC_DAPM_AIF_OUT("AIF1ADC1R", NULL,
|
||||||
0, WM8994_POWER_MANAGEMENT_4, 8, 0),
|
0, SND_SOC_NOPM, 8, 0),
|
||||||
SND_SOC_DAPM_AIF_IN_E("AIF1DAC1L", NULL, 0,
|
SND_SOC_DAPM_AIF_IN_E("AIF1DAC1L", NULL, 0,
|
||||||
WM8994_POWER_MANAGEMENT_5, 9, 0, wm8958_aif_ev,
|
SND_SOC_NOPM, 9, 0, wm8958_aif_ev,
|
||||||
SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_POST_PMD),
|
SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_POST_PMD),
|
||||||
SND_SOC_DAPM_AIF_IN_E("AIF1DAC1R", NULL, 0,
|
SND_SOC_DAPM_AIF_IN_E("AIF1DAC1R", NULL, 0,
|
||||||
WM8994_POWER_MANAGEMENT_5, 8, 0, wm8958_aif_ev,
|
SND_SOC_NOPM, 8, 0, wm8958_aif_ev,
|
||||||
SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_POST_PMD),
|
SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_POST_PMD),
|
||||||
|
|
||||||
SND_SOC_DAPM_AIF_OUT("AIF1ADC2L", NULL,
|
SND_SOC_DAPM_AIF_OUT("AIF1ADC2L", NULL,
|
||||||
0, WM8994_POWER_MANAGEMENT_4, 11, 0),
|
0, SND_SOC_NOPM, 11, 0),
|
||||||
SND_SOC_DAPM_AIF_OUT("AIF1ADC2R", NULL,
|
SND_SOC_DAPM_AIF_OUT("AIF1ADC2R", NULL,
|
||||||
0, WM8994_POWER_MANAGEMENT_4, 10, 0),
|
0, SND_SOC_NOPM, 10, 0),
|
||||||
SND_SOC_DAPM_AIF_IN_E("AIF1DAC2L", NULL, 0,
|
SND_SOC_DAPM_AIF_IN_E("AIF1DAC2L", NULL, 0,
|
||||||
WM8994_POWER_MANAGEMENT_5, 11, 0, wm8958_aif_ev,
|
SND_SOC_NOPM, 11, 0, wm8958_aif_ev,
|
||||||
SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_POST_PMD),
|
SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_POST_PMD),
|
||||||
SND_SOC_DAPM_AIF_IN_E("AIF1DAC2R", NULL, 0,
|
SND_SOC_DAPM_AIF_IN_E("AIF1DAC2R", NULL, 0,
|
||||||
WM8994_POWER_MANAGEMENT_5, 10, 0, wm8958_aif_ev,
|
SND_SOC_NOPM, 10, 0, wm8958_aif_ev,
|
||||||
SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_POST_PMD),
|
SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_POST_PMD),
|
||||||
|
|
||||||
SND_SOC_DAPM_MIXER("AIF1ADC1L Mixer", SND_SOC_NOPM, 0, 0,
|
SND_SOC_DAPM_MIXER("AIF1ADC1L Mixer", SND_SOC_NOPM, 0, 0,
|
||||||
@ -1520,14 +1688,14 @@ SND_SOC_DAPM_MIXER("DAC1R Mixer", SND_SOC_NOPM, 0, 0,
|
|||||||
dac1r_mix, ARRAY_SIZE(dac1r_mix)),
|
dac1r_mix, ARRAY_SIZE(dac1r_mix)),
|
||||||
|
|
||||||
SND_SOC_DAPM_AIF_OUT("AIF2ADCL", NULL, 0,
|
SND_SOC_DAPM_AIF_OUT("AIF2ADCL", NULL, 0,
|
||||||
WM8994_POWER_MANAGEMENT_4, 13, 0),
|
SND_SOC_NOPM, 13, 0),
|
||||||
SND_SOC_DAPM_AIF_OUT("AIF2ADCR", NULL, 0,
|
SND_SOC_DAPM_AIF_OUT("AIF2ADCR", NULL, 0,
|
||||||
WM8994_POWER_MANAGEMENT_4, 12, 0),
|
SND_SOC_NOPM, 12, 0),
|
||||||
SND_SOC_DAPM_AIF_IN_E("AIF2DACL", NULL, 0,
|
SND_SOC_DAPM_AIF_IN_E("AIF2DACL", NULL, 0,
|
||||||
WM8994_POWER_MANAGEMENT_5, 13, 0, wm8958_aif_ev,
|
SND_SOC_NOPM, 13, 0, wm8958_aif_ev,
|
||||||
SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD),
|
SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD),
|
||||||
SND_SOC_DAPM_AIF_IN_E("AIF2DACR", NULL, 0,
|
SND_SOC_DAPM_AIF_IN_E("AIF2DACR", NULL, 0,
|
||||||
WM8994_POWER_MANAGEMENT_5, 12, 0, wm8958_aif_ev,
|
SND_SOC_NOPM, 12, 0, wm8958_aif_ev,
|
||||||
SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD),
|
SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD),
|
||||||
|
|
||||||
SND_SOC_DAPM_AIF_IN("AIF1DACDAT", NULL, 0, SND_SOC_NOPM, 0, 0),
|
SND_SOC_DAPM_AIF_IN("AIF1DACDAT", NULL, 0, SND_SOC_NOPM, 0, 0),
|
||||||
|
@ -1001,11 +1001,10 @@ static void fsi_dma_do_tasklet(unsigned long data)
|
|||||||
sg_dma_address(&sg) = buf;
|
sg_dma_address(&sg) = buf;
|
||||||
sg_dma_len(&sg) = len;
|
sg_dma_len(&sg) = len;
|
||||||
|
|
||||||
desc = chan->device->device_prep_slave_sg(chan, &sg, 1, dir,
|
desc = dmaengine_prep_slave_sg(chan, &sg, 1, dir,
|
||||||
DMA_PREP_INTERRUPT |
|
DMA_PREP_INTERRUPT | DMA_CTRL_ACK);
|
||||||
DMA_CTRL_ACK);
|
|
||||||
if (!desc) {
|
if (!desc) {
|
||||||
dev_err(dai->dev, "device_prep_slave_sg() fail\n");
|
dev_err(dai->dev, "dmaengine_prep_slave_sg() fail\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3113,6 +3113,7 @@ int snd_soc_register_card(struct snd_soc_card *card)
|
|||||||
GFP_KERNEL);
|
GFP_KERNEL);
|
||||||
if (card->rtd == NULL)
|
if (card->rtd == NULL)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
card->num_rtd = 0;
|
||||||
card->rtd_aux = &card->rtd[card->num_links];
|
card->rtd_aux = &card->rtd[card->num_links];
|
||||||
|
|
||||||
for (i = 0; i < card->num_links; i++)
|
for (i = 0; i < card->num_links; i++)
|
||||||
|
@ -67,6 +67,7 @@ static int dapm_up_seq[] = {
|
|||||||
[snd_soc_dapm_out_drv] = 10,
|
[snd_soc_dapm_out_drv] = 10,
|
||||||
[snd_soc_dapm_hp] = 10,
|
[snd_soc_dapm_hp] = 10,
|
||||||
[snd_soc_dapm_spk] = 10,
|
[snd_soc_dapm_spk] = 10,
|
||||||
|
[snd_soc_dapm_line] = 10,
|
||||||
[snd_soc_dapm_post] = 11,
|
[snd_soc_dapm_post] = 11,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -75,6 +76,7 @@ static int dapm_down_seq[] = {
|
|||||||
[snd_soc_dapm_adc] = 1,
|
[snd_soc_dapm_adc] = 1,
|
||||||
[snd_soc_dapm_hp] = 2,
|
[snd_soc_dapm_hp] = 2,
|
||||||
[snd_soc_dapm_spk] = 2,
|
[snd_soc_dapm_spk] = 2,
|
||||||
|
[snd_soc_dapm_line] = 2,
|
||||||
[snd_soc_dapm_out_drv] = 2,
|
[snd_soc_dapm_out_drv] = 2,
|
||||||
[snd_soc_dapm_pga] = 4,
|
[snd_soc_dapm_pga] = 4,
|
||||||
[snd_soc_dapm_mixer_named_ctl] = 5,
|
[snd_soc_dapm_mixer_named_ctl] = 5,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user