On Thu, May 22, 2014 at 09:51:38AM -0600, Stephen Warren wrote: > On 05/22/2014 03:17 AM, Tushar Behera wrote: > > + if (!IS_ERR(max98090->mclk)) { > > + freq = clk_round_rate(max98090->mclk, freq); > > + clk_set_rate(max98090->mclk, freq); > > + } > What are the intended semantics of set_sysclk()? > sound/soc/tegra/tegra_wm98090.c assumes that set_sysclk() is a > notification to the CODEC driver to tell it what rate the MCLK input is > set to (the rate is set before calling set_sysclk), whereas the code > above assumes that this function is to tell the CODEC to somehow > configure its input clock to be a particular rate. I have a feeling the > code above might fail on Tegra. It's a bit of both. Since we've never had a generic clock API (and still don't really due to everything being a shambles) it's generally just a notification to the CODEC that it's at the specified rate, however if the CODEC knows about its dependencies it seems sensible for it to tell the clock API about what was asked. Ideally we want to remove all the ASoC specific clock control and use the clock API. The Tegra driver will presumably succeed unless someone does the appropriate clock hookup in DT, at which point clk_set_rate() for the rate the clock is already at really ought to succeed so things should continue to work.
Attachment:
signature.asc
Description: Digital signature