summaryrefslogtreecommitdiffstats
path: root/include/sound/control.h
diff options
context:
space:
mode:
authorJaroslav Kysela <perex@suse.cz>2006-07-05 17:34:51 +0200
committerJaroslav Kysela <perex@suse.cz>2006-09-23 10:37:26 +0200
commit8aa9b586e42099817163aba01d925c2660c4dbbe (patch)
treeb70172eafcb672074fda1858c7a9c5779a1132f8 /include/sound/control.h
parent[ALSA] fm801: fixed broken previous patch for the FM tuner only code (diff)
downloadlinux-8aa9b586e42099817163aba01d925c2660c4dbbe.tar.xz
linux-8aa9b586e42099817163aba01d925c2660c4dbbe.zip
[ALSA] Control API - more robust TLV implementation
- added callback option - added READ/WRITE/COMMAND flags to access member - added WRITE/COMMAND ioctls - added SNDRV_CTL_EVENT_MASK_TLV for TLV change notifications - added TLV support to ELEM_ADD ioctl Signed-off-by: Jaroslav Kysela <perex@suse.cz>
Diffstat (limited to 'include/sound/control.h')
-rw-r--r--include/sound/control.h16
1 files changed, 14 insertions, 2 deletions
diff --git a/include/sound/control.h b/include/sound/control.h
index a93a58d0e688..e3905c5a0950 100644
--- a/include/sound/control.h
+++ b/include/sound/control.h
@@ -30,6 +30,11 @@ struct snd_kcontrol;
typedef int (snd_kcontrol_info_t) (struct snd_kcontrol * kcontrol, struct snd_ctl_elem_info * uinfo);
typedef int (snd_kcontrol_get_t) (struct snd_kcontrol * kcontrol, struct snd_ctl_elem_value * ucontrol);
typedef int (snd_kcontrol_put_t) (struct snd_kcontrol * kcontrol, struct snd_ctl_elem_value * ucontrol);
+typedef int (snd_kcontrol_tlv_rw_t)(struct snd_kcontrol *kcontrol,
+ int op_flag, /* 0=read,1=write,-1=command */
+ unsigned int size,
+ unsigned int __user *tlv);
+
struct snd_kcontrol_new {
snd_ctl_elem_iface_t iface; /* interface identifier */
@@ -42,7 +47,10 @@ struct snd_kcontrol_new {
snd_kcontrol_info_t *info;
snd_kcontrol_get_t *get;
snd_kcontrol_put_t *put;
- unsigned int *tlv;
+ union {
+ snd_kcontrol_tlv_rw_t *c;
+ unsigned int *p;
+ } tlv;
unsigned long private_value;
};
@@ -59,7 +67,11 @@ struct snd_kcontrol {
snd_kcontrol_info_t *info;
snd_kcontrol_get_t *get;
snd_kcontrol_put_t *put;
- unsigned int *tlv;
+ snd_kcontrol_tlv_rw_t *tlv_rw;
+ union {
+ snd_kcontrol_tlv_rw_t *c;
+ unsigned int *p;
+ } tlv;
unsigned long private_value;
void *private_data;
void (*private_free)(struct snd_kcontrol *kcontrol);