ALSA: firewire-motu: localize protocol data
authorTakashi Sakamoto <o-takashi@sakamocchi.jp>
Tue, 19 May 2020 11:16:30 +0000 (20:16 +0900)
committerTakashi Iwai <tiwai@suse.de>
Fri, 22 May 2020 14:52:11 +0000 (16:52 +0200)
This commit adds enumerations of protocol version to localize protocol
data.

Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Link: https://lore.kernel.org/r/20200519111641.123211-4-o-takashi@sakamocchi.jp
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/firewire/motu/amdtp-motu.c
sound/firewire/motu/motu-protocol-v2.c
sound/firewire/motu/motu-protocol-v3.c
sound/firewire/motu/motu-stream.c
sound/firewire/motu/motu.h

index 0fd36e4..17c9ea8 100644 (file)
@@ -440,7 +440,7 @@ static unsigned int process_it_ctx_payloads(struct amdtp_stream *s,
 
 int amdtp_motu_init(struct amdtp_stream *s, struct fw_unit *unit,
                    enum amdtp_stream_direction dir,
-                   const struct snd_motu_protocol *const protocol)
+                   const struct snd_motu_spec *spec)
 {
        amdtp_stream_process_ctx_payloads_t process_ctx_payloads;
        int fmt = CIP_FMT_MOTU;
@@ -454,14 +454,15 @@ int amdtp_motu_init(struct amdtp_stream *s, struct fw_unit *unit,
                 * Units of version 3 transmits packets with invalid CIP header
                 * against IEC 61883-1.
                 */
-               if (protocol == &snd_motu_protocol_v3) {
+               if (spec->protocol_version == SND_MOTU_PROTOCOL_V3) {
                        flags |= CIP_WRONG_DBS |
                                 CIP_SKIP_DBC_ZERO_CHECK |
                                 CIP_HEADER_WITHOUT_EOH;
                        fmt = CIP_FMT_MOTU_TX_V3;
                }
 
-               if (protocol == &snd_motu_protocol_v2) {
+               if (spec == &snd_motu_spec_8pre ||
+                   spec == &snd_motu_spec_ultralite) {
                        // 8pre has some quirks.
                        flags |= CIP_WRONG_DBS |
                                 CIP_SKIP_DBC_ZERO_CHECK;
index ed71c08..2cd710a 100644 (file)
@@ -293,7 +293,7 @@ static int v2_cache_packet_formats(struct snd_motu *motu)
        return 0;
 }
 
-const struct snd_motu_protocol snd_motu_protocol_v2 = {
+static const struct snd_motu_protocol snd_motu_protocol_v2 = {
        .get_clock_rate         = v2_get_clock_rate,
        .set_clock_rate         = v2_set_clock_rate,
        .get_clock_source       = v2_get_clock_source,
@@ -303,6 +303,7 @@ const struct snd_motu_protocol snd_motu_protocol_v2 = {
 
 const struct snd_motu_spec snd_motu_spec_828mk2 = {
        .name = "828mk2",
+       .protocol_version = SND_MOTU_PROTOCOL_V2,
        .protocol = &snd_motu_protocol_v2,
        .flags = SND_MOTU_SPEC_SUPPORT_CLOCK_X2 |
                 SND_MOTU_SPEC_TX_MICINST_CHUNK |
@@ -319,6 +320,7 @@ const struct snd_motu_spec snd_motu_spec_828mk2 = {
 const struct snd_motu_spec snd_motu_spec_traveler = {
        .name = "Traveler",
        .protocol = &snd_motu_protocol_v2,
+       .protocol_version = SND_MOTU_PROTOCOL_V2,
        .flags = SND_MOTU_SPEC_SUPPORT_CLOCK_X2 |
                 SND_MOTU_SPEC_SUPPORT_CLOCK_X4 |
                 SND_MOTU_SPEC_TX_RETURN_CHUNK |
@@ -333,6 +335,7 @@ const struct snd_motu_spec snd_motu_spec_traveler = {
 
 const struct snd_motu_spec snd_motu_spec_ultralite = {
        .name = "UltraLite",
+       .protocol_version = SND_MOTU_PROTOCOL_V2,
        .protocol = &snd_motu_protocol_v2,
        .flags = SND_MOTU_SPEC_SUPPORT_CLOCK_X2 |
                 SND_MOTU_SPEC_TX_MICINST_CHUNK | // padding.
@@ -346,6 +349,7 @@ const struct snd_motu_spec snd_motu_spec_ultralite = {
 
 const struct snd_motu_spec snd_motu_spec_8pre = {
        .name = "8pre",
+       .protocol_version = SND_MOTU_PROTOCOL_V2,
        .protocol = &snd_motu_protocol_v2,
        // In tx, use coax chunks for mix-return 1/2. In rx, use coax chunks for
        // dummy 1/2.
index 947fab7..548c977 100644 (file)
@@ -307,7 +307,7 @@ static int v3_cache_packet_formats(struct snd_motu *motu)
        return 0;
 }
 
-const struct snd_motu_protocol snd_motu_protocol_v3 = {
+static const struct snd_motu_protocol snd_motu_protocol_v3 = {
        .get_clock_rate         = v3_get_clock_rate,
        .set_clock_rate         = v3_set_clock_rate,
        .get_clock_source       = v3_get_clock_source,
@@ -317,6 +317,7 @@ const struct snd_motu_protocol snd_motu_protocol_v3 = {
 
 const struct snd_motu_spec snd_motu_spec_828mk3 = {
        .name = "828mk3",
+       .protocol_version = SND_MOTU_PROTOCOL_V3,
        .protocol = &snd_motu_protocol_v3,
        .flags = SND_MOTU_SPEC_SUPPORT_CLOCK_X2 |
                 SND_MOTU_SPEC_SUPPORT_CLOCK_X4 |
@@ -335,6 +336,7 @@ const struct snd_motu_spec snd_motu_spec_828mk3 = {
 
 const struct snd_motu_spec snd_motu_spec_audio_express = {
        .name = "AudioExpress",
+       .protocol_version = SND_MOTU_PROTOCOL_V3,
        .protocol = &snd_motu_protocol_v3,
        .flags = SND_MOTU_SPEC_SUPPORT_CLOCK_X2 |
                 SND_MOTU_SPEC_TX_MICINST_CHUNK |
@@ -348,6 +350,7 @@ const struct snd_motu_spec snd_motu_spec_audio_express = {
 
 const struct snd_motu_spec snd_motu_spec_4pre = {
        .name = "4pre",
+       .protocol_version = SND_MOTU_PROTOCOL_V3,
        .protocol = &snd_motu_protocol_v3,
        .flags = SND_MOTU_SPEC_SUPPORT_CLOCK_X2 |
                 SND_MOTU_SPEC_TX_MICINST_CHUNK |
index a17ddce..11a2b8b 100644 (file)
@@ -317,7 +317,7 @@ static int init_stream(struct snd_motu *motu, struct amdtp_stream *s)
        if (err < 0)
                return err;
 
-       err = amdtp_motu_init(s, motu->unit, dir, motu->spec->protocol);
+       err = amdtp_motu_init(s, motu->unit, dir, motu->spec);
        if (err < 0)
                fw_iso_resources_destroy(resources);
 
index 7774c23..9db6920 100644 (file)
@@ -108,6 +108,11 @@ enum snd_motu_clock_source {
        SND_MOTU_CLOCK_SOURCE_UNKNOWN,
 };
 
+enum snd_motu_protocol_version {
+       SND_MOTU_PROTOCOL_V2,
+       SND_MOTU_PROTOCOL_V3,
+};
+
 struct snd_motu_protocol {
        int (*get_clock_rate)(struct snd_motu *motu, unsigned int *rate);
        int (*set_clock_rate)(struct snd_motu *motu, unsigned int rate);
@@ -119,6 +124,7 @@ struct snd_motu_protocol {
 
 struct snd_motu_spec {
        const char *const name;
+       enum snd_motu_protocol_version protocol_version;
        enum snd_motu_spec_flags flags;
 
        unsigned char analog_in_ports;
@@ -127,9 +133,6 @@ struct snd_motu_spec {
        const struct snd_motu_protocol *const protocol;
 };
 
-extern const struct snd_motu_protocol snd_motu_protocol_v2;
-extern const struct snd_motu_protocol snd_motu_protocol_v3;
-
 extern const struct snd_motu_spec snd_motu_spec_828mk2;
 extern const struct snd_motu_spec snd_motu_spec_traveler;
 extern const struct snd_motu_spec snd_motu_spec_ultralite;
@@ -141,7 +144,7 @@ extern const struct snd_motu_spec snd_motu_spec_4pre;
 
 int amdtp_motu_init(struct amdtp_stream *s, struct fw_unit *unit,
                    enum amdtp_stream_direction dir,
-                   const struct snd_motu_protocol *const protocol);
+                   const struct snd_motu_spec *spec);
 int amdtp_motu_set_parameters(struct amdtp_stream *s, unsigned int rate,
                              unsigned int midi_ports,
                              struct snd_motu_packet_format *formats);