2019-05-29 16:57:59 -07:00
// SPDX-License-Identifier: GPL-2.0-only
2014-04-25 22:45:22 +09:00
/*
* bebob_terratec . c - a part of driver for BeBoB based devices
*
* Copyright ( c ) 2013 - 2014 Takashi Sakamoto
*/
# include "./bebob.h"
2017-08-22 22:58:15 +09:00
static const enum snd_bebob_clock_type phase88_rack_clk_src_types [ ] = {
2015-06-14 12:49:29 +09:00
SND_BEBOB_CLOCK_TYPE_INTERNAL ,
SND_BEBOB_CLOCK_TYPE_EXTERNAL , /* S/PDIF */
SND_BEBOB_CLOCK_TYPE_EXTERNAL , /* Word Clock */
} ;
2014-04-25 22:45:22 +09:00
static int
phase88_rack_clk_src_get ( struct snd_bebob * bebob , unsigned int * id )
{
unsigned int enable_ext , enable_word ;
int err ;
2014-10-10 23:32:49 +09:00
err = avc_audio_get_selector ( bebob - > unit , 0 , 9 , & enable_ext ) ;
2014-04-25 22:45:22 +09:00
if ( err < 0 )
goto end ;
2014-10-10 23:32:49 +09:00
err = avc_audio_get_selector ( bebob - > unit , 0 , 8 , & enable_word ) ;
2014-04-25 22:45:22 +09:00
if ( err < 0 )
goto end ;
2014-10-26 22:49:45 +09:00
if ( enable_ext = = 0 )
* id = 0 ;
else if ( enable_word = = 0 )
* id = 1 ;
else
* id = 2 ;
2014-04-25 22:45:22 +09:00
end :
return err ;
}
2015-10-11 08:10:55 +02:00
static const struct snd_bebob_rate_spec phase_series_rate_spec = {
2014-04-25 22:45:22 +09:00
. get = & snd_bebob_stream_get_rate ,
. set = & snd_bebob_stream_set_rate ,
} ;
/* PHASE 88 Rack FW */
2015-10-11 08:10:55 +02:00
static const struct snd_bebob_clock_spec phase88_rack_clk = {
2015-06-14 12:49:29 +09:00
. num = ARRAY_SIZE ( phase88_rack_clk_src_types ) ,
. types = phase88_rack_clk_src_types ,
2014-04-25 22:45:22 +09:00
. get = & phase88_rack_clk_src_get ,
} ;
2015-10-11 08:10:55 +02:00
const struct snd_bebob_spec phase88_rack_spec = {
2014-04-25 22:45:22 +09:00
. clock = & phase88_rack_clk ,
. rate = & phase_series_rate_spec ,
. meter = NULL
} ;