Commit 6f81ba19 authored by Takashi Sakamoto's avatar Takashi Sakamoto Committed by Takashi Iwai

ALSA: firewire-tascam: add a structure for model-dependent parameters.

TASCAM FireWire series doesn't tell drivers their capabilities, thus
the drivers should have model-dependent parameters and apply it to
detected devices.

This commit adds a structure to represent such parameters.
Signed-off-by: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent c0949b27
...@@ -12,6 +12,39 @@ MODULE_DESCRIPTION("TASCAM FireWire series Driver"); ...@@ -12,6 +12,39 @@ MODULE_DESCRIPTION("TASCAM FireWire series Driver");
MODULE_AUTHOR("Takashi Sakamoto <o-takashi@sakamocchi.jp>"); MODULE_AUTHOR("Takashi Sakamoto <o-takashi@sakamocchi.jp>");
MODULE_LICENSE("GPL v2"); MODULE_LICENSE("GPL v2");
static struct snd_tscm_spec model_specs[] = {
{
.name = "FW-1884",
.has_adat = true,
.has_spdif = true,
.pcm_capture_analog_channels = 8,
.pcm_playback_analog_channels = 8,
.midi_capture_ports = 4,
.midi_playback_ports = 4,
.is_controller = true,
},
{
.name = "FW-1804",
.has_adat = true,
.has_spdif = true,
.pcm_capture_analog_channels = 8,
.pcm_playback_analog_channels = 2,
.midi_capture_ports = 2,
.midi_playback_ports = 4,
.is_controller = false,
},
{
.name = "FW-1082",
.has_adat = false,
.has_spdif = true,
.pcm_capture_analog_channels = 8,
.pcm_playback_analog_channels = 2,
.midi_capture_ports = 2,
.midi_playback_ports = 2,
.is_controller = true,
},
};
static int check_name(struct snd_tscm *tscm) static int check_name(struct snd_tscm *tscm)
{ {
struct fw_device *fw_dev = fw_parent_device(tscm->unit); struct fw_device *fw_dev = fw_parent_device(tscm->unit);
...@@ -72,6 +105,7 @@ static int snd_tscm_probe(struct fw_unit *unit, ...@@ -72,6 +105,7 @@ static int snd_tscm_probe(struct fw_unit *unit,
tscm = card->private_data; tscm = card->private_data;
tscm->card = card; tscm->card = card;
tscm->unit = fw_unit_get(unit); tscm->unit = fw_unit_get(unit);
tscm->spec = (const struct snd_tscm_spec *)entry->driver_data;
mutex_init(&tscm->mutex); mutex_init(&tscm->mutex);
...@@ -113,6 +147,7 @@ static const struct ieee1394_device_id snd_tscm_id_table[] = { ...@@ -113,6 +147,7 @@ static const struct ieee1394_device_id snd_tscm_id_table[] = {
.vendor_id = 0x00022e, .vendor_id = 0x00022e,
.specifier_id = 0x00022e, .specifier_id = 0x00022e,
.version = 0x800003, .version = 0x800003,
.driver_data = (kernel_ulong_t)&model_specs[2],
}, },
/* FW-1884 */ /* FW-1884 */
{ {
...@@ -122,6 +157,7 @@ static const struct ieee1394_device_id snd_tscm_id_table[] = { ...@@ -122,6 +157,7 @@ static const struct ieee1394_device_id snd_tscm_id_table[] = {
.vendor_id = 0x00022e, .vendor_id = 0x00022e,
.specifier_id = 0x00022e, .specifier_id = 0x00022e,
.version = 0x800000, .version = 0x800000,
.driver_data = (kernel_ulong_t)&model_specs[0],
}, },
/* FW-1804 mey be supported if IDs are clear. */ /* FW-1804 mey be supported if IDs are clear. */
/* FE-08 requires reverse-engineering because it just has faders. */ /* FE-08 requires reverse-engineering because it just has faders. */
......
...@@ -23,11 +23,24 @@ ...@@ -23,11 +23,24 @@
#include "../lib.h" #include "../lib.h"
struct snd_tscm_spec {
const char *const name;
bool has_adat;
bool has_spdif;
unsigned int pcm_capture_analog_channels;
unsigned int pcm_playback_analog_channels;
unsigned int midi_capture_ports;
unsigned int midi_playback_ports;
bool is_controller;
};
struct snd_tscm { struct snd_tscm {
struct snd_card *card; struct snd_card *card;
struct fw_unit *unit; struct fw_unit *unit;
struct mutex mutex; struct mutex mutex;
const struct snd_tscm_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