aboutsummaryrefslogtreecommitdiffstats
path: root/sound/pci/hda/hda_codec.c
diff options
context:
space:
mode:
authorJaroslav Kysela <perex@perex.cz>2009-12-08 17:45:25 +0100
committerJaroslav Kysela <perex@perex.cz>2009-12-15 09:33:17 +0100
commit9e3fd8719f624a43575b56a4777b1552399a8be8 (patch)
tree273a7f8a6e264eb74f966abb18f0a69608f62d88 /sound/pci/hda/hda_codec.c
parent5b0cb1d850c26893b1468b3a519433a1b7a176be (diff)
downloadmrst-s0i3-test-9e3fd8719f624a43575b56a4777b1552399a8be8.tar.gz
mrst-s0i3-test-9e3fd8719f624a43575b56a4777b1552399a8be8.tar.xz
mrst-s0i3-test-9e3fd8719f624a43575b56a4777b1552399a8be8.zip
ALSA: hda - introduce HDA_SUBDEV_AMP_FLAG (ControlAmp in proc)
The purpose of this changeset is to show information about amplifier setting in the codec proc file. Something like: Control: name="Front Playback Volume", index=0, device=0 ControlAmp: chs=3, dir=Out, idx=0, ofs=0 Control: name="Front Playback Switch", index=0, device=0 ControlAmp: chs=3, dir=In, idx=2, ofs=0 Signed-off-by: Jaroslav Kysela <perex@perex.cz>
Diffstat (limited to 'sound/pci/hda/hda_codec.c')
-rw-r--r--sound/pci/hda/hda_codec.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c
index 20100b1548e..c9af15ed7f1 100644
--- a/sound/pci/hda/hda_codec.c
+++ b/sound/pci/hda/hda_codec.c
@@ -1723,19 +1723,22 @@ EXPORT_SYMBOL_HDA(snd_hda_find_mixer_ctl);
*
* snd_hda_ctl_add() checks the control subdev id field whether
* #HDA_SUBDEV_NID_FLAG bit is set. If set (and @nid is zero), the lower
- * bits value is taken as the NID to assign.
+ * bits value is taken as the NID to assign. The #HDA_NID_ITEM_AMP bit
+ * specifies if kctl->private_value is a HDA amplifier value.
*/
int snd_hda_ctl_add(struct hda_codec *codec, hda_nid_t nid,
struct snd_kcontrol *kctl)
{
int err;
+ unsigned short flags = 0;
struct hda_nid_item *item;
- if (kctl->id.subdevice & HDA_SUBDEV_NID_FLAG) {
- if (nid == 0)
- nid = kctl->id.subdevice & 0xffff;
+ if (kctl->id.subdevice & HDA_SUBDEV_AMP_FLAG)
+ flags |= HDA_NID_ITEM_AMP;
+ if ((kctl->id.subdevice & HDA_SUBDEV_NID_FLAG) != 0 && nid == 0)
+ nid = kctl->id.subdevice & 0xffff;
+ if (kctl->id.subdevice & 0xf0000000)
kctl->id.subdevice = 0;
- }
err = snd_ctl_add(codec->bus->card, kctl);
if (err < 0)
return err;
@@ -1744,6 +1747,7 @@ int snd_hda_ctl_add(struct hda_codec *codec, hda_nid_t nid,
return -ENOMEM;
item->kctl = kctl;
item->nid = nid;
+ item->flags = flags;
return 0;
}
EXPORT_SYMBOL_HDA(snd_hda_ctl_add);