ALSA: hda - Handle get/set power verb symmetrically via regmap
HD-audio has quite a few asymmetrical ways of accessing verbs, and one of typical ones is GET/SET_POWER_STATE verbs. While it takes only the power state for setting, it returns a combination of states for getting. For making the state handling simpler, this patch adds a code to translate the value returned from GET_POWER_STATE to return only the actual state or -1 for error. In that way, the driver can simplify the power state management. Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
d313e0a88d
commit
33f8194006
1 changed files with 12 additions and 1 deletions
|
@ -191,13 +191,24 @@ static int hda_reg_write_stereo_amp(struct hdac_device *codec,
|
||||||
static int hda_reg_read(void *context, unsigned int reg, unsigned int *val)
|
static int hda_reg_read(void *context, unsigned int reg, unsigned int *val)
|
||||||
{
|
{
|
||||||
struct hdac_device *codec = context;
|
struct hdac_device *codec = context;
|
||||||
|
int err;
|
||||||
|
|
||||||
if (!codec_is_running(codec))
|
if (!codec_is_running(codec))
|
||||||
return -EAGAIN;
|
return -EAGAIN;
|
||||||
reg |= (codec->addr << 28);
|
reg |= (codec->addr << 28);
|
||||||
if (is_stereo_amp_verb(reg))
|
if (is_stereo_amp_verb(reg))
|
||||||
return hda_reg_read_stereo_amp(codec, reg, val);
|
return hda_reg_read_stereo_amp(codec, reg, val);
|
||||||
return snd_hdac_exec_verb(codec, reg, 0, val);
|
err = snd_hdac_exec_verb(codec, reg, 0, val);
|
||||||
|
if (err < 0)
|
||||||
|
return err;
|
||||||
|
/* special handling for asymmetric reads */
|
||||||
|
if (get_verb(reg) == AC_VERB_GET_POWER_STATE) {
|
||||||
|
if (*val & AC_PWRST_ERROR)
|
||||||
|
*val = -1;
|
||||||
|
else /* take only the actual state */
|
||||||
|
*val = (*val >> 4) & 0x0f;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int hda_reg_write(void *context, unsigned int reg, unsigned int val)
|
static int hda_reg_write(void *context, unsigned int reg, unsigned int val)
|
||||||
|
|
Loading…
Add table
Reference in a new issue