ALSA: firewire-motu: fix detection for S/PDIF source on optical interface in v2 protocol
[platform/kernel/linux-rpi.git] / sound / firewire / motu / motu-protocol-v2.c
index 784073a..f0a0eca 100644 (file)
@@ -86,24 +86,23 @@ static int detect_clock_source_optical_model(struct snd_motu *motu, u32 data,
                *src = SND_MOTU_CLOCK_SOURCE_INTERNAL;
                break;
        case 1:
+               *src = SND_MOTU_CLOCK_SOURCE_ADAT_ON_OPT;
+               break;
+       case 2:
        {
                __be32 reg;
 
                // To check the configuration of optical interface.
-               int err = snd_motu_transaction_read(motu, V2_IN_OUT_CONF_OFFSET,
-                                                   &reg, sizeof(reg));
+               int err = snd_motu_transaction_read(motu, V2_IN_OUT_CONF_OFFSET, &reg, sizeof(reg));
                if (err < 0)
                        return err;
 
-               if (be32_to_cpu(reg) & 0x00000200)
+               if (((data & V2_OPT_IN_IFACE_MASK) >> V2_OPT_IN_IFACE_SHIFT) == V2_OPT_IFACE_MODE_SPDIF)
                        *src = SND_MOTU_CLOCK_SOURCE_SPDIF_ON_OPT;
                else
-                       *src = SND_MOTU_CLOCK_SOURCE_ADAT_ON_OPT;
+                       *src = SND_MOTU_CLOCK_SOURCE_SPDIF_ON_COAX;
                break;
        }
-       case 2:
-               *src = SND_MOTU_CLOCK_SOURCE_SPDIF_ON_COAX;
-               break;
        case 3:
                *src = SND_MOTU_CLOCK_SOURCE_SPH;
                break;