1326b9cacSTakashi Sakamoto /* 2326b9cacSTakashi Sakamoto * bebob_terratec.c - a part of driver for BeBoB based devices 3326b9cacSTakashi Sakamoto * 4326b9cacSTakashi Sakamoto * Copyright (c) 2013-2014 Takashi Sakamoto 5326b9cacSTakashi Sakamoto * 6326b9cacSTakashi Sakamoto * Licensed under the terms of the GNU General Public License, version 2. 7326b9cacSTakashi Sakamoto */ 8326b9cacSTakashi Sakamoto 9326b9cacSTakashi Sakamoto #include "./bebob.h" 10326b9cacSTakashi Sakamoto 11326b9cacSTakashi Sakamoto static char *const phase88_rack_clk_src_labels[] = { 12326b9cacSTakashi Sakamoto SND_BEBOB_CLOCK_INTERNAL, "Digital In", "Word Clock" 13326b9cacSTakashi Sakamoto }; 14326b9cacSTakashi Sakamoto static int 15326b9cacSTakashi Sakamoto phase88_rack_clk_src_get(struct snd_bebob *bebob, unsigned int *id) 16326b9cacSTakashi Sakamoto { 17326b9cacSTakashi Sakamoto unsigned int enable_ext, enable_word; 18326b9cacSTakashi Sakamoto int err; 19326b9cacSTakashi Sakamoto 203f403286STakashi Sakamoto err = avc_audio_get_selector(bebob->unit, 0, 9, &enable_ext); 21326b9cacSTakashi Sakamoto if (err < 0) 22326b9cacSTakashi Sakamoto goto end; 233f403286STakashi Sakamoto err = avc_audio_get_selector(bebob->unit, 0, 8, &enable_word); 24326b9cacSTakashi Sakamoto if (err < 0) 25326b9cacSTakashi Sakamoto goto end; 26326b9cacSTakashi Sakamoto 277ce5c926STakashi Sakamoto if (enable_ext == 0) 287ce5c926STakashi Sakamoto *id = 0; 297ce5c926STakashi Sakamoto else if (enable_word == 0) 307ce5c926STakashi Sakamoto *id = 1; 317ce5c926STakashi Sakamoto else 327ce5c926STakashi Sakamoto *id = 2; 33326b9cacSTakashi Sakamoto end: 34326b9cacSTakashi Sakamoto return err; 35326b9cacSTakashi Sakamoto } 36326b9cacSTakashi Sakamoto 37326b9cacSTakashi Sakamoto static char *const phase24_series_clk_src_labels[] = { 38326b9cacSTakashi Sakamoto SND_BEBOB_CLOCK_INTERNAL, "Digital In" 39326b9cacSTakashi Sakamoto }; 40326b9cacSTakashi Sakamoto static int 41326b9cacSTakashi Sakamoto phase24_series_clk_src_get(struct snd_bebob *bebob, unsigned int *id) 42326b9cacSTakashi Sakamoto { 43326b9cacSTakashi Sakamoto return avc_audio_get_selector(bebob->unit, 0, 4, id); 44326b9cacSTakashi Sakamoto } 45326b9cacSTakashi Sakamoto 469fb01cdbSTakashi Sakamoto static struct snd_bebob_rate_spec phase_series_rate_spec = { 47326b9cacSTakashi Sakamoto .get = &snd_bebob_stream_get_rate, 48326b9cacSTakashi Sakamoto .set = &snd_bebob_stream_set_rate, 49326b9cacSTakashi Sakamoto }; 50326b9cacSTakashi Sakamoto 51326b9cacSTakashi Sakamoto /* PHASE 88 Rack FW */ 529fb01cdbSTakashi Sakamoto static struct snd_bebob_clock_spec phase88_rack_clk = { 53326b9cacSTakashi Sakamoto .num = ARRAY_SIZE(phase88_rack_clk_src_labels), 54326b9cacSTakashi Sakamoto .labels = phase88_rack_clk_src_labels, 55326b9cacSTakashi Sakamoto .get = &phase88_rack_clk_src_get, 56326b9cacSTakashi Sakamoto }; 57326b9cacSTakashi Sakamoto struct snd_bebob_spec phase88_rack_spec = { 58326b9cacSTakashi Sakamoto .clock = &phase88_rack_clk, 59326b9cacSTakashi Sakamoto .rate = &phase_series_rate_spec, 60326b9cacSTakashi Sakamoto .meter = NULL 61326b9cacSTakashi Sakamoto }; 62326b9cacSTakashi Sakamoto 63326b9cacSTakashi Sakamoto /* 'PHASE 24 FW' and 'PHASE X24 FW' */ 649fb01cdbSTakashi Sakamoto static struct snd_bebob_clock_spec phase24_series_clk = { 65326b9cacSTakashi Sakamoto .num = ARRAY_SIZE(phase24_series_clk_src_labels), 66326b9cacSTakashi Sakamoto .labels = phase24_series_clk_src_labels, 67326b9cacSTakashi Sakamoto .get = &phase24_series_clk_src_get, 68326b9cacSTakashi Sakamoto }; 69326b9cacSTakashi Sakamoto struct snd_bebob_spec phase24_series_spec = { 70326b9cacSTakashi Sakamoto .clock = &phase24_series_clk, 71326b9cacSTakashi Sakamoto .rate = &phase_series_rate_spec, 72326b9cacSTakashi Sakamoto .meter = NULL 73326b9cacSTakashi Sakamoto }; 74