Commit 8198868f authored by Jaroslav Kysela's avatar Jaroslav Kysela Committed by Takashi Iwai

ALSA: hdac_regmap - fix the register access for runtime PM

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: default avatarJaroslav Kysela <perex@perex.cz>
Cc: <stable@vger.kernel.org>
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent 35639a0e
...@@ -444,7 +444,7 @@ int snd_hdac_regmap_write_raw(struct hdac_device *codec, unsigned int reg, ...@@ -444,7 +444,7 @@ int snd_hdac_regmap_write_raw(struct hdac_device *codec, unsigned int reg,
err = reg_raw_write(codec, reg, val); err = reg_raw_write(codec, reg, val);
if (err == -EAGAIN) { if (err == -EAGAIN) {
err = snd_hdac_power_up_pm(codec); err = snd_hdac_power_up_pm(codec);
if (!err) if (err >= 0)
err = reg_raw_write(codec, reg, val); err = reg_raw_write(codec, reg, val);
snd_hdac_power_down_pm(codec); snd_hdac_power_down_pm(codec);
} }
...@@ -470,7 +470,7 @@ static int __snd_hdac_regmap_read_raw(struct hdac_device *codec, ...@@ -470,7 +470,7 @@ static int __snd_hdac_regmap_read_raw(struct hdac_device *codec,
err = reg_raw_read(codec, reg, val, uncached); err = reg_raw_read(codec, reg, val, uncached);
if (err == -EAGAIN) { if (err == -EAGAIN) {
err = snd_hdac_power_up_pm(codec); err = snd_hdac_power_up_pm(codec);
if (!err) if (err >= 0)
err = reg_raw_read(codec, reg, val, uncached); err = reg_raw_read(codec, reg, val, uncached);
snd_hdac_power_down_pm(codec); snd_hdac_power_down_pm(codec);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment