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 | ||
ba517713 TS |
11 | static enum snd_bebob_clock_type phase88_rack_clk_src_types[] = { |
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 | ||
ba517713 TS |
39 | static enum snd_bebob_clock_type phase24_series_clk_src_types[] = { |
40 | SND_BEBOB_CLOCK_TYPE_INTERNAL, | |
41 | SND_BEBOB_CLOCK_TYPE_EXTERNAL, /* S/PDIF */ | |
42 | }; | |
326b9cac TS |
43 | static int |
44 | phase24_series_clk_src_get(struct snd_bebob *bebob, unsigned int *id) | |
45 | { | |
ba517713 TS |
46 | int err; |
47 | ||
48 | err = avc_audio_get_selector(bebob->unit, 0, 4, id); | |
49 | if (err < 0) | |
50 | return err; | |
51 | ||
52 | if (*id >= ARRAY_SIZE(phase24_series_clk_src_types)) | |
53 | return -EIO; | |
54 | ||
55 | return 0; | |
326b9cac TS |
56 | } |
57 | ||
6b9866c8 | 58 | static const struct snd_bebob_rate_spec phase_series_rate_spec = { |
326b9cac TS |
59 | .get = &snd_bebob_stream_get_rate, |
60 | .set = &snd_bebob_stream_set_rate, | |
61 | }; | |
62 | ||
63 | /* PHASE 88 Rack FW */ | |
6b9866c8 | 64 | static const struct snd_bebob_clock_spec phase88_rack_clk = { |
ba517713 | 65 | .num = ARRAY_SIZE(phase88_rack_clk_src_types), |
ba517713 | 66 | .types = phase88_rack_clk_src_types, |
326b9cac TS |
67 | .get = &phase88_rack_clk_src_get, |
68 | }; | |
6b9866c8 | 69 | const struct snd_bebob_spec phase88_rack_spec = { |
326b9cac TS |
70 | .clock = &phase88_rack_clk, |
71 | .rate = &phase_series_rate_spec, | |
72 | .meter = NULL | |
73 | }; | |
74 | ||
75 | /* 'PHASE 24 FW' and 'PHASE X24 FW' */ | |
6b9866c8 | 76 | static const struct snd_bebob_clock_spec phase24_series_clk = { |
ba517713 | 77 | .num = ARRAY_SIZE(phase24_series_clk_src_types), |
ba517713 | 78 | .types = phase24_series_clk_src_types, |
326b9cac TS |
79 | .get = &phase24_series_clk_src_get, |
80 | }; | |
6b9866c8 | 81 | const struct snd_bebob_spec phase24_series_spec = { |
326b9cac TS |
82 | .clock = &phase24_series_clk, |
83 | .rate = &phase_series_rate_spec, | |
84 | .meter = NULL | |
85 | }; |