|
@@ -383,6 +383,8 @@ static int wm8994_get_drc_enum(struct snd_kcontrol *kcontrol,
|
|
|
struct wm8994_priv *wm8994 = snd_soc_codec_get_drvdata(codec);
|
|
|
int drc = wm8994_get_drc(kcontrol->id.name);
|
|
|
|
|
|
+ if (drc < 0)
|
|
|
+ return drc;
|
|
|
ucontrol->value.enumerated.item[0] = wm8994->drc_cfg[drc];
|
|
|
|
|
|
return 0;
|
|
@@ -488,6 +490,9 @@ static int wm8994_get_retune_mobile_enum(struct snd_kcontrol *kcontrol,
|
|
|
struct wm8994_priv *wm8994 = snd_soc_codec_get_drvdata(codec);
|
|
|
int block = wm8994_get_retune_mobile_block(kcontrol->id.name);
|
|
|
|
|
|
+ if (block < 0)
|
|
|
+ return block;
|
|
|
+
|
|
|
ucontrol->value.enumerated.item[0] = wm8994->retune_mobile_cfg[block];
|
|
|
|
|
|
return 0;
|
|
@@ -1031,7 +1036,7 @@ static int aif1clk_ev(struct snd_soc_dapm_widget *w,
|
|
|
{
|
|
|
struct snd_soc_codec *codec = w->codec;
|
|
|
struct wm8994_priv *wm8994 = snd_soc_codec_get_drvdata(codec);
|
|
|
- struct wm8994 *control = codec->control_data;
|
|
|
+ struct wm8994 *control = wm8994->wm8994;
|
|
|
int mask = WM8994_AIF1DAC1L_ENA | WM8994_AIF1DAC1R_ENA;
|
|
|
int i;
|
|
|
int dac;
|
|
@@ -3833,6 +3838,11 @@ static irqreturn_t wm8958_mic_irq(int irq, void *data)
|
|
|
dev_dbg(codec->dev, "Ignoring removed jack\n");
|
|
|
return IRQ_HANDLED;
|
|
|
}
|
|
|
+ } else if (!(reg & WM8958_MICD_STS)) {
|
|
|
+ snd_soc_jack_report(wm8994->micdet[0].jack, 0,
|
|
|
+ SND_JACK_MECHANICAL | SND_JACK_HEADSET |
|
|
|
+ wm8994->btn_mask);
|
|
|
+ goto out;
|
|
|
}
|
|
|
|
|
|
if (wm8994->mic_detecting)
|