ALSA: firewire-motu: code refactoring for source detection of sampling clock in v3 protocol
Current implementation of driver has two similar helper functions for source detection of sampling clock. This commit merges them as a code refactoring. Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp> Link: https://lore.kernel.org/r/20210623075941.72562-7-o-takashi@sakamocchi.jp Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
Родитель
53ed8cf625
Коммит
ef8f14ad2a
|
@ -97,9 +97,19 @@ int snd_motu_protocol_v3_set_clock_rate(struct snd_motu *motu,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int detect_clock_source_828mk3(struct snd_motu *motu, u32 data,
|
||||
enum snd_motu_clock_source *src)
|
||||
int snd_motu_protocol_v3_get_clock_source(struct snd_motu *motu,
|
||||
enum snd_motu_clock_source *src)
|
||||
{
|
||||
__be32 reg;
|
||||
u32 data;
|
||||
int err;
|
||||
|
||||
err = snd_motu_transaction_read(motu, V3_CLOCK_STATUS_OFFSET, ®,
|
||||
sizeof(reg));
|
||||
if (err < 0)
|
||||
return err;
|
||||
data = be32_to_cpu(reg) & V3_CLOCK_SOURCE_MASK;
|
||||
|
||||
switch (data) {
|
||||
case 0x00:
|
||||
*src = SND_MOTU_CLOCK_SOURCE_INTERNAL;
|
||||
|
@ -118,7 +128,6 @@ static int detect_clock_source_828mk3(struct snd_motu *motu, u32 data,
|
|||
{
|
||||
__be32 reg;
|
||||
u32 options;
|
||||
int err;
|
||||
|
||||
err = snd_motu_transaction_read(motu,
|
||||
V3_OPT_IFACE_MODE_OFFSET, ®, sizeof(reg));
|
||||
|
@ -137,7 +146,6 @@ static int detect_clock_source_828mk3(struct snd_motu *motu, u32 data,
|
|||
else
|
||||
*src = SND_MOTU_CLOCK_SOURCE_ADAT_ON_OPT_B;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
default:
|
||||
|
@ -148,49 +156,6 @@ static int detect_clock_source_828mk3(struct snd_motu *motu, u32 data,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int v3_detect_clock_source(struct snd_motu *motu, u32 data,
|
||||
enum snd_motu_clock_source *src)
|
||||
{
|
||||
switch (data) {
|
||||
case 0x00:
|
||||
*src = SND_MOTU_CLOCK_SOURCE_INTERNAL;
|
||||
break;
|
||||
case 0x01:
|
||||
*src = SND_MOTU_CLOCK_SOURCE_WORD_ON_BNC;
|
||||
break;
|
||||
case 0x02:
|
||||
*src = SND_MOTU_CLOCK_SOURCE_SPH;
|
||||
break;
|
||||
case 0x10:
|
||||
*src = SND_MOTU_CLOCK_SOURCE_SPDIF_ON_COAX;
|
||||
break;
|
||||
default:
|
||||
*src = SND_MOTU_CLOCK_SOURCE_UNKNOWN;
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int snd_motu_protocol_v3_get_clock_source(struct snd_motu *motu,
|
||||
enum snd_motu_clock_source *src)
|
||||
{
|
||||
__be32 reg;
|
||||
u32 data;
|
||||
int err;
|
||||
|
||||
err = snd_motu_transaction_read(motu, V3_CLOCK_STATUS_OFFSET, ®,
|
||||
sizeof(reg));
|
||||
if (err < 0)
|
||||
return err;
|
||||
data = be32_to_cpu(reg) & V3_CLOCK_SOURCE_MASK;
|
||||
|
||||
if (motu->spec == &snd_motu_spec_828mk3_fw || motu->spec == &snd_motu_spec_828mk3_hybrid)
|
||||
return detect_clock_source_828mk3(motu, data, src);
|
||||
else
|
||||
return v3_detect_clock_source(motu, data, src);
|
||||
}
|
||||
|
||||
int snd_motu_protocol_v3_switch_fetching_mode(struct snd_motu *motu,
|
||||
bool enable)
|
||||
{
|
||||
|
|
Загрузка…
Ссылка в новой задаче