Commit | Line | Data |
---|---|---|
326b9cac TS |
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 | ||
782fbec7 | 11 | static const enum snd_bebob_clock_type phase88_rack_clk_src_types[] = { |
ba517713 TS |
12 | SND_BEBOB_CLOCK_TYPE_INTERNAL, |
13 | SND_BEBOB_CLOCK_TYPE_EXTERNAL, /* S/PDIF */ | |
14 | SND_BEBOB_CLOCK_TYPE_EXTERNAL, /* Word Clock */ | |
15 | }; | |
326b9cac TS |
16 | static int |
17 | phase88_rack_clk_src_get(struct snd_bebob *bebob, unsigned int *id) | |
18 | { | |
19 | unsigned int enable_ext, enable_word; | |
20 | int err; | |
21 | ||
3f403286 | 22 | err = avc_audio_get_selector(bebob->unit, 0, 9, &enable_ext); |
326b9cac TS |
23 | if (err < 0) |
24 | goto end; | |
3f403286 | 25 | err = avc_audio_get_selector(bebob->unit, 0, 8, &enable_word); |
326b9cac TS |
26 | if (err < 0) |
27 | goto end; | |
28 | ||
7ce5c926 TS |
29 | if (enable_ext == 0) |
30 | *id = 0; | |
31 | else if (enable_word == 0) | |
32 | *id = 1; | |
33 | else | |
34 | *id = 2; | |
326b9cac TS |
35 | end: |
36 | return err; | |
37 | } | |
38 | ||
6b9866c8 | 39 | static const struct snd_bebob_rate_spec phase_series_rate_spec = { |
326b9cac TS |
40 | .get = &snd_bebob_stream_get_rate, |
41 | .set = &snd_bebob_stream_set_rate, | |
42 | }; | |
43 | ||
44 | /* PHASE 88 Rack FW */ | |
6b9866c8 | 45 | static const struct snd_bebob_clock_spec phase88_rack_clk = { |
ba517713 | 46 | .num = ARRAY_SIZE(phase88_rack_clk_src_types), |
ba517713 | 47 | .types = phase88_rack_clk_src_types, |
326b9cac TS |
48 | .get = &phase88_rack_clk_src_get, |
49 | }; | |
6b9866c8 | 50 | const struct snd_bebob_spec phase88_rack_spec = { |
326b9cac TS |
51 | .clock = &phase88_rack_clk, |
52 | .rate = &phase_series_rate_spec, | |
53 | .meter = NULL | |
54 | }; |