ASoC: Intel: cht_bsw_max98090_ti: Fix jack initialization
If the ts3a227e audio accessory detection hardware is present and its driver probed, the jack needs to be created before enabling jack detection in the ts3a227e driver. With this patch, the jack is instantiated in the max98090 headset init function if the ts3a227e is present. This fixes a null pointer dereference as the jack detection enabling function in the ts3a driver was called before the jack is created. [minor correction to keep error handling on jack creation the same as before by Pierre Bossart] Signed-off-by: Thierry Escande <thierry.escande@collabora.com> Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Acked-By: Vinod Koul <vinod.koul@intel.com> Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
c809fb1e84
commit
3bbda5a386
@ -166,23 +166,19 @@ static int cht_codec_init(struct snd_soc_pcm_runtime *runtime)
|
||||
struct cht_mc_private *ctx = snd_soc_card_get_drvdata(runtime->card);
|
||||
struct snd_soc_jack *jack = &ctx->jack;
|
||||
|
||||
/**
|
||||
* TI supports 4 butons headset detection
|
||||
* KEY_MEDIA
|
||||
* KEY_VOICECOMMAND
|
||||
* KEY_VOLUMEUP
|
||||
* KEY_VOLUMEDOWN
|
||||
*/
|
||||
if (ctx->ts3a227e_present)
|
||||
jack_type = SND_JACK_HEADPHONE | SND_JACK_MICROPHONE |
|
||||
SND_JACK_BTN_0 | SND_JACK_BTN_1 |
|
||||
SND_JACK_BTN_2 | SND_JACK_BTN_3;
|
||||
else
|
||||
jack_type = SND_JACK_HEADPHONE | SND_JACK_MICROPHONE;
|
||||
if (ctx->ts3a227e_present) {
|
||||
/*
|
||||
* The jack has already been created in the
|
||||
* cht_max98090_headset_init() function.
|
||||
*/
|
||||
snd_soc_jack_notifier_register(jack, &cht_jack_nb);
|
||||
return 0;
|
||||
}
|
||||
|
||||
jack_type = SND_JACK_HEADPHONE | SND_JACK_MICROPHONE;
|
||||
|
||||
ret = snd_soc_card_jack_new(runtime->card, "Headset Jack",
|
||||
jack_type, jack, NULL, 0);
|
||||
|
||||
if (ret) {
|
||||
dev_err(runtime->dev, "Headset Jack creation failed %d\n", ret);
|
||||
return ret;
|
||||
@ -257,6 +253,27 @@ static int cht_max98090_headset_init(struct snd_soc_component *component)
|
||||
{
|
||||
struct snd_soc_card *card = component->card;
|
||||
struct cht_mc_private *ctx = snd_soc_card_get_drvdata(card);
|
||||
struct snd_soc_jack *jack = &ctx->jack;
|
||||
int jack_type;
|
||||
int ret;
|
||||
|
||||
/*
|
||||
* TI supports 4 butons headset detection
|
||||
* KEY_MEDIA
|
||||
* KEY_VOICECOMMAND
|
||||
* KEY_VOLUMEUP
|
||||
* KEY_VOLUMEDOWN
|
||||
*/
|
||||
jack_type = SND_JACK_HEADPHONE | SND_JACK_MICROPHONE |
|
||||
SND_JACK_BTN_0 | SND_JACK_BTN_1 |
|
||||
SND_JACK_BTN_2 | SND_JACK_BTN_3;
|
||||
|
||||
ret = snd_soc_card_jack_new(card, "Headset Jack", jack_type,
|
||||
jack, NULL, 0);
|
||||
if (ret) {
|
||||
dev_err(card->dev, "Headset Jack creation failed %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
return ts3a227e_enable_jack_detect(component, &ctx->jack);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user