diff options
author | Takashi Iwai <tiwai@suse.de> | 2008-02-18 13:05:50 +0100 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2008-04-24 12:00:12 +0200 |
commit | 1c82ed1bc531746a8fa9b46c593ddce546f28026 (patch) | |
tree | bc86ba78100f31856cff9b596634d795d2793984 /sound/core/vmaster.c | |
parent | e922b0028fad87de0d262f9fa51f98595d2df258 (diff) | |
download | blackbird-op-linux-1c82ed1bc531746a8fa9b46c593ddce546f28026.tar.gz blackbird-op-linux-1c82ed1bc531746a8fa9b46c593ddce546f28026.zip |
[ALSA] Keep private TLV entry in vmaster itself
Use a private array for TLV entries of virtual master controls instead
of (supposed) static array. This cleans up the existing codes.
Also, now vmaster assumes the simple dB-range TLV that is the only type
it can handle.
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/core/vmaster.c')
-rw-r--r-- | sound/core/vmaster.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/sound/core/vmaster.c b/sound/core/vmaster.c index 7cfd8b8fb4e7..4cc57f902e2c 100644 --- a/sound/core/vmaster.c +++ b/sound/core/vmaster.c @@ -12,6 +12,7 @@ #include <linux/slab.h> #include <sound/core.h> #include <sound/control.h> +#include <sound/tlv.h> /* * a subset of information returned via ctl info callback @@ -34,6 +35,7 @@ struct link_master { struct list_head slaves; struct link_ctl_info info; int val; /* the master value */ + unsigned int tlv[4]; }; /* @@ -357,11 +359,12 @@ struct snd_kcontrol *snd_ctl_make_virtual_master(char *name, kctl->private_free = master_free; /* additional (constant) TLV read */ - if (tlv) { - /* FIXME: this assumes that the max volume is 0 dB */ + if (tlv && tlv[0] == SNDRV_CTL_TLVT_DB_SCALE) { kctl->vd[0].access |= SNDRV_CTL_ELEM_ACCESS_TLV_READ; - kctl->tlv.p = tlv; + memcpy(master->tlv, tlv, sizeof(master->tlv)); + kctl->tlv.p = master->tlv; } + return kctl; } |