lkml.org 
[lkml]   [2021]   [Nov]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 5.15 11/68] ASoC: rt5682: Avoid the unexpected IRQ event during going to suspend
    Date
    From: Derek Fang <derek.fang@realtek.com>

    [ Upstream commit a3774a2a6544a7a4a85186e768afc07044aa507f ]

    When the system suspends, the codec driver will set SAR to
    power saving mode if a headset is plugged in.
    There is a chance to generate an unexpected IRQ, and leads to
    issues after resuming such as noise from OMTP type headsets.

    Signed-off-by: Derek Fang <derek.fang@realtek.com>
    Link: https://lore.kernel.org/r/20211109095450.12950-1-derek.fang@realtek.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    sound/soc/codecs/rt5682.c | 15 +++++++++------
    1 file changed, 9 insertions(+), 6 deletions(-)

    diff --git a/sound/soc/codecs/rt5682.c b/sound/soc/codecs/rt5682.c
    index d550c0705c28b..cfa284855c84e 100644
    --- a/sound/soc/codecs/rt5682.c
    +++ b/sound/soc/codecs/rt5682.c
    @@ -48,6 +48,7 @@ static const struct reg_sequence patch_list[] = {
    {RT5682_SAR_IL_CMD_6, 0x0110},
    {RT5682_CHARGE_PUMP_1, 0x0210},
    {RT5682_HP_LOGIC_CTRL_2, 0x0007},
    + {RT5682_SAR_IL_CMD_2, 0xac00},
    };

    void rt5682_apply_patch_list(struct rt5682_priv *rt5682, struct device *dev)
    @@ -2961,9 +2962,6 @@ static int rt5682_suspend(struct snd_soc_component *component)
    cancel_delayed_work_sync(&rt5682->jack_detect_work);
    cancel_delayed_work_sync(&rt5682->jd_check_work);
    if (rt5682->hs_jack && rt5682->jack_type == SND_JACK_HEADSET) {
    - snd_soc_component_update_bits(component, RT5682_CBJ_CTRL_1,
    - RT5682_MB1_PATH_MASK | RT5682_MB2_PATH_MASK,
    - RT5682_CTRL_MB1_REG | RT5682_CTRL_MB2_REG);
    val = snd_soc_component_read(component,
    RT5682_CBJ_CTRL_2) & RT5682_JACK_TYPE_MASK;

    @@ -2985,10 +2983,15 @@ static int rt5682_suspend(struct snd_soc_component *component)
    /* enter SAR ADC power saving mode */
    snd_soc_component_update_bits(component, RT5682_SAR_IL_CMD_1,
    RT5682_SAR_BUTT_DET_MASK | RT5682_SAR_BUTDET_MODE_MASK |
    - RT5682_SAR_BUTDET_RST_MASK | RT5682_SAR_SEL_MB1_MB2_MASK, 0);
    + RT5682_SAR_SEL_MB1_MB2_MASK, 0);
    + usleep_range(5000, 6000);
    + snd_soc_component_update_bits(component, RT5682_CBJ_CTRL_1,
    + RT5682_MB1_PATH_MASK | RT5682_MB2_PATH_MASK,
    + RT5682_CTRL_MB1_REG | RT5682_CTRL_MB2_REG);
    + usleep_range(10000, 12000);
    snd_soc_component_update_bits(component, RT5682_SAR_IL_CMD_1,
    - RT5682_SAR_BUTT_DET_MASK | RT5682_SAR_BUTDET_MODE_MASK | RT5682_SAR_BUTDET_RST_MASK,
    - RT5682_SAR_BUTT_DET_EN | RT5682_SAR_BUTDET_POW_SAV | RT5682_SAR_BUTDET_RST_NORMAL);
    + RT5682_SAR_BUTT_DET_MASK | RT5682_SAR_BUTDET_MODE_MASK,
    + RT5682_SAR_BUTT_DET_EN | RT5682_SAR_BUTDET_POW_SAV);
    }

    regcache_cache_only(rt5682->regmap, true);
    --
    2.33.0
    \
     
     \ /
      Last update: 2021-11-30 15:48    [W:3.789 / U:0.780 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site