forked from Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
53 lines
1.3 KiB
53 lines
1.3 KiB
// SPDX-License-Identifier: GPL-2.0-only |
|
/* |
|
* bebob_terratec.c - a part of driver for BeBoB based devices |
|
* |
|
* Copyright (c) 2013-2014 Takashi Sakamoto |
|
*/ |
|
|
|
#include "./bebob.h" |
|
|
|
static const enum snd_bebob_clock_type phase88_rack_clk_src_types[] = { |
|
SND_BEBOB_CLOCK_TYPE_INTERNAL, |
|
SND_BEBOB_CLOCK_TYPE_EXTERNAL, /* S/PDIF */ |
|
SND_BEBOB_CLOCK_TYPE_EXTERNAL, /* 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 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 const struct snd_bebob_clock_spec phase88_rack_clk = { |
|
.num = ARRAY_SIZE(phase88_rack_clk_src_types), |
|
.types = phase88_rack_clk_src_types, |
|
.get = &phase88_rack_clk_src_get, |
|
}; |
|
const struct snd_bebob_spec phase88_rack_spec = { |
|
.clock = &phase88_rack_clk, |
|
.rate = &phase_series_rate_spec, |
|
.meter = NULL |
|
};
|
|
|