1 /* 2 * bebob_terratec.c - a part of driver for BeBoB based devices 3 * 4 * Copyright (c) 2013-2014 Takashi Sakamoto 5 * 6 * Licensed under the terms of the GNU General Public License, version 2. 7 */ 8 9 #include "./bebob.h" 10 11 static const char *const phase88_rack_clk_src_labels[] = { 12 SND_BEBOB_CLOCK_INTERNAL, "Digital In", "Word Clock" 13 }; 14 static int 15 phase88_rack_clk_src_get(struct snd_bebob *bebob, unsigned int *id) 16 { 17 unsigned int enable_ext, enable_word; 18 int err; 19 20 err = avc_audio_get_selector(bebob->unit, 0, 9, &enable_ext); 21 if (err < 0) 22 goto end; 23 err = avc_audio_get_selector(bebob->unit, 0, 8, &enable_word); 24 if (err < 0) 25 goto end; 26 27 if (enable_ext == 0) 28 *id = 0; 29 else if (enable_word == 0) 30 *id = 1; 31 else 32 *id = 2; 33 end: 34 return err; 35 } 36 37 static const char *const phase24_series_clk_src_labels[] = { 38 SND_BEBOB_CLOCK_INTERNAL, "Digital In" 39 }; 40 static int 41 phase24_series_clk_src_get(struct snd_bebob *bebob, unsigned int *id) 42 { 43 return avc_audio_get_selector(bebob->unit, 0, 4, id); 44 } 45 46 static struct snd_bebob_rate_spec phase_series_rate_spec = { 47 .get = &snd_bebob_stream_get_rate, 48 .set = &snd_bebob_stream_set_rate, 49 }; 50 51 /* PHASE 88 Rack FW */ 52 static struct snd_bebob_clock_spec phase88_rack_clk = { 53 .num = ARRAY_SIZE(phase88_rack_clk_src_labels), 54 .labels = phase88_rack_clk_src_labels, 55 .get = &phase88_rack_clk_src_get, 56 }; 57 struct snd_bebob_spec phase88_rack_spec = { 58 .clock = &phase88_rack_clk, 59 .rate = &phase_series_rate_spec, 60 .meter = NULL 61 }; 62 63 /* 'PHASE 24 FW' and 'PHASE X24 FW' */ 64 static struct snd_bebob_clock_spec phase24_series_clk = { 65 .num = ARRAY_SIZE(phase24_series_clk_src_labels), 66 .labels = phase24_series_clk_src_labels, 67 .get = &phase24_series_clk_src_get, 68 }; 69 struct snd_bebob_spec phase24_series_spec = { 70 .clock = &phase24_series_clk, 71 .rate = &phase_series_rate_spec, 72 .meter = NULL 73 }; 74