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 20326b9cacSTakashi Sakamoto err = avc_audio_get_selector(bebob->unit, 0, 0, &enable_ext); 21326b9cacSTakashi Sakamoto if (err < 0) 22326b9cacSTakashi Sakamoto goto end; 23326b9cacSTakashi Sakamoto err = avc_audio_get_selector(bebob->unit, 0, 0, &enable_word); 24326b9cacSTakashi Sakamoto if (err < 0) 25326b9cacSTakashi Sakamoto goto end; 26326b9cacSTakashi Sakamoto 27326b9cacSTakashi Sakamoto *id = (enable_ext & 0x01) | ((enable_word & 0x01) << 1); 28326b9cacSTakashi Sakamoto end: 29326b9cacSTakashi Sakamoto return err; 30326b9cacSTakashi Sakamoto } 31326b9cacSTakashi Sakamoto 32326b9cacSTakashi Sakamoto static char *const phase24_series_clk_src_labels[] = { 33326b9cacSTakashi Sakamoto SND_BEBOB_CLOCK_INTERNAL, "Digital In" 34326b9cacSTakashi Sakamoto }; 35326b9cacSTakashi Sakamoto static int 36326b9cacSTakashi Sakamoto phase24_series_clk_src_get(struct snd_bebob *bebob, unsigned int *id) 37326b9cacSTakashi Sakamoto { 38326b9cacSTakashi Sakamoto return avc_audio_get_selector(bebob->unit, 0, 4, id); 39326b9cacSTakashi Sakamoto } 40326b9cacSTakashi Sakamoto 41326b9cacSTakashi Sakamoto struct snd_bebob_rate_spec phase_series_rate_spec = { 42326b9cacSTakashi Sakamoto .get = &snd_bebob_stream_get_rate, 43326b9cacSTakashi Sakamoto .set = &snd_bebob_stream_set_rate, 44326b9cacSTakashi Sakamoto }; 45326b9cacSTakashi Sakamoto 46326b9cacSTakashi Sakamoto /* PHASE 88 Rack FW */ 47326b9cacSTakashi Sakamoto struct snd_bebob_clock_spec phase88_rack_clk = { 48326b9cacSTakashi Sakamoto .num = ARRAY_SIZE(phase88_rack_clk_src_labels), 49326b9cacSTakashi Sakamoto .labels = phase88_rack_clk_src_labels, 50326b9cacSTakashi Sakamoto .get = &phase88_rack_clk_src_get, 51326b9cacSTakashi Sakamoto }; 52326b9cacSTakashi Sakamoto struct snd_bebob_spec phase88_rack_spec = { 53326b9cacSTakashi Sakamoto .clock = &phase88_rack_clk, 54326b9cacSTakashi Sakamoto .rate = &phase_series_rate_spec, 55326b9cacSTakashi Sakamoto .meter = NULL 56326b9cacSTakashi Sakamoto }; 57326b9cacSTakashi Sakamoto 58326b9cacSTakashi Sakamoto /* 'PHASE 24 FW' and 'PHASE X24 FW' */ 59326b9cacSTakashi Sakamoto struct snd_bebob_clock_spec phase24_series_clk = { 60326b9cacSTakashi Sakamoto .num = ARRAY_SIZE(phase24_series_clk_src_labels), 61326b9cacSTakashi Sakamoto .labels = phase24_series_clk_src_labels, 62326b9cacSTakashi Sakamoto .get = &phase24_series_clk_src_get, 63326b9cacSTakashi Sakamoto }; 64326b9cacSTakashi Sakamoto struct snd_bebob_spec phase24_series_spec = { 65326b9cacSTakashi Sakamoto .clock = &phase24_series_clk, 66326b9cacSTakashi Sakamoto .rate = &phase_series_rate_spec, 67326b9cacSTakashi Sakamoto .meter = NULL 68326b9cacSTakashi Sakamoto }; 69