Commit ed90f91a authored by Takashi Sakamoto's avatar Takashi Sakamoto Committed by Takashi Iwai

ALSA: fireface: add model specific structure

RME Fireface series has several models and their specifications are
different. Currently, we find no way to retrieve the specifications
from actual devices and need to implement them in this driver.

This commit adds a structure to describe model specific data. This
structure has an identical name for each unit, and maximum number of
data channels in each mode. I'll describe about the mode in following
commits.
Signed-off-by: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent 324540c4
...@@ -17,13 +17,12 @@ MODULE_LICENSE("GPL v2"); ...@@ -17,13 +17,12 @@ MODULE_LICENSE("GPL v2");
static void name_card(struct snd_ff *ff) static void name_card(struct snd_ff *ff)
{ {
struct fw_device *fw_dev = fw_parent_device(ff->unit); struct fw_device *fw_dev = fw_parent_device(ff->unit);
const char *const model = "Fireface Skeleton";
strcpy(ff->card->driver, "Fireface"); strcpy(ff->card->driver, "Fireface");
strcpy(ff->card->shortname, model); strcpy(ff->card->shortname, ff->spec->name);
strcpy(ff->card->mixername, model); strcpy(ff->card->mixername, ff->spec->name);
snprintf(ff->card->longname, sizeof(ff->card->longname), snprintf(ff->card->longname, sizeof(ff->card->longname),
"RME %s, GUID %08x%08x at %s, S%d", model, "RME %s, GUID %08x%08x at %s, S%d", ff->spec->name,
fw_dev->config_rom[3], fw_dev->config_rom[4], fw_dev->config_rom[3], fw_dev->config_rom[4],
dev_name(&ff->unit->device), 100 << fw_dev->max_speed); dev_name(&ff->unit->device), 100 << fw_dev->max_speed);
} }
...@@ -86,6 +85,8 @@ static int snd_ff_probe(struct fw_unit *unit, ...@@ -86,6 +85,8 @@ static int snd_ff_probe(struct fw_unit *unit,
mutex_init(&ff->mutex); mutex_init(&ff->mutex);
ff->spec = (const struct snd_ff_spec *)entry->driver_data;
/* Register this sound card later. */ /* Register this sound card later. */
INIT_DEFERRABLE_WORK(&ff->dwork, do_registration); INIT_DEFERRABLE_WORK(&ff->dwork, do_registration);
snd_fw_schedule_registration(unit, &ff->dwork); snd_fw_schedule_registration(unit, &ff->dwork);
......
...@@ -22,6 +22,18 @@ ...@@ -22,6 +22,18 @@
#include "../lib.h" #include "../lib.h"
#define SND_FF_STREAM_MODES 3
struct snd_ff_spec {
const char *const name;
const unsigned int pcm_capture_channels[SND_FF_STREAM_MODES];
const unsigned int pcm_playback_channels[SND_FF_STREAM_MODES];
unsigned int midi_in_ports;
unsigned int midi_out_ports;
};
struct snd_ff { struct snd_ff {
struct snd_card *card; struct snd_card *card;
struct fw_unit *unit; struct fw_unit *unit;
...@@ -29,5 +41,7 @@ struct snd_ff { ...@@ -29,5 +41,7 @@ struct snd_ff {
bool registered; bool registered;
struct delayed_work dwork; struct delayed_work dwork;
const struct snd_ff_spec *spec;
}; };
#endif #endif
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment