ALSA: firewire-motu: add a structure for model-dependent parameters.
MOTU FireWire series doesn't tell drivers their capabilities, thus the drivers should have and apply model-dependent parameters to detected models. This commit adds a structure to represent such parameters. Capabilities are represented by enumeration except for the number of analog line in/out. Identification name also be in the structure because the units has no registers for this purpose. Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp> Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
8865a31e0f
commit
5e03c33e3d
|
@ -31,9 +31,11 @@ static void name_card(struct snd_motu *motu)
|
||||||
}
|
}
|
||||||
|
|
||||||
strcpy(motu->card->driver, "FW-MOTU");
|
strcpy(motu->card->driver, "FW-MOTU");
|
||||||
|
strcpy(motu->card->shortname, motu->spec->name);
|
||||||
|
strcpy(motu->card->mixername, motu->spec->name);
|
||||||
snprintf(motu->card->longname, sizeof(motu->card->longname),
|
snprintf(motu->card->longname, sizeof(motu->card->longname),
|
||||||
"MOTU (version:%d), GUID %08x%08x at %s, S%d",
|
"MOTU %s (version:%d), GUID %08x%08x at %s, S%d",
|
||||||
version,
|
motu->spec->name, version,
|
||||||
fw_dev->config_rom[3], fw_dev->config_rom[4],
|
fw_dev->config_rom[3], fw_dev->config_rom[4],
|
||||||
dev_name(&motu->unit->device), 100 << fw_dev->max_speed);
|
dev_name(&motu->unit->device), 100 << fw_dev->max_speed);
|
||||||
}
|
}
|
||||||
|
@ -101,6 +103,7 @@ static int motu_probe(struct fw_unit *unit,
|
||||||
if (motu == NULL)
|
if (motu == NULL)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
|
motu->spec = (const struct snd_motu_spec *)entry->driver_data;
|
||||||
motu->unit = fw_unit_get(unit);
|
motu->unit = fw_unit_get(unit);
|
||||||
dev_set_drvdata(&unit->device, motu);
|
dev_set_drvdata(&unit->device, motu);
|
||||||
|
|
||||||
|
@ -142,7 +145,7 @@ static void motu_bus_update(struct fw_unit *unit)
|
||||||
snd_fw_schedule_registration(unit, &motu->dwork);
|
snd_fw_schedule_registration(unit, &motu->dwork);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define SND_MOTU_DEV_ENTRY(model) \
|
#define SND_MOTU_DEV_ENTRY(model, data) \
|
||||||
{ \
|
{ \
|
||||||
.match_flags = IEEE1394_MATCH_VENDOR_ID | \
|
.match_flags = IEEE1394_MATCH_VENDOR_ID | \
|
||||||
IEEE1394_MATCH_MODEL_ID | \
|
IEEE1394_MATCH_MODEL_ID | \
|
||||||
|
@ -150,6 +153,7 @@ static void motu_bus_update(struct fw_unit *unit)
|
||||||
.vendor_id = OUI_MOTU, \
|
.vendor_id = OUI_MOTU, \
|
||||||
.model_id = model, \
|
.model_id = model, \
|
||||||
.specifier_id = OUI_MOTU, \
|
.specifier_id = OUI_MOTU, \
|
||||||
|
.driver_data = (kernel_ulong_t)data, \
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct ieee1394_device_id motu_id_table[] = {
|
static const struct ieee1394_device_id motu_id_table[] = {
|
||||||
|
|
|
@ -29,6 +29,29 @@ struct snd_motu {
|
||||||
|
|
||||||
bool registered;
|
bool registered;
|
||||||
struct delayed_work dwork;
|
struct delayed_work dwork;
|
||||||
|
|
||||||
|
/* Model dependent information. */
|
||||||
|
const struct snd_motu_spec *spec;
|
||||||
|
};
|
||||||
|
|
||||||
|
enum snd_motu_spec_flags {
|
||||||
|
SND_MOTU_SPEC_SUPPORT_CLOCK_X2 = 0x0001,
|
||||||
|
SND_MOTU_SPEC_SUPPORT_CLOCK_X4 = 0x0002,
|
||||||
|
SND_MOTU_SPEC_TX_MICINST_CHUNK = 0x0004,
|
||||||
|
SND_MOTU_SPEC_TX_RETURN_CHUNK = 0x0008,
|
||||||
|
SND_MOTU_SPEC_TX_REVERB_CHUNK = 0x0010,
|
||||||
|
SND_MOTU_SPEC_TX_AESEBU_CHUNK = 0x0020,
|
||||||
|
SND_MOTU_SPEC_HAS_OPT_IFACE_A = 0x0040,
|
||||||
|
SND_MOTU_SPEC_HAS_OPT_IFACE_B = 0x0080,
|
||||||
|
SND_MOTU_SPEC_HAS_MIDI = 0x0100,
|
||||||
|
};
|
||||||
|
|
||||||
|
struct snd_motu_spec {
|
||||||
|
const char *const name;
|
||||||
|
enum snd_motu_spec_flags flags;
|
||||||
|
|
||||||
|
unsigned char analog_in_ports;
|
||||||
|
unsigned char analog_out_ports;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue