diff options
author | Jaroslav Kysela <perex@perex.cz> | 2016-06-17 13:35:56 +0200 |
---|---|---|
committer | Sasha Levin <sasha.levin@oracle.com> | 2016-07-10 20:19:59 -0400 |
commit | 0b1ca750b5fe6e457768c1b835f7f380a288ca58 (patch) | |
tree | c1814d511e44df4267a106c5202946b48dacaeb4 /sound | |
parent | ec3e73223a8e5a5ec66ca6a2b12d37ddaf2530dd (diff) |
ALSA: hdac_regmap - fix the register access for runtime PM
[ Upstream commit 8198868f0a283eb23e264951632ce61ec2f82228 ]
Call path:
1) snd_hdac_power_up_pm()
2) snd_hdac_power_up()
3) pm_runtime_get_sync()
4) __pm_runtime_resume()
5) rpm_resume()
The rpm_resume() returns 1 when the device is already active.
Because the return value is unmodified, the hdac regmap read/write
functions should allow this value for the retry I/O operation, too.
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
Cc: <stable@vger.kernel.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Sasha Levin <sasha.levin@oracle.com>
Diffstat (limited to 'sound')
-rw-r--r-- | sound/hda/hdac_regmap.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/sound/hda/hdac_regmap.c b/sound/hda/hdac_regmap.c index c785e5a84b9c..f3eb78e47ced 100644 --- a/sound/hda/hdac_regmap.c +++ b/sound/hda/hdac_regmap.c @@ -411,7 +411,7 @@ int snd_hdac_regmap_write_raw(struct hdac_device *codec, unsigned int reg, err = reg_raw_write(codec, reg, val); if (err == -EAGAIN) { err = snd_hdac_power_up_pm(codec); - if (!err) + if (err >= 0) err = reg_raw_write(codec, reg, val); snd_hdac_power_down_pm(codec); } @@ -437,7 +437,7 @@ static int __snd_hdac_regmap_read_raw(struct hdac_device *codec, err = reg_raw_read(codec, reg, val, uncached); if (err == -EAGAIN) { err = snd_hdac_power_up_pm(codec); - if (!err) + if (err >= 0) err = reg_raw_read(codec, reg, val, uncached); snd_hdac_power_down_pm(codec); } |