/* for AMDTP streaming */
 int snd_bebob_stream_get_rate(struct snd_bebob *bebob, unsigned int *rate);
 int snd_bebob_stream_set_rate(struct snd_bebob *bebob, unsigned int rate);
-int snd_bebob_stream_check_internal_clock(struct snd_bebob *bebob,
-                                         bool *internal);
+int snd_bebob_stream_get_clock_src(struct snd_bebob *bebob,
+                                  enum snd_bebob_clock_type *src);
 int snd_bebob_stream_discover(struct snd_bebob *bebob);
 int snd_bebob_stream_init_duplex(struct snd_bebob *bebob);
 int snd_bebob_stream_start_duplex(struct snd_bebob *bebob, unsigned int rate);
 
        struct snd_bebob *bebob = substream->private_data;
        struct snd_bebob_rate_spec *spec = bebob->spec->rate;
        unsigned int sampling_rate;
-       bool internal;
+       enum snd_bebob_clock_type src;
        int err;
 
        err = snd_bebob_stream_lock_try(bebob);
        if (err < 0)
                goto err_locked;
 
-       err = snd_bebob_stream_check_internal_clock(bebob, &internal);
+       err = snd_bebob_stream_get_clock_src(bebob, &src);
        if (err < 0)
                goto err_locked;
+       /* SYT-Match is not supported. */
+       if (src == SND_BEBOB_CLOCK_TYPE_SYT) {
+               err = -EBUSY;
+               goto err_locked;
+       }
 
        /*
         * When source of clock is internal or any PCM stream are running,
         * the available sampling rate is limited at current sampling rate.
         */
-       if (!internal ||
+       if (src == SND_BEBOB_CLOCK_TYPE_EXTERNAL ||
            amdtp_stream_pcm_running(&bebob->tx_stream) ||
            amdtp_stream_pcm_running(&bebob->rx_stream)) {
                err = spec->get(bebob, &sampling_rate);
 
 proc_read_clock(struct snd_info_entry *entry,
                struct snd_info_buffer *buffer)
 {
+       static const char *const clk_labels[] = {
+               "Internal",
+               "External",
+               "SYT-Match",
+       };
        struct snd_bebob *bebob = entry->private_data;
        struct snd_bebob_rate_spec *rate_spec = bebob->spec->rate;
        struct snd_bebob_clock_spec *clk_spec = bebob->spec->clock;
-       unsigned int rate, id;
-       bool internal;
+       enum snd_bebob_clock_type src;
+       unsigned int rate;
 
        if (rate_spec->get(bebob, &rate) >= 0)
                snd_iprintf(buffer, "Sampling rate: %d\n", rate);
 
-       if (clk_spec) {
-               if (clk_spec->get(bebob, &id) >= 0)
+       if (snd_bebob_stream_get_clock_src(bebob, &src) >= 0) {
+               if (clk_spec)
                        snd_iprintf(buffer, "Clock Source: %s\n",
-                                   clk_spec->labels[id]);
-       } else {
-               if (snd_bebob_stream_check_internal_clock(bebob,
-                                                         &internal) >= 0)
+                                   clk_labels[src]);
+               else
                        snd_iprintf(buffer, "Clock Source: %s (MSU-dest: %d)\n",
-                                   (internal) ? "Internal" : "External",
-                                   bebob->sync_input_plug);
+                                   clk_labels[src], bebob->sync_input_plug);
        }
 }
 
 
        return err;
 }
 
-int
-snd_bebob_stream_check_internal_clock(struct snd_bebob *bebob, bool *internal)
+int snd_bebob_stream_get_clock_src(struct snd_bebob *bebob,
+                                  enum snd_bebob_clock_type *src)
 {
        struct snd_bebob_clock_spec *clk_spec = bebob->spec->clock;
        u8 addr[AVC_BRIDGECO_ADDR_BYTES], input[7];
        enum avc_bridgeco_plug_type type;
        int err = 0;
 
-       *internal = false;
-
        /* 1.The device has its own operation to switch source of clock */
        if (clk_spec) {
                err = clk_spec->get(bebob, &id);
                        goto end;
                }
 
-               if (strncmp(clk_spec->labels[id], SND_BEBOB_CLOCK_INTERNAL,
-                           strlen(SND_BEBOB_CLOCK_INTERNAL)) == 0)
-                       *internal = true;
-
+               *src = clk_spec->types[id];
                goto end;
        }
 
         *   to use internal clock always
         */
        if (bebob->sync_input_plug < 0) {
-               *internal = true;
+               *src = SND_BEBOB_CLOCK_TYPE_INTERNAL;
                goto end;
        }
 
         * Here check the first field. This field is used for direction.
         */
        if (input[0] == 0xff) {
-               *internal = true;
+               *src = SND_BEBOB_CLOCK_TYPE_INTERNAL;
                goto end;
        }
 
                 */
                if (input[1] == AVC_BRIDGECO_PLUG_MODE_SUBUNIT &&
                    input[2] == 0x0c) {
-                       *internal = true;
+                       *src = SND_BEBOB_CLOCK_TYPE_INTERNAL;
                        goto end;
                }
        /* The source from any input units is for several purposes. */
                                 * short, this driver is the master of
                                 * synchronization.
                                 */
-                               err = -EIO;
+                               *src = SND_BEBOB_CLOCK_TYPE_SYT;
                                goto end;
                        } else {
                                /*
                                 * means that the synchronization stream is not
                                 * the Audio/MIDI compound stream.
                                 */
-                               *internal = false;
+                               *src = SND_BEBOB_CLOCK_TYPE_EXTERNAL;
                                goto end;
                        }
                } else if (input[2] == AVC_BRIDGECO_PLUG_UNIT_EXT) {
                                 * SPDIF/ADAT or sometimes (not always) word
                                 * clock.
                                 */
-                               *internal = false;
+                               *src = SND_BEBOB_CLOCK_TYPE_EXTERNAL;
                                goto end;
                        } else if (type == AVC_BRIDGECO_PLUG_TYPE_SYNC) {
                                /* Often word clock. */
-                               *internal = false;
+                               *src = SND_BEBOB_CLOCK_TYPE_EXTERNAL;
                                goto end;
                        } else if (type == AVC_BRIDGECO_PLUG_TYPE_ADDITION) {
                                /*
                                 * Not standard.
                                 * Mostly, additional internal clock.
                                 */
-                               *internal = true;
+                               *src = SND_BEBOB_CLOCK_TYPE_INTERNAL;
                                goto end;
                        }
                }