/* * bebob_terratec.c - a part of driver for BeBoB based devices * * Copyright (c) 2013-2014 Takashi Sakamoto * * Licensed under the terms of the GNU General Public License, version 2. */ #include "./bebob.h" static const char *const phase88_rack_clk_src_labels[] = { SND_BEBOB_CLOCK_INTERNAL, "Digital In", "Word Clock" }; static int phase88_rack_clk_src_get(struct snd_bebob *bebob, unsigned int *id) { unsigned int enable_ext, enable_word; int err; err = avc_audio_get_selector(bebob->unit, 0, 9, &enable_ext); if (err < 0) goto end; err = avc_audio_get_selector(bebob->unit, 0, 8, &enable_word); if (err < 0) goto end; if (enable_ext == 0) *id = 0; else if (enable_word == 0) *id = 1; else *id = 2; end: return err; } static const char *const phase24_series_clk_src_labels[] = { SND_BEBOB_CLOCK_INTERNAL, "Digital In" }; static int phase24_series_clk_src_get(struct snd_bebob *bebob, unsigned int *id) { return avc_audio_get_selector(bebob->unit, 0, 4, id); } static struct snd_bebob_rate_spec phase_series_rate_spec = { .get = &snd_bebob_stream_get_rate, .set = &snd_bebob_stream_set_rate, }; /* PHASE 88 Rack FW */ static struct snd_bebob_clock_spec phase88_rack_clk = { .num = ARRAY_SIZE(phase88_rack_clk_src_labels), .labels = phase88_rack_clk_src_labels, .get = &phase88_rack_clk_src_get, }; struct snd_bebob_spec phase88_rack_spec = { .clock = &phase88_rack_clk, .rate = &phase_series_rate_spec, .meter = NULL }; /* 'PHASE 24 FW' and 'PHASE X24 FW' */ static struct snd_bebob_clock_spec phase24_series_clk = { .num = ARRAY_SIZE(phase24_series_clk_src_labels), .labels = phase24_series_clk_src_labels, .get = &phase24_series_clk_src_get, }; struct snd_bebob_spec phase24_series_spec = { .clock = &phase24_series_clk, .rate = &phase_series_rate_spec, .meter = NULL };