ALSA: firewire-motu: detect SPH source of sampling clock
In MOTU FireWire series, devices have a mode to generate sampling clock from a sequence of source packet header (SPH) included in each data block of received packet. This mode is used for several purposes such as mode for SMPTE time code, sync to the other sound cards and so on. This commit adds support for the SPH mode. Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp> Link: https://lore.kernel.org/r/20191030080644.1704-4-o-takashi@sakamocchi.jp Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
1ef2ff9414
commit
3f58f004bf
|
@ -159,7 +159,8 @@ static int pcm_open(struct snd_pcm_substream *substream)
|
|||
// When source of clock is not internal or any stream is reserved for
|
||||
// transmission of PCM frames, the available sampling rate is limited
|
||||
// at current one.
|
||||
if (src != SND_MOTU_CLOCK_SOURCE_INTERNAL ||
|
||||
if ((src != SND_MOTU_CLOCK_SOURCE_INTERNAL &&
|
||||
src != SND_MOTU_CLOCK_SOURCE_SPH) ||
|
||||
(motu->substreams_counter > 0 && d->events_per_period > 0)) {
|
||||
unsigned int frames_per_period = d->events_per_period;
|
||||
unsigned int frames_per_buffer = d->events_per_buffer;
|
||||
|
|
|
@ -19,6 +19,7 @@ static const char *const clock_names[] = {
|
|||
[SND_MOTU_CLOCK_SOURCE_SPDIF_ON_COAX] = "S/PCIF on coaxial interface",
|
||||
[SND_MOTU_CLOCK_SOURCE_AESEBU_ON_XLR] = "AESEBU on XLR interface",
|
||||
[SND_MOTU_CLOCK_SOURCE_WORD_ON_BNC] = "Word clock on BNC interface",
|
||||
[SND_MOTU_CLOCK_SOURCE_SPH] = "Source packet header",
|
||||
[SND_MOTU_CLOCK_SOURCE_UNKNOWN] = "Unknown",
|
||||
};
|
||||
|
||||
|
|
|
@ -114,6 +114,9 @@ static int v2_get_clock_source(struct snd_motu *motu,
|
|||
case 2:
|
||||
*src = SND_MOTU_CLOCK_SOURCE_SPDIF_ON_COAX;
|
||||
break;
|
||||
case 3:
|
||||
*src = SND_MOTU_CLOCK_SOURCE_SPH;
|
||||
break;
|
||||
case 4:
|
||||
*src = SND_MOTU_CLOCK_SOURCE_WORD_ON_BNC;
|
||||
break;
|
||||
|
|
|
@ -104,6 +104,8 @@ static int v3_get_clock_source(struct snd_motu *motu,
|
|||
*src = SND_MOTU_CLOCK_SOURCE_INTERNAL;
|
||||
} else if (val == 0x01) {
|
||||
*src = SND_MOTU_CLOCK_SOURCE_WORD_ON_BNC;
|
||||
} else if (val == 0x02) {
|
||||
*src = SND_MOTU_CLOCK_SOURCE_SPH;
|
||||
} else if (val == 0x10) {
|
||||
*src = SND_MOTU_CLOCK_SOURCE_SPDIF_ON_COAX;
|
||||
} else if (val == 0x18 || val == 0x19) {
|
||||
|
|
|
@ -104,6 +104,7 @@ enum snd_motu_clock_source {
|
|||
SND_MOTU_CLOCK_SOURCE_SPDIF_ON_COAX,
|
||||
SND_MOTU_CLOCK_SOURCE_AESEBU_ON_XLR,
|
||||
SND_MOTU_CLOCK_SOURCE_WORD_ON_BNC,
|
||||
SND_MOTU_CLOCK_SOURCE_SPH,
|
||||
SND_MOTU_CLOCK_SOURCE_UNKNOWN,
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in New Issue