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
11static const char *const phase88_rack_clk_src_labels[] = {
12	SND_BEBOB_CLOCK_INTERNAL, "Digital In", "Word Clock"
13};
14static int
15phase88_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;
33end:
34	return err;
35}
36
37static const char *const phase24_series_clk_src_labels[] = {
38	SND_BEBOB_CLOCK_INTERNAL, "Digital In"
39};
40static int
41phase24_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
46static 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 */
52static 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};
57struct 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' */
64static 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};
69struct snd_bebob_spec phase24_series_spec = {
70	.clock	= &phase24_series_clk,
71	.rate	= &phase_series_rate_spec,
72	.meter	= NULL
73};
74