Tom Rini | 53633a8 | 2024-02-29 12:33:36 -0500 | [diff] [blame] | 1 | Texas Instruments clkctrl clock binding |
| 2 | |
| 3 | Texas Instruments SoCs can have a clkctrl clock controller for each |
| 4 | interconnect target module. The clkctrl clock controller manages functional |
| 5 | and interface clocks for each module. Each clkctrl controller can also |
| 6 | gate one or more optional functional clocks for a module, and can have one |
| 7 | or more clock muxes. There is a clkctrl clock controller typically for each |
| 8 | interconnect target module on omap4 and later variants. |
| 9 | |
| 10 | The clock consumers can specify the index of the clkctrl clock using |
| 11 | the hardware offset from the clkctrl instance register space. The optional |
| 12 | clocks can be specified by clkctrl hardware offset and the index of the |
| 13 | optional clock. |
| 14 | |
| 15 | For more information, please see the Linux clock framework binding at |
| 16 | Documentation/devicetree/bindings/clock/clock-bindings.txt. |
| 17 | |
| 18 | Required properties : |
| 19 | - compatible : shall be "ti,clkctrl" or a clock domain specific name: |
| 20 | "ti,clkctrl-l4-cfg" |
| 21 | "ti,clkctrl-l4-per" |
| 22 | "ti,clkctrl-l4-secure" |
| 23 | "ti,clkctrl-l4-wkup" |
| 24 | - clock-output-names : from common clock binding |
| 25 | - #clock-cells : shall contain 2 with the first entry being the instance |
| 26 | offset from the clock domain base and the second being the |
| 27 | clock index |
| 28 | - reg : clock registers |
| 29 | |
| 30 | Example: Clock controller node on omap 4430: |
| 31 | |
| 32 | &cm2 { |
| 33 | l4per: cm@1400 { |
| 34 | cm_l4per@0 { |
| 35 | cm_l4per_clkctrl: clock@20 { |
| 36 | compatible = "ti,clkctrl"; |
| 37 | clock-output-names = "l4_per"; |
| 38 | reg = <0x20 0x1b0>; |
| 39 | #clock-cells = <2>; |
| 40 | }; |
| 41 | }; |
| 42 | }; |
| 43 | }; |
| 44 | |
| 45 | Example: Preprocessor helper macros in dt-bindings/clock/ti-clkctrl.h |
| 46 | |
| 47 | #define OMAP4_CLKCTRL_OFFSET 0x20 |
| 48 | #define OMAP4_CLKCTRL_INDEX(offset) ((offset) - OMAP4_CLKCTRL_OFFSET) |
| 49 | #define MODULEMODE_HWCTRL 1 |
| 50 | #define MODULEMODE_SWCTRL 2 |
| 51 | |
| 52 | #define OMAP4_GPTIMER10_CLKTRL OMAP4_CLKCTRL_INDEX(0x28) |
| 53 | #define OMAP4_GPTIMER11_CLKTRL OMAP4_CLKCTRL_INDEX(0x30) |
| 54 | #define OMAP4_GPTIMER2_CLKTRL OMAP4_CLKCTRL_INDEX(0x38) |
| 55 | ... |
| 56 | #define OMAP4_GPIO2_CLKCTRL OMAP_CLKCTRL_INDEX(0x60) |
| 57 | |
| 58 | Example: Clock consumer node for GPIO2: |
| 59 | |
| 60 | &gpio2 { |
| 61 | clocks = <&cm_l4per_clkctrl OMAP4_GPIO2_CLKCTRL 0 |
| 62 | &cm_l4per_clkctrl OMAP4_GPIO2_CLKCTRL 8>; |
| 63 | }; |