*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,
-                                                   ®, sizeof(reg));
+               int err = snd_motu_transaction_read(motu, V2_IN_OUT_CONF_OFFSET, ®, 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;