iMX6 LVDS Clock Init Issue
On boot, the function prints
clk_set_parent: failed to switch parent of ldb_di0_div_sel due to child mux ipu1_di1_sel
and returns with error, so the rest of the needed setup appears NOT to occur.
The code checks for a specific bit set in the clk flags, if it is then it does the above failure
/* check two consecutive basic mux clocks */
./include/linux/clk-provider.h:38:#define CLK_IS_BASIC_MUX BIT(9)
threads:
https://community.nxp.com/thread/306801
explanation of this seemingly rather recent patch – added into kernel 3.14 a couple years ago:
When switching parent clock with another basic mux clock being its
child, a glitch might be generated and propagated to downstream clocks
through this child mux. The patch adds a flag CLK_IS_BASIC_MUX to identify the basic mux clocks,
and prohibit the parent switching when the clock itself is the parent of
any basic mux clock. With this check, the parent switching of a clock
has to happen before the child mux switches to this clock path.
A hacked version of the kernel which won’t stop at this checkpoint should hopefully continue the clock parent configuration as asked, on the assumption that we want to push forward regardless of the potential clock glitch the patcher is worried about.
Release from NXP about the problem:
http://www.nxp.com/files/32bit/doc/eng_bulletin/EB821.pdf
There have been recent (2016) kernel patches addressing the issue.