Commit c472b939 authored by Lars-Peter Clausen's avatar Lars-Peter Clausen Committed by Mark Brown

ASoC: sn95031: Pass CODEC to sn95031_jack_detection()

The sn95031 driver currently gets the CODEC implicitly from the jack that is
passed to sn95031_jack_detection(). But the codec field is going to be
removed from the snd_soc_jack struct, so refactor things to pass the CODEC
explicitly.
Signed-off-by: default avatarLars-Peter Clausen <lars@metafoo.de>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent c517d838
...@@ -783,19 +783,21 @@ static inline void sn95031_enable_jack_btn(struct snd_soc_codec *codec) ...@@ -783,19 +783,21 @@ static inline void sn95031_enable_jack_btn(struct snd_soc_codec *codec)
snd_soc_write(codec, SN95031_BTNCTRL2, 0x01); snd_soc_write(codec, SN95031_BTNCTRL2, 0x01);
} }
static int sn95031_get_headset_state(struct snd_soc_jack *mfld_jack) static int sn95031_get_headset_state(struct snd_soc_codec *codec,
struct snd_soc_jack *mfld_jack)
{ {
int micbias = sn95031_get_mic_bias(mfld_jack->codec); int micbias = sn95031_get_mic_bias(codec);
int jack_type = snd_soc_jack_get_type(mfld_jack, micbias); int jack_type = snd_soc_jack_get_type(mfld_jack, micbias);
pr_debug("jack type detected = %d\n", jack_type); pr_debug("jack type detected = %d\n", jack_type);
if (jack_type == SND_JACK_HEADSET) if (jack_type == SND_JACK_HEADSET)
sn95031_enable_jack_btn(mfld_jack->codec); sn95031_enable_jack_btn(codec);
return jack_type; return jack_type;
} }
void sn95031_jack_detection(struct mfld_jack_data *jack_data) void sn95031_jack_detection(struct snd_soc_codec *codec,
struct mfld_jack_data *jack_data)
{ {
unsigned int status; unsigned int status;
unsigned int mask = SND_JACK_BTN_0 | SND_JACK_BTN_1 | SND_JACK_HEADSET; unsigned int mask = SND_JACK_BTN_0 | SND_JACK_BTN_1 | SND_JACK_HEADSET;
...@@ -809,11 +811,11 @@ void sn95031_jack_detection(struct mfld_jack_data *jack_data) ...@@ -809,11 +811,11 @@ void sn95031_jack_detection(struct mfld_jack_data *jack_data)
status = SND_JACK_HEADSET | SND_JACK_BTN_1; status = SND_JACK_HEADSET | SND_JACK_BTN_1;
} else if (jack_data->intr_id & 0x4) { } else if (jack_data->intr_id & 0x4) {
pr_debug("headset or headphones inserted\n"); pr_debug("headset or headphones inserted\n");
status = sn95031_get_headset_state(jack_data->mfld_jack); status = sn95031_get_headset_state(codec, jack_data->mfld_jack);
} else if (jack_data->intr_id & 0x8) { } else if (jack_data->intr_id & 0x8) {
pr_debug("headset or headphones removed\n"); pr_debug("headset or headphones removed\n");
status = 0; status = 0;
sn95031_disable_jack_btn(jack_data->mfld_jack->codec); sn95031_disable_jack_btn(codec);
} else { } else {
pr_err("unidentified interrupt\n"); pr_err("unidentified interrupt\n");
return; return;
......
...@@ -127,6 +127,7 @@ struct mfld_jack_data { ...@@ -127,6 +127,7 @@ struct mfld_jack_data {
struct snd_soc_jack *mfld_jack; struct snd_soc_jack *mfld_jack;
}; };
extern void sn95031_jack_detection(struct mfld_jack_data *jack_data); extern void sn95031_jack_detection(struct snd_soc_codec *codec,
struct mfld_jack_data *jack_data);
#endif #endif
...@@ -228,10 +228,13 @@ static void mfld_jack_check(unsigned int intr_status) ...@@ -228,10 +228,13 @@ static void mfld_jack_check(unsigned int intr_status)
{ {
struct mfld_jack_data jack_data; struct mfld_jack_data jack_data;
if (!mfld_codec)
return;
jack_data.mfld_jack = &mfld_jack; jack_data.mfld_jack = &mfld_jack;
jack_data.intr_id = intr_status; jack_data.intr_id = intr_status;
sn95031_jack_detection(&jack_data); sn95031_jack_detection(mfld_codec, &jack_data);
/* TODO: add american headset detection post gpiolib support */ /* TODO: add american headset detection post gpiolib support */
} }
...@@ -240,8 +243,6 @@ static int mfld_init(struct snd_soc_pcm_runtime *runtime) ...@@ -240,8 +243,6 @@ static int mfld_init(struct snd_soc_pcm_runtime *runtime)
struct snd_soc_dapm_context *dapm = &runtime->card->dapm; struct snd_soc_dapm_context *dapm = &runtime->card->dapm;
int ret_val; int ret_val;
mfld_codec = runtime->codec;
/* default is earpiece pin, userspace sets it explcitly */ /* default is earpiece pin, userspace sets it explcitly */
snd_soc_dapm_disable_pin(dapm, "Headphones"); snd_soc_dapm_disable_pin(dapm, "Headphones");
/* default is lineout NC, userspace sets it explcitly */ /* default is lineout NC, userspace sets it explcitly */
...@@ -254,7 +255,7 @@ static int mfld_init(struct snd_soc_pcm_runtime *runtime) ...@@ -254,7 +255,7 @@ static int mfld_init(struct snd_soc_pcm_runtime *runtime)
snd_soc_dapm_disable_pin(dapm, "LINEINR"); snd_soc_dapm_disable_pin(dapm, "LINEINR");
/* Headset and button jack detection */ /* Headset and button jack detection */
ret_val = snd_soc_jack_new(mfld_codec, "Intel(R) MID Audio Jack", ret_val = snd_soc_jack_new(runtime->codec, "Intel(R) MID Audio Jack",
SND_JACK_HEADSET | SND_JACK_BTN_0 | SND_JACK_HEADSET | SND_JACK_BTN_0 |
SND_JACK_BTN_1, &mfld_jack); SND_JACK_BTN_1, &mfld_jack);
if (ret_val) { if (ret_val) {
...@@ -275,6 +276,8 @@ static int mfld_init(struct snd_soc_pcm_runtime *runtime) ...@@ -275,6 +276,8 @@ static int mfld_init(struct snd_soc_pcm_runtime *runtime)
return ret_val; return ret_val;
} }
mfld_codec = runtime->codec;
/* we want to check if anything is inserted at boot, /* we want to check if anything is inserted at boot,
* so send a fake event to codec and it will read adc * so send a fake event to codec and it will read adc
* to find if anything is there or not */ * to find if anything is there or not */
...@@ -359,8 +362,6 @@ static irqreturn_t snd_mfld_jack_detection(int irq, void *data) ...@@ -359,8 +362,6 @@ static irqreturn_t snd_mfld_jack_detection(int irq, void *data)
{ {
struct mfld_mc_private *mc_drv_ctx = (struct mfld_mc_private *) data; struct mfld_mc_private *mc_drv_ctx = (struct mfld_mc_private *) data;
if (mfld_jack.codec == NULL)
return IRQ_HANDLED;
mfld_jack_check(mc_drv_ctx->interrupt_status); mfld_jack_check(mc_drv_ctx->interrupt_status);
return IRQ_HANDLED; return IRQ_HANDLED;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment