mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-12 00:00:00 +00:00
6c30905205
We currently have a hidden dependency to the device tree node name for the clkctrl clocks. Instead of using standard node name like "clock", we must use "l4-per-clkctrl" type naming so the clock driver can find the associated clock domain. Further, if "clk" is specified for a clock node name, the driver sets TI_CLK_CLKCTRL_COMPAT flag that uses different logic for the clock name based on the parent node name for the all the clkctrl clocks for the SoC. If the clock node naming dependency is not understood, the related clockdomain is not found, or a wrong one can get used if a clock manager has multiple clock domains. As each clkctrl instance represents a single clock domain, let's allow using domain specific compatible names to specify the clock domain. This simplifies things and removes the hidden dependency to the node name. And then later on, after the node names have been standardized, we can drop the related code for parsing the node names. Let's also update the binding to use standard "clock" node naming instead of "clk" and add the missing description for reg. Cc: devicetree@vger.kernel.org Cc: Rob Herring <robh+dt@kernel.org> Signed-off-by: Tony Lindgren <tony@atomide.com> Acked-by: Rob Herring <robh@kernel.org> Acked-by: Stephen Boyd <sboyd@kernel.org> Signed-off-by: Tero Kristo <t-kristo@ti.com>
62 lines
2.0 KiB
Plaintext
62 lines
2.0 KiB
Plaintext
Texas Instruments clkctrl clock binding
|
|
|
|
Texas Instruments SoCs can have a clkctrl clock controller for each
|
|
interconnect target module. The clkctrl clock controller manages functional
|
|
and interface clocks for each module. Each clkctrl controller can also
|
|
gate one or more optional functional clocks for a module, and can have one
|
|
or more clock muxes. There is a clkctrl clock controller typically for each
|
|
interconnect target module on omap4 and later variants.
|
|
|
|
The clock consumers can specify the index of the clkctrl clock using
|
|
the hardware offset from the clkctrl instance register space. The optional
|
|
clocks can be specified by clkctrl hardware offset and the index of the
|
|
optional clock.
|
|
|
|
For more information, please see the Linux clock framework binding at
|
|
Documentation/devicetree/bindings/clock/clock-bindings.txt.
|
|
|
|
Required properties :
|
|
- compatible : shall be "ti,clkctrl" or a clock domain specific name:
|
|
"ti,clkctrl-l4-cfg"
|
|
"ti,clkctrl-l4-per"
|
|
"ti,clkctrl-l4-secure"
|
|
"ti,clkctrl-l4-wkup"
|
|
- #clock-cells : shall contain 2 with the first entry being the instance
|
|
offset from the clock domain base and the second being the
|
|
clock index
|
|
- reg : clock registers
|
|
|
|
Example: Clock controller node on omap 4430:
|
|
|
|
&cm2 {
|
|
l4per: cm@1400 {
|
|
cm_l4per@0 {
|
|
cm_l4per_clkctrl: clock@20 {
|
|
compatible = "ti,clkctrl-l4-per", "ti,clkctrl";
|
|
reg = <0x20 0x1b0>;
|
|
#clock-cells = <2>;
|
|
};
|
|
};
|
|
};
|
|
};
|
|
|
|
Example: Preprocessor helper macros in dt-bindings/clock/ti-clkctrl.h
|
|
|
|
#define OMAP4_CLKCTRL_OFFSET 0x20
|
|
#define OMAP4_CLKCTRL_INDEX(offset) ((offset) - OMAP4_CLKCTRL_OFFSET)
|
|
#define MODULEMODE_HWCTRL 1
|
|
#define MODULEMODE_SWCTRL 2
|
|
|
|
#define OMAP4_GPTIMER10_CLKTRL OMAP4_CLKCTRL_INDEX(0x28)
|
|
#define OMAP4_GPTIMER11_CLKTRL OMAP4_CLKCTRL_INDEX(0x30)
|
|
#define OMAP4_GPTIMER2_CLKTRL OMAP4_CLKCTRL_INDEX(0x38)
|
|
...
|
|
#define OMAP4_GPIO2_CLKCTRL OMAP_CLKCTRL_INDEX(0x60)
|
|
|
|
Example: Clock consumer node for GPIO2:
|
|
|
|
&gpio2 {
|
|
clocks = <&cm_l4per_clkctrl OMAP4_GPIO2_CLKCTRL 0
|
|
&cm_l4per_clkctrl OMAP4_GPIO2_CLKCTRL 8>;
|
|
};
|