Merge tag 'asoc-v5.3' of https://git.kernel.org/pub/scm/linux/kernel/git/broonie...
[linux-2.6-block.git] / sound / usb / mixer.c
index c703f8534b0735bdcd9395a0ff5112d79a3db9c7..7498b5191b68e4cf0368599998160ec0eb17f29d 100644 (file)
@@ -2303,7 +2303,7 @@ static struct procunit_info extunits[] = {
  */
 static int build_audio_procunit(struct mixer_build *state, int unitid,
                                void *raw_desc, struct procunit_info *list,
-                               char *name)
+                               bool extension_unit)
 {
        struct uac_processing_unit_descriptor *desc = raw_desc;
        int num_ins;
@@ -2320,6 +2320,8 @@ static int build_audio_procunit(struct mixer_build *state, int unitid,
        static struct procunit_info default_info = {
                0, NULL, default_value_info
        };
+       const char *name = extension_unit ?
+               "Extension Unit" : "Processing Unit";
 
        if (desc->bLength < 13) {
                usb_audio_err(state->chip, "invalid %s descriptor (id %d)\n", name, unitid);
@@ -2433,7 +2435,10 @@ static int build_audio_procunit(struct mixer_build *state, int unitid,
                } else if (info->name) {
                        strlcpy(kctl->id.name, info->name, sizeof(kctl->id.name));
                } else {
-                       nameid = uac_processing_unit_iProcessing(desc, state->mixer->protocol);
+                       if (extension_unit)
+                               nameid = uac_extension_unit_iExtension(desc, state->mixer->protocol);
+                       else
+                               nameid = uac_processing_unit_iProcessing(desc, state->mixer->protocol);
                        len = 0;
                        if (nameid)
                                len = snd_usb_copy_string_desc(state->chip,
@@ -2466,10 +2471,10 @@ static int parse_audio_processing_unit(struct mixer_build *state, int unitid,
        case UAC_VERSION_2:
        default:
                return build_audio_procunit(state, unitid, raw_desc,
-                               procunits, "Processing Unit");
+                                           procunits, false);
        case UAC_VERSION_3:
                return build_audio_procunit(state, unitid, raw_desc,
-                               uac3_procunits, "Processing Unit");
+                                           uac3_procunits, false);
        }
 }
 
@@ -2480,8 +2485,7 @@ static int parse_audio_extension_unit(struct mixer_build *state, int unitid,
         * Note that we parse extension units with processing unit descriptors.
         * That's ok as the layout is the same.
         */
-       return build_audio_procunit(state, unitid, raw_desc,
-                                   extunits, "Extension Unit");
+       return build_audio_procunit(state, unitid, raw_desc, extunits, true);
 }
 
 /*