ALSA: oxfw: gather model-dependent conditions to a function
authorTakashi Sakamoto <o-takashi@sakamocchi.jp>
Tue, 15 Dec 2015 14:56:21 +0000 (23:56 +0900)
committerTakashi Iwai <tiwai@suse.de>
Tue, 15 Dec 2015 15:30:05 +0000 (16:30 +0100)
Adding control elements is just for models supported by old
firewire-speakers modules. The processing should be in a function to add
model-dependent quirk.

This commit moves the codes to the function. As a result, the function
should handle error state, thus this commit also changes prototype of
the function.

Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/firewire/oxfw/oxfw.c

index 836d757779736d01bc38aa1da65e4c72a32baf06..d4fb3c10163af05c22b1445029ed121f6219a600 100644 (file)
@@ -135,13 +135,24 @@ static void oxfw_card_free(struct snd_card *card)
        mutex_destroy(&oxfw->mutex);
 }
 
-static void detect_quirks(struct snd_oxfw *oxfw)
+static int detect_quirks(struct snd_oxfw *oxfw)
 {
        struct fw_device *fw_dev = fw_parent_device(oxfw->unit);
        struct fw_csr_iterator it;
        int key, val;
        int vendor, model;
 
+       /*
+        * Add ALSA control elements for two models to keep compatibility to
+        * old firewire-speaker module.
+        */
+       if (oxfw->entry->vendor_id == VENDOR_GRIFFIN ||
+           oxfw->entry->vendor_id == VENDOR_LACIE) {
+               oxfw->device_info =
+                       (const struct device_info *)oxfw->entry->driver_data;
+               return snd_oxfw_add_spkr(oxfw);
+       }
+
        /*
         * TASCAM FireOne has physical control and requires a pair of additional
         * MIDI ports.
@@ -149,7 +160,7 @@ static void detect_quirks(struct snd_oxfw *oxfw)
        if (oxfw->entry->vendor_id == VENDOR_TASCAM) {
                oxfw->midi_input_ports++;
                oxfw->midi_output_ports++;
-               return;
+               return 0;
        }
 
        /* Seek from Root Directory of Config ROM. */
@@ -168,6 +179,8 @@ static void detect_quirks(struct snd_oxfw *oxfw)
         */
        if (vendor == VENDOR_LOUD && model == MODEL_SATELLITE)
                oxfw->wrong_dbs = true;
+
+       return 0;
 }
 
 static int oxfw_probe(struct fw_unit *unit,
@@ -198,7 +211,9 @@ static int oxfw_probe(struct fw_unit *unit,
        if (err < 0)
                goto error;
 
-       detect_quirks(oxfw);
+       err = detect_quirks(oxfw);
+       if (err < 0)
+               goto error;
 
        err = name_card(oxfw);
        if (err < 0)
@@ -208,14 +223,6 @@ static int oxfw_probe(struct fw_unit *unit,
        if (err < 0)
                goto error;
 
-       if (oxfw->device_info) {
-               oxfw->device_info =
-                               (const struct device_info *)entry->driver_data;
-               err = snd_oxfw_add_spkr(oxfw);
-               if (err < 0)
-                       goto error;
-       }
-
        snd_oxfw_proc_init(oxfw);
 
        err = snd_oxfw_create_midi(oxfw);