ALSA: ctl: remove dimen member from elem_info structure
authorTakashi Sakamoto <o-takashi@sakamocchi.jp>
Mon, 23 Dec 2019 02:39:20 +0000 (11:39 +0900)
committerTakashi Iwai <tiwai@suse.de>
Mon, 23 Dec 2019 14:57:35 +0000 (15:57 +0100)
The 'dimen' member of 'struct snd_ctl_elem_info' is designed to deliver
information to use an array of value as multi-dimensional values. This
feature is used just by echoaudio PCI driver, and fortunately it's not
used by the other applications than 'echomixer' in alsa-tools.

In a previous commit, usage of 'dimen' member is removed from echoaudio
PCI driver. Nowadays no driver/application use the feature.

This commit removes the member from structure.

Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Link: https://lore.kernel.org/r/20191223023921.8151-4-o-takashi@sakamocchi.jp
Signed-off-by: Takashi Iwai <tiwai@suse.de>
include/uapi/sound/asound.h
sound/core/control.c

index efd9e13..06033fc 100644 (file)
@@ -1040,11 +1040,7 @@ struct snd_ctl_elem_info {
                } enumerated;
                unsigned char reserved[128];
        } value;
-       union {
-               unsigned short d[4];            /* dimensions */
-               unsigned short *d_ptr;          /* indirect - obsoleted */
-       } dimen;
-       unsigned char reserved[64-4*sizeof(unsigned short)];
+       unsigned char reserved[64];
 };
 
 struct snd_ctl_elem_value {
index 7a4d869..3fa1171 100644 (file)
@@ -758,36 +758,6 @@ static int snd_ctl_elem_list(struct snd_card *card,
        return err;
 }
 
-static bool validate_element_member_dimension(struct snd_ctl_elem_info *info)
-{
-       unsigned int members;
-       unsigned int i;
-
-       if (info->dimen.d[0] == 0)
-               return true;
-
-       members = 1;
-       for (i = 0; i < ARRAY_SIZE(info->dimen.d); ++i) {
-               if (info->dimen.d[i] == 0)
-                       break;
-               members *= info->dimen.d[i];
-
-               /*
-                * info->count should be validated in advance, to guarantee
-                * calculation soundness.
-                */
-               if (members > info->count)
-                       return false;
-       }
-
-       for (++i; i < ARRAY_SIZE(info->dimen.d); ++i) {
-               if (info->dimen.d[i] > 0)
-                       return false;
-       }
-
-       return members == info->count;
-}
-
 static int snd_ctl_elem_info(struct snd_ctl_file *ctl,
                             struct snd_ctl_elem_info *info)
 {
@@ -1280,8 +1250,6 @@ static int snd_ctl_elem_add(struct snd_ctl_file *file,
        if (info->count < 1 ||
            info->count > max_value_counts[info->type])
                return -EINVAL;
-       if (!validate_element_member_dimension(info))
-               return -EINVAL;
        private_size = value_sizes[info->type] * info->count;
 
        /*