[alsa-devel] ASOC snd_soc_dai_ops for clock mux control

Gellner, Christoph (ADITG/SW1) cgellner at de.adit-jv.com
Wed Apr 3 18:22:00 CEST 2013

Hi all,

I'm working on the driver of an audio CPU DAI IP providing
-       Internal clocks which can be used for master clock generation by TX as well as RX section
-       One oversampling clock available to RX section
-       One oversampling clock available to TX section.

Kernel version is 3.5.7

I want to add support to the CPU DAI driver to
-       Specify the rate of the input clocks
-       Select which of the clock inputs shall be used by RX and which shall be used by TX section

I'm currently wondering how to map this to existing snd_soc_dai_ops functions.
Currently I see only set_sysclk, set_pll, set_clkdiv for clock control.

I plan to use set_sysclk to specify the rate as well as the direction of each clock.

What is currently missing for me is a way to specify the clock to be used by RX or TX section.

I can't really add this in set_sysclk. In case I switch to clock X when set_sysclk is called with clock ID of X, I need a way to distinguish if RX or TX section or both need to switch to this clock.
But I can't really double the internal clock X in virtual clocks X_TX, X_RX (one time for TX and one time for RX section) as the internal clock X has only one rate for both sections and this would not represent the hardware correctly.

Do you have any recommendation how to implement ?

What do you think about adding a new function pointer to snd_soc_dai_ops ?
int (*set_clkmux)(struct snd_soc_dai *dai, int mux_id, int source_id);
I think this would be the cleanest solution as it models the features of the hardware (the clock multiplexers for RX or TX sections)

It might be possible to use set_pll or set_clkdiv to realize.
I could use set_pll and ignore the freq_in and freq_out
I could use set_clkdiv and interpret div (divider integer value) as a source_id
But this is not a 100% clean solution in my opinion.

Best regards


More information about the Alsa-devel mailing list