lkml.org 
[lkml]   [2022]   [Jan]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.15 444/846] ALSA: hda/cs8409: Fix Jack detection after resume
    Date
    From: Christian A. Ehrhardt <lk@c--e.de>

    [ Upstream commit 57f234248ff925d88caedf4019ec84e6ecb83909 ]

    The suspend code unconditionally sets ->hp_jack_in and ->mic_jack_in
    to zero but without reporting this status change to the HDA core.
    To compensate for this, always assume a status change on the
    first unsol event after boot or resume.

    Fixes: 424e531b47f8 ("ALSA: hda/cs8409: Ensure Type Detection is only run on startup when necessary")
    Signed-off-by: Christian A. Ehrhardt <lk@c--e.de>
    Link: https://lore.kernel.org/r/20211231134432.atwmuzeceqiklcoa@cae.in-ulm.de
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    sound/pci/hda/patch_cs8409-tables.c | 3 +++
    sound/pci/hda/patch_cs8409.c | 5 ++++-
    sound/pci/hda/patch_cs8409.h | 1 +
    3 files changed, 8 insertions(+), 1 deletion(-)

    diff --git a/sound/pci/hda/patch_cs8409-tables.c b/sound/pci/hda/patch_cs8409-tables.c
    index 0fb0a428428b4..df0b4522babf7 100644
    --- a/sound/pci/hda/patch_cs8409-tables.c
    +++ b/sound/pci/hda/patch_cs8409-tables.c
    @@ -252,6 +252,7 @@ struct sub_codec cs8409_cs42l42_codec = {
    .init_seq_num = ARRAY_SIZE(cs42l42_init_reg_seq),
    .hp_jack_in = 0,
    .mic_jack_in = 0,
    + .force_status_change = 1,
    .paged = 1,
    .suspended = 1,
    .no_type_dect = 0,
    @@ -443,6 +444,7 @@ struct sub_codec dolphin_cs42l42_0 = {
    .init_seq_num = ARRAY_SIZE(dolphin_c0_init_reg_seq),
    .hp_jack_in = 0,
    .mic_jack_in = 0,
    + .force_status_change = 1,
    .paged = 1,
    .suspended = 1,
    .no_type_dect = 0,
    @@ -456,6 +458,7 @@ struct sub_codec dolphin_cs42l42_1 = {
    .init_seq_num = ARRAY_SIZE(dolphin_c1_init_reg_seq),
    .hp_jack_in = 0,
    .mic_jack_in = 0,
    + .force_status_change = 1,
    .paged = 1,
    .suspended = 1,
    .no_type_dect = 1,
    diff --git a/sound/pci/hda/patch_cs8409.c b/sound/pci/hda/patch_cs8409.c
    index bf5d7f0c6ba55..aff2b5abb81ea 100644
    --- a/sound/pci/hda/patch_cs8409.c
    +++ b/sound/pci/hda/patch_cs8409.c
    @@ -636,7 +636,9 @@ static void cs42l42_run_jack_detect(struct sub_codec *cs42l42)

    static int cs42l42_handle_tip_sense(struct sub_codec *cs42l42, unsigned int reg_ts_status)
    {
    - int status_changed = 0;
    + int status_changed = cs42l42->force_status_change;
    +
    + cs42l42->force_status_change = 0;

    /* TIP_SENSE INSERT/REMOVE */
    switch (reg_ts_status) {
    @@ -791,6 +793,7 @@ static void cs42l42_suspend(struct sub_codec *cs42l42)
    cs42l42->last_page = 0;
    cs42l42->hp_jack_in = 0;
    cs42l42->mic_jack_in = 0;
    + cs42l42->force_status_change = 1;

    /* Put CS42L42 into Reset */
    gpio_data = snd_hda_codec_read(codec, CS8409_PIN_AFG, 0, AC_VERB_GET_GPIO_DATA, 0);
    diff --git a/sound/pci/hda/patch_cs8409.h b/sound/pci/hda/patch_cs8409.h
    index ade2b838590cf..d0b725c7285b6 100644
    --- a/sound/pci/hda/patch_cs8409.h
    +++ b/sound/pci/hda/patch_cs8409.h
    @@ -305,6 +305,7 @@ struct sub_codec {

    unsigned int hp_jack_in:1;
    unsigned int mic_jack_in:1;
    + unsigned int force_status_change:1;
    unsigned int suspended:1;
    unsigned int paged:1;
    unsigned int last_page;
    --
    2.34.1


    \
     
     \ /
      Last update: 2022-01-25 04:10    [W:4.290 / U:0.336 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site