• Krzysztof Kozlowski's avatar
    clk: samsung: exynos-clkout: convert to module driver · 9484f2cb
    Krzysztof Kozlowski authored
    The Exynos clkout driver depends on board input clock (typically XXTI or
    XUSBXTI), however on Exynos4 boards these clocks were modeled as part of
    SoC clocks (Exynos4 clocks driver).  Obviously this is not proper, but
    correcting it would break DT backward compatibility.
    
    Both drivers - clkout and Exynos4 clocks - register the clock providers
    with CLK_OF_DECLARE/OF_DECLARE_1 so their order is fragile (in the
    Makefile clkout is behind Exynos4 clock).  It will work only if the
    Exynos4 clock driver comes up before clkout.
    
    A change in DTS adding input clock reference to Exynos4 clocks input
    PLL, see reverted commit eaf2d2f6 ("ARM: dts: exynos: add input
    clock to CMU in Exynos4412 Odroid"), caused probe reorder: the clkout
    appeared before Exynos4 clock provider.  Since clkout depends on Exynos4
    clocks and does not support deferred probe, this did not work and caused
    later failure of usb3503 USB hub probe which needs clkout:
    
        [    5.007442] usb3503 0-0008: unable to request refclk (-517)
    
    The Exynos clkout driver is not a critical/core clock so there is
    actually no problem in instantiating it later, as a regular module.
    This removes specific probe ordering and adds support for probe
    deferral.
    Signed-off-by: default avatarKrzysztof Kozlowski <krzk@kernel.org>
    Tested-by: default avatarSylwester Nawrocki <s.nawrocki@samsung.com>
    Reviewed-by: default avatarSylwester Nawrocki <s.nawrocki@samsung.com>
    Link: https://lore.kernel.org/r/20201001165646.32279-3-krzk@kernel.org
    9484f2cb
clk-exynos-clkout.c 5.83 KB