On Tue, Sep 05, 2017 at 10:45:29AM -0700, Nicolin Chen wrote: > The ipg clock is merely used to access registers, and has nothing > (directly) to do with external clock outputs. The driver shall not > change the ipg clock as the system ipg clock (its parent clock) > might be messed and even system time would get weird -- happened > once when the fsl_spdif driver used to call clk_set_rate() on its > ipg clock. Although the clock controller should have some kind of > protection in my opinion, we just avoid IP clock rate change in all > audio drivers as well. Yes, the clock API needs constraints code. > On the other hand, the sys clock (baudclk in the driver) should be > configured whenever it's related to external clock outputs. When I > implemented this set_sysclk() for fsl_ssi.c, I used it to set this > sys clock (baudclk) by a machine driver, in order to set bit clock. > Then someone patched the driver by moving all the code to set_bclk() > to make machine drivers simpler. Now the set_sysclk() is remained > to give machine drivers a chance to override clock configurations > in the hw_params(). This could be used in TDM or some other special > cases (It could also have a purpose for backwards compatibility). > So here, we should set baudclk (BCLK generator). No, that's just going to cause confusion - if all the other drivers are using set_sysclk() to set an input clock rate to the IP rather than an output clock but your driver does something else then sooner or later someone will run into trouble with that.