xref: /linux/Documentation/devicetree/bindings/clock/ti/ti,mux-clock.yaml (revision 9f3a2ba62c7226a6604b8aaeb92b5ff906fa4e6b)
1*5fbe6f51SAndreas Kemnade# SPDX-License-Identifier: GPL-2.0-only
2*5fbe6f51SAndreas Kemnade%YAML 1.2
3*5fbe6f51SAndreas Kemnade---
4*5fbe6f51SAndreas Kemnade$id: http://devicetree.org/schemas/clock/ti/ti,mux-clock.yaml#
5*5fbe6f51SAndreas Kemnade$schema: http://devicetree.org/meta-schemas/core.yaml#
6*5fbe6f51SAndreas Kemnade
7*5fbe6f51SAndreas Kemnadetitle: Texas Instruments mux clock
8*5fbe6f51SAndreas Kemnade
9*5fbe6f51SAndreas Kemnademaintainers:
10*5fbe6f51SAndreas Kemnade  - Tero Kristo <kristo@kernel.org>
11*5fbe6f51SAndreas Kemnade
12*5fbe6f51SAndreas Kemnadedescription: |
13*5fbe6f51SAndreas Kemnade  This clock assumes a register-mapped multiplexer with multiple inpt clock
14*5fbe6f51SAndreas Kemnade  signals or parents, one of which can be selected as output. This clock does
15*5fbe6f51SAndreas Kemnade  not gate or adjust the parent rate via a divider or multiplier.
16*5fbe6f51SAndreas Kemnade
17*5fbe6f51SAndreas Kemnade  By default the "clocks" property lists the parents in the same order
18*5fbe6f51SAndreas Kemnade  as they are programmed into the register.  E.g:
19*5fbe6f51SAndreas Kemnade
20*5fbe6f51SAndreas Kemnade    clocks = <&foo_clock>, <&bar_clock>, <&baz_clock>;
21*5fbe6f51SAndreas Kemnade
22*5fbe6f51SAndreas Kemnade  Results in programming the register as follows:
23*5fbe6f51SAndreas Kemnade
24*5fbe6f51SAndreas Kemnade  register value   selected parent clock
25*5fbe6f51SAndreas Kemnade  0                foo_clock
26*5fbe6f51SAndreas Kemnade  1                bar_clock
27*5fbe6f51SAndreas Kemnade  2                baz_clock
28*5fbe6f51SAndreas Kemnade
29*5fbe6f51SAndreas Kemnade  Some clock controller IPs do not allow a value of zero to be programmed
30*5fbe6f51SAndreas Kemnade  into the register, instead indexing begins at 1.  The optional property
31*5fbe6f51SAndreas Kemnade  "index-starts-at-one" modified the scheme as follows:
32*5fbe6f51SAndreas Kemnade
33*5fbe6f51SAndreas Kemnade  register value   selected clock parent
34*5fbe6f51SAndreas Kemnade  1                foo_clock
35*5fbe6f51SAndreas Kemnade  2                bar_clock
36*5fbe6f51SAndreas Kemnade  3                baz_clock
37*5fbe6f51SAndreas Kemnade
38*5fbe6f51SAndreas Kemnade  The binding must provide the register to control the mux. Optionally
39*5fbe6f51SAndreas Kemnade  the number of bits to shift the control field in the register can be
40*5fbe6f51SAndreas Kemnade  supplied. If the shift value is missing it is the same as supplying
41*5fbe6f51SAndreas Kemnade  a zero shift.
42*5fbe6f51SAndreas Kemnade
43*5fbe6f51SAndreas Kemnadeproperties:
44*5fbe6f51SAndreas Kemnade  compatible:
45*5fbe6f51SAndreas Kemnade    enum:
46*5fbe6f51SAndreas Kemnade      - ti,mux-clock
47*5fbe6f51SAndreas Kemnade      - ti,composite-mux-clock
48*5fbe6f51SAndreas Kemnade
49*5fbe6f51SAndreas Kemnade  "#clock-cells":
50*5fbe6f51SAndreas Kemnade    const: 0
51*5fbe6f51SAndreas Kemnade
52*5fbe6f51SAndreas Kemnade  clocks: true
53*5fbe6f51SAndreas Kemnade
54*5fbe6f51SAndreas Kemnade  clock-output-names:
55*5fbe6f51SAndreas Kemnade    maxItems: 1
56*5fbe6f51SAndreas Kemnade
57*5fbe6f51SAndreas Kemnade  reg:
58*5fbe6f51SAndreas Kemnade    maxItems: 1
59*5fbe6f51SAndreas Kemnade
60*5fbe6f51SAndreas Kemnade  ti,bit-shift:
61*5fbe6f51SAndreas Kemnade    $ref: /schemas/types.yaml#/definitions/uint32
62*5fbe6f51SAndreas Kemnade    description:
63*5fbe6f51SAndreas Kemnade      Number of bits to shift the bit-mask
64*5fbe6f51SAndreas Kemnade    maximum: 31
65*5fbe6f51SAndreas Kemnade    default: 0
66*5fbe6f51SAndreas Kemnade
67*5fbe6f51SAndreas Kemnade  ti,index-starts-at-one:
68*5fbe6f51SAndreas Kemnade    type: boolean
69*5fbe6f51SAndreas Kemnade    description:
70*5fbe6f51SAndreas Kemnade      Valid input select programming starts at 1, not zero
71*5fbe6f51SAndreas Kemnade
72*5fbe6f51SAndreas Kemnade  ti,set-rate-parent:
73*5fbe6f51SAndreas Kemnade    type: boolean
74*5fbe6f51SAndreas Kemnade    description:
75*5fbe6f51SAndreas Kemnade      clk_set_rate is propagated to parent clock,
76*5fbe6f51SAndreas Kemnade      not supported by the composite-mux-clock subtype.
77*5fbe6f51SAndreas Kemnade
78*5fbe6f51SAndreas Kemnade  ti,latch-bit:
79*5fbe6f51SAndreas Kemnade    $ref: /schemas/types.yaml#/definitions/uint32
80*5fbe6f51SAndreas Kemnade    description:
81*5fbe6f51SAndreas Kemnade      Latch the mux value to HW, only needed if the register
82*5fbe6f51SAndreas Kemnade      access requires this. As an example, dra7x DPLL_GMAC H14 muxing
83*5fbe6f51SAndreas Kemnade      implements such behavior.
84*5fbe6f51SAndreas Kemnade    maximum: 31
85*5fbe6f51SAndreas Kemnade
86*5fbe6f51SAndreas Kemnadeif:
87*5fbe6f51SAndreas Kemnade  properties:
88*5fbe6f51SAndreas Kemnade    compatible:
89*5fbe6f51SAndreas Kemnade      contains:
90*5fbe6f51SAndreas Kemnade        const: ti,composite-mux-clock
91*5fbe6f51SAndreas Kemnadethen:
92*5fbe6f51SAndreas Kemnade  properties:
93*5fbe6f51SAndreas Kemnade    ti,set-rate-parent: false
94*5fbe6f51SAndreas Kemnade
95*5fbe6f51SAndreas Kemnaderequired:
96*5fbe6f51SAndreas Kemnade  - compatible
97*5fbe6f51SAndreas Kemnade  - "#clock-cells"
98*5fbe6f51SAndreas Kemnade  - clocks
99*5fbe6f51SAndreas Kemnade  - reg
100*5fbe6f51SAndreas Kemnade
101*5fbe6f51SAndreas KemnadeadditionalProperties: false
102*5fbe6f51SAndreas Kemnade
103*5fbe6f51SAndreas Kemnadeexamples:
104*5fbe6f51SAndreas Kemnade  - |
105*5fbe6f51SAndreas Kemnade    bus {
106*5fbe6f51SAndreas Kemnade      #address-cells = <1>;
107*5fbe6f51SAndreas Kemnade      #size-cells = <0>;
108*5fbe6f51SAndreas Kemnade
109*5fbe6f51SAndreas Kemnade      clock-controller@110 {
110*5fbe6f51SAndreas Kemnade        compatible = "ti,mux-clock";
111*5fbe6f51SAndreas Kemnade        reg = <0x0110>;
112*5fbe6f51SAndreas Kemnade        #clock-cells = <0>;
113*5fbe6f51SAndreas Kemnade        clocks = <&virt_12000000_ck>, <&virt_13000000_ck>, <&virt_16800000_ck>;
114*5fbe6f51SAndreas Kemnade        ti,index-starts-at-one;
115*5fbe6f51SAndreas Kemnade        ti,set-rate-parent;
116*5fbe6f51SAndreas Kemnade      };
117*5fbe6f51SAndreas Kemnade
118*5fbe6f51SAndreas Kemnade      clock-controller@120 {
119*5fbe6f51SAndreas Kemnade        compatible = "ti,composite-mux-clock";
120*5fbe6f51SAndreas Kemnade        reg = <0x0120>;
121*5fbe6f51SAndreas Kemnade        #clock-cells = <0>;
122*5fbe6f51SAndreas Kemnade        clocks = <&core_96m_fck>, <&mcbsp_clks>;
123*5fbe6f51SAndreas Kemnade        ti,bit-shift = <4>;
124*5fbe6f51SAndreas Kemnade      };
125*5fbe6f51SAndreas Kemnade    };
126