mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00
ASoC: rt5640: Fix Jack work after system suspend
We found an corner case in RT5640 codec driver which schedules jack work after system suspend as IRQ was enabled. Due to this, hitting the error as register access happening after suspend as jack worker thread getting scheduled in irq handler. The patch disables the irq during the suspend to prevent the corner case happening. Signed-off-by: Oder Chiou <oder_chiou@realtek.com> Reported-by: Mohan Kumar D <mkumard@nvidia.com> Link: https://lore.kernel.org/r/20221128070825.91215-1-oder_chiou@realtek.com Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
11e87890da
commit
5fabcc90e7
1 changed files with 8 additions and 0 deletions
|
@ -2792,6 +2792,11 @@ static int rt5640_suspend(struct snd_soc_component *component)
|
|||
{
|
||||
struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
|
||||
|
||||
if (rt5640->irq) {
|
||||
/* disable jack interrupts during system suspend */
|
||||
disable_irq(rt5640->irq);
|
||||
}
|
||||
|
||||
rt5640_cancel_work(rt5640);
|
||||
snd_soc_component_force_bias_level(component, SND_SOC_BIAS_OFF);
|
||||
rt5640_reset(component);
|
||||
|
@ -2815,6 +2820,9 @@ static int rt5640_resume(struct snd_soc_component *component)
|
|||
regcache_cache_only(rt5640->regmap, false);
|
||||
regcache_sync(rt5640->regmap);
|
||||
|
||||
if (rt5640->irq)
|
||||
enable_irq(rt5640->irq);
|
||||
|
||||
if (rt5640->jack) {
|
||||
if (rt5640->jd_src == RT5640_JD_SRC_HDA_HEADER) {
|
||||
snd_soc_component_update_bits(component,
|
||||
|
|
Loading…
Add table
Reference in a new issue