ALSA: fireface: add support for RME Fireface UFX (untested)
authorTakashi Sakamoto <o-takashi@sakamocchi.jp>
Sun, 10 May 2020 07:43:01 +0000 (16:43 +0900)
committerTakashi Iwai <tiwai@suse.de>
Sun, 10 May 2020 10:03:50 +0000 (12:03 +0200)
Fireface UFX was shipped by RME GmbH in 2010, and now discontinued.
Although this model has some enhanced feature which Fireface 802
doesn't have (e.g. on-board USB mass storage device class, configuration
interface with color display), the functionality relevant to
packet communication on IEEE 1394 bus seems to be the same as
Fireface 802 (e.g. available number of channels for PCM frame in
each sampling transfer frequency).

With the assumption, this commit adds support for Fireface UFX. In ALSA
fireface driver, these two models are handled as the same one.

Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Link: https://lore.kernel.org/r/20200510074301.116224-7-o-takashi@sakamocchi.jp
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/firewire/Kconfig
sound/firewire/fireface/ff-protocol-latter.c
sound/firewire/fireface/ff.c
sound/firewire/fireface/ff.h

index 4f39ef924a1a1982abd05393ab86b465eea0d988..f7ed69d60310e68a47ee98fb2f8d2a37a28d16ab 100644 (file)
@@ -164,6 +164,7 @@ config SND_FIREFACE
         Say Y here to include support for RME fireface series.
          * Fireface 400
          * Fireface 800
+         * Fireface UFX
          * Fireface UCX
          * Fireface 802
 
index ea885e72595035b0940660a6f66a779965822cfa..8d3b23778eb260982ff3f209a11d2c580cf3fc31 100644 (file)
@@ -199,7 +199,7 @@ static int latter_begin_session(struct snd_ff *ff, unsigned int rate)
                else
                        return -EINVAL;
        } else {
-               // For Fireface 802. Due to bandwidth limitation on
+               // For Fireface UFX and 802. Due to bandwidth limitation on
                // IEEE 1394a (400 Mbps), Analog 1-12 and AES are available
                // without any ADAT at quadruple speed.
                if (rate >= 32000 && rate <= 48000)
index e4140116f3cc7b92253737e2c3e5563a4091bd4c..bc39269415d21e0e83eb6f739349cf0ebece585a 100644 (file)
@@ -19,6 +19,7 @@ static void name_card(struct snd_ff *ff)
        const char *const names[] = {
                [SND_FF_UNIT_VERSION_FF800]     = "Fireface800",
                [SND_FF_UNIT_VERSION_FF400]     = "Fireface400",
+               [SND_FF_UNIT_VERSION_UFX]       = "FirefaceUFX",
                [SND_FF_UNIT_VERSION_UCX]       = "FirefaceUCX",
                [SND_FF_UNIT_VERSION_802]       = "Fireface802",
        };
@@ -187,7 +188,7 @@ static const struct snd_ff_spec spec_ucx = {
        .midi_rx_addrs = {0xffff00000030ull, 0xffff00000030ull},
 };
 
-static const struct snd_ff_spec spec_802 = {
+static const struct snd_ff_spec spec_ufx_802 = {
        .pcm_capture_channels = {30, 22, 14},
        .pcm_playback_channels = {30, 22, 14},
        .midi_in_ports = 1,
@@ -223,6 +224,18 @@ static const struct ieee1394_device_id snd_ff_id_table[] = {
                .model_id       = 0x101800,
                .driver_data    = (kernel_ulong_t)&spec_ff400,
        },
+       // Fireface UFX.
+       {
+               .match_flags    = IEEE1394_MATCH_VENDOR_ID |
+                                 IEEE1394_MATCH_SPECIFIER_ID |
+                                 IEEE1394_MATCH_VERSION |
+                                 IEEE1394_MATCH_MODEL_ID,
+               .vendor_id      = OUI_RME,
+               .specifier_id   = OUI_RME,
+               .version        = SND_FF_UNIT_VERSION_UFX,
+               .model_id       = 0x101800,
+               .driver_data    = (kernel_ulong_t)&spec_ufx_802,
+       },
        // Fireface UCX.
        {
                .match_flags    = IEEE1394_MATCH_VENDOR_ID |
@@ -245,7 +258,7 @@ static const struct ieee1394_device_id snd_ff_id_table[] = {
                .specifier_id   = OUI_RME,
                .version        = SND_FF_UNIT_VERSION_802,
                .model_id       = 0x101800,
-               .driver_data    = (kernel_ulong_t)&spec_802,
+               .driver_data    = (kernel_ulong_t)&spec_ufx_802,
        },
        {}
 };
index 1282a57c009f9a039fc390102752be2c75a7f616..705e7df4f9293ce3b011de7e7bc61030d7a50ed6 100644 (file)
@@ -37,6 +37,7 @@
 enum snd_ff_unit_version {
        SND_FF_UNIT_VERSION_FF800       = 0x000001,
        SND_FF_UNIT_VERSION_FF400       = 0x000002,
+       SND_FF_UNIT_VERSION_UFX         = 0x000003,
        SND_FF_UNIT_VERSION_UCX         = 0x000004,
        SND_FF_UNIT_VERSION_802         = 0x000005,
 };