summaryrefslogtreecommitdiffstats
path: root/sound/firewire/oxfw
diff options
context:
space:
mode:
authorTakashi Sakamoto <o-takashi@sakamocchi.jp>2015-12-15 23:56:21 +0900
committerTakashi Iwai <tiwai@suse.de>2015-12-15 16:30:05 +0100
commit5ce8cc48443596e500586007b443e1eea6334efc (patch)
tree9cd2a07e0951bb678635fa7bef16b1c8665f7b65 /sound/firewire/oxfw
parent27e66635016fc5bd3d36355daedf741f0a7329bb (diff)
downloadlinux-stable-5ce8cc48443596e500586007b443e1eea6334efc.tar.gz
linux-stable-5ce8cc48443596e500586007b443e1eea6334efc.tar.bz2
linux-stable-5ce8cc48443596e500586007b443e1eea6334efc.zip
ALSA: oxfw: gather model-dependent conditions to a function
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>
Diffstat (limited to 'sound/firewire/oxfw')
-rw-r--r--sound/firewire/oxfw/oxfw.c29
1 files changed, 18 insertions, 11 deletions
diff --git a/sound/firewire/oxfw/oxfw.c b/sound/firewire/oxfw/oxfw.c
index 836d75777973..d4fb3c10163a 100644
--- a/sound/firewire/oxfw/oxfw.c
+++ b/sound/firewire/oxfw/oxfw.c
@@ -135,7 +135,7 @@ 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;
@@ -143,13 +143,24 @@ static void detect_quirks(struct snd_oxfw *oxfw)
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.
*/
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);