summaryrefslogtreecommitdiffstats
path: root/sound/core/control.c
diff options
context:
space:
mode:
authorTakashi Sakamoto <o-takashi@sakamocchi.jp>2015-04-11 17:41:03 +0900
committerTakashi Iwai <tiwai@suse.de>2015-04-11 17:32:16 +0200
commitc378c3b03c8d6eef2d2600d0279e2c718d6a0a44 (patch)
treebddbe1cc3f0d5405b7bb948481faec9154f724d9 /sound/core/control.c
parentc78497e010ae62c8abfb33a45d0e0b361218e9bb (diff)
downloadlinux-c378c3b03c8d6eef2d2600d0279e2c718d6a0a44.tar.bz2
ALSA: ctl: fix a bug to return no identical information in info operation for userspace controls
In operations of SNDRV_CTL_IOCTL_ELEM_INFO, identical information in returned value is cleared. This is not better to userspace application. This commit confirms to return full identical information to the operations. Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp> Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/core/control.c')
-rw-r--r--sound/core/control.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/sound/core/control.c b/sound/core/control.c
index 90a9e5d9819a..a750846514dc 100644
--- a/sound/core/control.c
+++ b/sound/core/control.c
@@ -1040,8 +1040,12 @@ static int snd_ctl_elem_user_info(struct snd_kcontrol *kcontrol,
struct snd_ctl_elem_info *uinfo)
{
struct user_element *ue = kcontrol->private_data;
+ unsigned int offset;
+ offset = snd_ctl_get_ioff(kcontrol, &uinfo->id);
*uinfo = ue->info;
+ snd_ctl_build_ioff(&uinfo->id, kcontrol, offset);
+
return 0;
}
@@ -1051,10 +1055,13 @@ static int snd_ctl_elem_user_enum_info(struct snd_kcontrol *kcontrol,
struct user_element *ue = kcontrol->private_data;
const char *names;
unsigned int item;
+ unsigned int offset;
item = uinfo->value.enumerated.item;
+ offset = snd_ctl_get_ioff(kcontrol, &uinfo->id);
*uinfo = ue->info;
+ snd_ctl_build_ioff(&uinfo->id, kcontrol, offset);
item = min(item, uinfo->value.enumerated.items - 1);
uinfo->value.enumerated.item = item;