lkml.org 
[lkml]   [2018]   [Aug]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.14 19/22] ASoC: Intel: cht_bsw_max98090_ti: Fix jack initialization
    Date
    4.14-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Thierry Escande <thierry.escande@collabora.com>

    commit 3bbda5a38601f7675a214be2044e41d7749e6c7b upstream.

    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>
    Signed-off-by: Sudip Mukherjee <sudipm.mukherjee@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    sound/soc/intel/boards/cht_bsw_max98090_ti.c | 45 ++++++++++++++++++---------
    1 file changed, 31 insertions(+), 14 deletions(-)

    --- a/sound/soc/intel/boards/cht_bsw_max98090_ti.c
    +++ b/sound/soc/intel/boards/cht_bsw_max98090_ti.c
    @@ -116,23 +116,19 @@ static int cht_codec_init(struct snd_soc
    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;
    @@ -188,6 +184,27 @@ static int cht_max98090_headset_init(str
    {
    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);
    }

    \
     
     \ /
      Last update: 2018-08-16 20:56    [W:2.399 / U:0.300 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site