| Binding for TI divider clock | |
| Binding status: Unstable - ABI compatibility may be broken in the future | |
| This binding uses the common clock binding[1]. It assumes a | |
| register-mapped adjustable clock rate divider that does not gate and has | |
| only one input clock or parent. By default the value programmed into | |
| the register is one less than the actual divisor value. E.g: | |
| register value actual divisor value | |
| 0 1 | |
| 1 2 | |
| 2 3 | |
| This assumption may be modified by the following optional properties: | |
| ti,index-starts-at-one - valid divisor values start at 1, not the default | |
| of 0. E.g: | |
| register value actual divisor value | |
| 1 1 | |
| 2 2 | |
| 3 3 | |
| ti,index-power-of-two - valid divisor values are powers of two. E.g: | |
| register value actual divisor value | |
| 0 1 | |
| 1 2 | |
| 2 4 | |
| Additionally an array of valid dividers may be supplied like so: | |
| ti,dividers = <4>, <8>, <0>, <16>; | |
| Which will map the resulting values to a divisor table by their index: | |
| register value actual divisor value | |
| 0 4 | |
| 1 8 | |
| 2 <invalid divisor, skipped> | |
| 3 16 | |
| Any zero value in this array means the corresponding bit-value is invalid | |
| and must not be used. | |
| The binding must also provide the register to control the divider and | |
| unless the divider array is provided, min and max dividers. Optionally | |
| the number of bits to shift that mask, if necessary. If the shift value | |
| is missing it is the same as supplying a zero shift. | |
| This binding can also optionally provide support to the hardware autoidle | |
| feature, see [2]. | |
| [1] Documentation/devicetree/bindings/clock/clock-bindings.txt | |
| [2] Documentation/devicetree/bindings/clock/ti/autoidle.txt | |
| Required properties: | |
| - compatible : shall be "ti,divider-clock" or "ti,composite-divider-clock". | |
| - #clock-cells : from common clock binding; shall be set to 0. | |
| - clocks : link to phandle of parent clock | |
| - reg : offset for register controlling adjustable divider | |
| Optional properties: | |
| - clock-output-names : from common clock binding. | |
| - ti,dividers : array of integers defining divisors | |
| - ti,bit-shift : number of bits to shift the divider value, defaults to 0 | |
| - ti,min-div : min divisor for dividing the input clock rate, only | |
| needed if the first divisor is offset from the default value (1) | |
| - ti,max-div : max divisor for dividing the input clock rate, only needed | |
| if ti,dividers is not defined. | |
| - ti,index-starts-at-one : valid divisor programming starts at 1, not zero, | |
| only valid if ti,dividers is not defined. | |
| - ti,index-power-of-two : valid divisor programming must be a power of two, | |
| only valid if ti,dividers is not defined. | |
| - ti,autoidle-shift : bit shift of the autoidle enable bit for the clock, | |
| see [2] | |
| - ti,invert-autoidle-bit : autoidle is enabled by setting the bit to 0, | |
| see [2] | |
| - ti,set-rate-parent : clk_set_rate is propagated to parent | |
| Examples: | |
| dpll_usb_m2_ck: dpll_usb_m2_ck@4a008190 { | |
| #clock-cells = <0>; | |
| compatible = "ti,divider-clock"; | |
| clocks = <&dpll_usb_ck>; | |
| ti,max-div = <127>; | |
| reg = <0x190>; | |
| ti,index-starts-at-one; | |
| }; | |
| aess_fclk: aess_fclk@4a004528 { | |
| #clock-cells = <0>; | |
| compatible = "ti,divider-clock"; | |
| clocks = <&abe_clk>; | |
| ti,bit-shift = <24>; | |
| reg = <0x528>; | |
| ti,max-div = <2>; | |
| }; | |
| dpll_core_m3x2_div_ck: dpll_core_m3x2_div_ck { | |
| #clock-cells = <0>; | |
| compatible = "ti,composite-divider-clock"; | |
| clocks = <&dpll_core_x2_ck>; | |
| ti,max-div = <31>; | |
| reg = <0x0134>; | |
| ti,index-starts-at-one; | |
| }; | |
| ssi_ssr_div_fck_3430es2: ssi_ssr_div_fck_3430es2 { | |
| #clock-cells = <0>; | |
| compatible = "ti,composite-divider-clock"; | |
| clocks = <&corex2_fck>; | |
| ti,bit-shift = <8>; | |
| reg = <0x0a40>; | |
| ti,dividers = <0>, <1>, <2>, <3>, <4>, <0>, <6>, <0>, <8>; | |
| }; |