OSDN Git Service

clk: Use parent node pointer during registration if necessary
authorStephen Boyd <sboyd@kernel.org>
Mon, 30 Dec 2019 18:29:35 +0000 (10:29 -0800)
committerStephen Boyd <sboyd@kernel.org>
Sun, 5 Jan 2020 07:08:17 +0000 (23:08 -0800)
commit9011f92622e5ef2d075f45e5fa818776d4feb8c0
tree491b8873b07f2538f6800cf13b2a28bdc3255caf
parente42617b825f8073569da76dc4510bfa019b1c35a
clk: Use parent node pointer during registration if necessary

Sometimes clk drivers are attached to devices which are children of a
parent device that is connected to a node in DT. This happens when
devices are MFD-ish and the parent device driver mostly registers child
devices to match against drivers placed in their respective subsystem
directories like drivers/clk, drivers/regulator, etc. When the clk
driver calls clk_register() with a device pointer, that struct device
pointer won't have a device_node associated with it because it was
created purely in software as a way to partition logic to a subsystem.

This causes problems for the way we find parent clks for the clks
registered by these child devices because we look at the registering
device's device_node pointer to lookup 'clocks' and 'clock-names'
properties. Let's use the parent device's device_node pointer if the
registering device doesn't have a device_node but the parent does. This
simplifies clk registration code by avoiding the need to assign some
device_node to the device registering the clk.

Cc: Bjorn Andersson <bjorn.andersson@linaro.org>
Reported-by: Niklas Cassel <niklas.cassel@linaro.org>
Signed-off-by: Stephen Boyd <sboyd@kernel.org>
Link: https://lkml.kernel.org/r/20191230190455.141339-1-sboyd@kernel.org
[sboyd@kernel.org: Fixup kernel-doc notation]
Reviewed-by: Niklas Cassel <nks@flawful.org>
Reviewed-by: Bjorn Andersson <bjorn.andersson@linaro.org>
Tested-by: Bjorn Andersson <bjorn.andersson@linaro.org>
drivers/clk/clk.c