xref: /freebsd/sys/contrib/device-tree/Bindings/clock/silabs,si5351.yaml (revision 8d13bc63c0e1d50bc9e47ac1f26329c999bfecf0)
1*8d13bc63SEmmanuel Vadot# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2*8d13bc63SEmmanuel Vadot%YAML 1.2
3*8d13bc63SEmmanuel Vadot---
4*8d13bc63SEmmanuel Vadot$id: http://devicetree.org/schemas/clock/silabs,si5351.yaml#
5*8d13bc63SEmmanuel Vadot$schema: http://devicetree.org/meta-schemas/core.yaml#
6*8d13bc63SEmmanuel Vadot
7*8d13bc63SEmmanuel Vadottitle: Silicon Labs Si5351A/B/C programmable I2C clock generators
8*8d13bc63SEmmanuel Vadot
9*8d13bc63SEmmanuel Vadotdescription: |
10*8d13bc63SEmmanuel Vadot  The Silicon Labs Si5351A/B/C are programmable I2C clock generators with up to
11*8d13bc63SEmmanuel Vadot  8 outputs. Si5351A also has a reduced pin-count package (10-MSOP) where only 3
12*8d13bc63SEmmanuel Vadot  output clocks are accessible. The internal structure of the clock generators
13*8d13bc63SEmmanuel Vadot  can be found in [1].
14*8d13bc63SEmmanuel Vadot
15*8d13bc63SEmmanuel Vadot  [1] Si5351A/B/C Data Sheet
16*8d13bc63SEmmanuel Vadot      https://www.skyworksinc.com/-/media/Skyworks/SL/documents/public/data-sheets/Si5351-B.pdf
17*8d13bc63SEmmanuel Vadot
18*8d13bc63SEmmanuel Vadotmaintainers:
19*8d13bc63SEmmanuel Vadot  - Alvin Šipraga <alsi@bang-olufsen.dk>
20*8d13bc63SEmmanuel Vadot
21*8d13bc63SEmmanuel Vadotproperties:
22*8d13bc63SEmmanuel Vadot  compatible:
23*8d13bc63SEmmanuel Vadot    enum:
24*8d13bc63SEmmanuel Vadot      - silabs,si5351a      # Si5351A, 20-QFN package
25*8d13bc63SEmmanuel Vadot      - silabs,si5351a-msop # Si5351A, 10-MSOP package
26*8d13bc63SEmmanuel Vadot      - silabs,si5351b      # Si5351B, 20-QFN package
27*8d13bc63SEmmanuel Vadot      - silabs,si5351c      # Si5351C, 20-QFN package
28*8d13bc63SEmmanuel Vadot
29*8d13bc63SEmmanuel Vadot  reg:
30*8d13bc63SEmmanuel Vadot    enum:
31*8d13bc63SEmmanuel Vadot      - 0x60
32*8d13bc63SEmmanuel Vadot      - 0x61
33*8d13bc63SEmmanuel Vadot
34*8d13bc63SEmmanuel Vadot  "#address-cells":
35*8d13bc63SEmmanuel Vadot    const: 1
36*8d13bc63SEmmanuel Vadot
37*8d13bc63SEmmanuel Vadot  "#size-cells":
38*8d13bc63SEmmanuel Vadot    const: 0
39*8d13bc63SEmmanuel Vadot
40*8d13bc63SEmmanuel Vadot  "#clock-cells":
41*8d13bc63SEmmanuel Vadot    const: 1
42*8d13bc63SEmmanuel Vadot
43*8d13bc63SEmmanuel Vadot  clocks:
44*8d13bc63SEmmanuel Vadot    minItems: 1
45*8d13bc63SEmmanuel Vadot    maxItems: 2
46*8d13bc63SEmmanuel Vadot
47*8d13bc63SEmmanuel Vadot  clock-names:
48*8d13bc63SEmmanuel Vadot    minItems: 1
49*8d13bc63SEmmanuel Vadot    items:
50*8d13bc63SEmmanuel Vadot      - const: xtal
51*8d13bc63SEmmanuel Vadot      - const: clkin
52*8d13bc63SEmmanuel Vadot
53*8d13bc63SEmmanuel Vadot  silabs,pll-source:
54*8d13bc63SEmmanuel Vadot    $ref: /schemas/types.yaml#/definitions/uint32-matrix
55*8d13bc63SEmmanuel Vadot    description: |
56*8d13bc63SEmmanuel Vadot      A list of cell pairs containing a PLL index and its source. Allows to
57*8d13bc63SEmmanuel Vadot      overwrite clock source of the internal PLLs.
58*8d13bc63SEmmanuel Vadot    items:
59*8d13bc63SEmmanuel Vadot      items:
60*8d13bc63SEmmanuel Vadot        - description: PLL A (0) or PLL B (1)
61*8d13bc63SEmmanuel Vadot          enum: [ 0, 1 ]
62*8d13bc63SEmmanuel Vadot        - description: PLL source, XTAL (0) or CLKIN (1, Si5351C only).
63*8d13bc63SEmmanuel Vadot          enum: [ 0, 1 ]
64*8d13bc63SEmmanuel Vadot
65*8d13bc63SEmmanuel Vadot  silabs,pll-reset-mode:
66*8d13bc63SEmmanuel Vadot    $ref: /schemas/types.yaml#/definitions/uint32-matrix
67*8d13bc63SEmmanuel Vadot    minItems: 1
68*8d13bc63SEmmanuel Vadot    maxItems: 2
69*8d13bc63SEmmanuel Vadot    description: A list of cell pairs containing a PLL index and its reset mode.
70*8d13bc63SEmmanuel Vadot    items:
71*8d13bc63SEmmanuel Vadot      items:
72*8d13bc63SEmmanuel Vadot        - description: PLL A (0) or PLL B (1)
73*8d13bc63SEmmanuel Vadot          enum: [ 0, 1 ]
74*8d13bc63SEmmanuel Vadot        - description: |
75*8d13bc63SEmmanuel Vadot            Reset mode for the PLL. Mode can be one of:
76*8d13bc63SEmmanuel Vadot
77*8d13bc63SEmmanuel Vadot                0 - reset whenever PLL rate is adjusted (default mode)
78*8d13bc63SEmmanuel Vadot                1 - do not reset when PLL rate is adjusted
79*8d13bc63SEmmanuel Vadot
80*8d13bc63SEmmanuel Vadot            In mode 1, the PLL is only reset if the silabs,pll-reset is
81*8d13bc63SEmmanuel Vadot            specified in one of the clock output child nodes that also sources
82*8d13bc63SEmmanuel Vadot            the PLL. This mode may be preferable if output clocks are expected
83*8d13bc63SEmmanuel Vadot            to be adjusted without glitches.
84*8d13bc63SEmmanuel Vadot          enum: [ 0, 1 ]
85*8d13bc63SEmmanuel Vadot
86*8d13bc63SEmmanuel VadotpatternProperties:
87*8d13bc63SEmmanuel Vadot  "^clkout@[0-7]$":
88*8d13bc63SEmmanuel Vadot    type: object
89*8d13bc63SEmmanuel Vadot
90*8d13bc63SEmmanuel Vadot    additionalProperties: false
91*8d13bc63SEmmanuel Vadot
92*8d13bc63SEmmanuel Vadot    properties:
93*8d13bc63SEmmanuel Vadot      reg:
94*8d13bc63SEmmanuel Vadot        description: Clock output number.
95*8d13bc63SEmmanuel Vadot
96*8d13bc63SEmmanuel Vadot      clock-frequency: true
97*8d13bc63SEmmanuel Vadot
98*8d13bc63SEmmanuel Vadot      silabs,clock-source:
99*8d13bc63SEmmanuel Vadot        $ref: /schemas/types.yaml#/definitions/uint32
100*8d13bc63SEmmanuel Vadot        description: |
101*8d13bc63SEmmanuel Vadot          Source clock of the this output's divider stage.
102*8d13bc63SEmmanuel Vadot
103*8d13bc63SEmmanuel Vadot          0 - use multisynth N for this output, where N is the output number
104*8d13bc63SEmmanuel Vadot          1 - use either multisynth 0 (if output number is 0-3) or multisynth 4
105*8d13bc63SEmmanuel Vadot              (otherwise) for this output
106*8d13bc63SEmmanuel Vadot          2 - use XTAL for this output
107*8d13bc63SEmmanuel Vadot          3 - use CLKIN for this output (Si5351C only)
108*8d13bc63SEmmanuel Vadot
109*8d13bc63SEmmanuel Vadot      silabs,drive-strength:
110*8d13bc63SEmmanuel Vadot        $ref: /schemas/types.yaml#/definitions/uint32
111*8d13bc63SEmmanuel Vadot        enum: [ 2, 4, 6, 8 ]
112*8d13bc63SEmmanuel Vadot        description: Output drive strength in mA.
113*8d13bc63SEmmanuel Vadot
114*8d13bc63SEmmanuel Vadot      silabs,multisynth-source:
115*8d13bc63SEmmanuel Vadot        $ref: /schemas/types.yaml#/definitions/uint32
116*8d13bc63SEmmanuel Vadot        enum: [ 0, 1 ]
117*8d13bc63SEmmanuel Vadot        description:
118*8d13bc63SEmmanuel Vadot          Source PLL A (0) or B (1) for the corresponding multisynth divider.
119*8d13bc63SEmmanuel Vadot
120*8d13bc63SEmmanuel Vadot      silabs,pll-master:
121*8d13bc63SEmmanuel Vadot        type: boolean
122*8d13bc63SEmmanuel Vadot        description: |
123*8d13bc63SEmmanuel Vadot          The frequency of the source PLL is allowed to be changed by the
124*8d13bc63SEmmanuel Vadot          multisynth when setting the rate of this clock output.
125*8d13bc63SEmmanuel Vadot
126*8d13bc63SEmmanuel Vadot      silabs,pll-reset:
127*8d13bc63SEmmanuel Vadot        type: boolean
128*8d13bc63SEmmanuel Vadot        description: Reset the source PLL when enabling this clock output.
129*8d13bc63SEmmanuel Vadot
130*8d13bc63SEmmanuel Vadot      silabs,disable-state:
131*8d13bc63SEmmanuel Vadot        $ref: /schemas/types.yaml#/definitions/uint32
132*8d13bc63SEmmanuel Vadot        enum: [ 0, 1, 2, 3 ]
133*8d13bc63SEmmanuel Vadot        description: |
134*8d13bc63SEmmanuel Vadot          Clock output disable state. The state can be one of:
135*8d13bc63SEmmanuel Vadot
136*8d13bc63SEmmanuel Vadot          0 - clock output is driven LOW when disabled
137*8d13bc63SEmmanuel Vadot          1 - clock output is driven HIGH when disabled
138*8d13bc63SEmmanuel Vadot          2 - clock output is FLOATING (HIGH-Z) when disabled
139*8d13bc63SEmmanuel Vadot          3 - clock output is never disabled
140*8d13bc63SEmmanuel Vadot
141*8d13bc63SEmmanuel Vadot    allOf:
142*8d13bc63SEmmanuel Vadot      - if:
143*8d13bc63SEmmanuel Vadot          properties:
144*8d13bc63SEmmanuel Vadot            compatible:
145*8d13bc63SEmmanuel Vadot              contains:
146*8d13bc63SEmmanuel Vadot                const: silabs,si5351a-msop
147*8d13bc63SEmmanuel Vadot        then:
148*8d13bc63SEmmanuel Vadot          properties:
149*8d13bc63SEmmanuel Vadot            reg:
150*8d13bc63SEmmanuel Vadot              maximum: 2
151*8d13bc63SEmmanuel Vadot        else:
152*8d13bc63SEmmanuel Vadot          properties:
153*8d13bc63SEmmanuel Vadot            reg:
154*8d13bc63SEmmanuel Vadot              maximum: 7
155*8d13bc63SEmmanuel Vadot
156*8d13bc63SEmmanuel Vadot      - if:
157*8d13bc63SEmmanuel Vadot          properties:
158*8d13bc63SEmmanuel Vadot            compatible:
159*8d13bc63SEmmanuel Vadot              contains:
160*8d13bc63SEmmanuel Vadot                const: silabs,si5351c
161*8d13bc63SEmmanuel Vadot        then:
162*8d13bc63SEmmanuel Vadot          properties:
163*8d13bc63SEmmanuel Vadot            silabs,clock-source:
164*8d13bc63SEmmanuel Vadot              enum: [ 0, 1, 2, 3 ]
165*8d13bc63SEmmanuel Vadot        else:
166*8d13bc63SEmmanuel Vadot          properties:
167*8d13bc63SEmmanuel Vadot            silabs,clock-source:
168*8d13bc63SEmmanuel Vadot              enum: [ 0, 1, 2 ]
169*8d13bc63SEmmanuel Vadot
170*8d13bc63SEmmanuel Vadot    required:
171*8d13bc63SEmmanuel Vadot      - reg
172*8d13bc63SEmmanuel Vadot
173*8d13bc63SEmmanuel VadotallOf:
174*8d13bc63SEmmanuel Vadot  - if:
175*8d13bc63SEmmanuel Vadot      properties:
176*8d13bc63SEmmanuel Vadot        compatible:
177*8d13bc63SEmmanuel Vadot          contains:
178*8d13bc63SEmmanuel Vadot            enum:
179*8d13bc63SEmmanuel Vadot              - silabs,si5351a
180*8d13bc63SEmmanuel Vadot              - silabs,si5351a-msop
181*8d13bc63SEmmanuel Vadot              - silabs,si5351b
182*8d13bc63SEmmanuel Vadot    then:
183*8d13bc63SEmmanuel Vadot      properties:
184*8d13bc63SEmmanuel Vadot        clocks:
185*8d13bc63SEmmanuel Vadot          maxItems: 1
186*8d13bc63SEmmanuel Vadot        clock-names:
187*8d13bc63SEmmanuel Vadot          maxItems: 1
188*8d13bc63SEmmanuel Vadot
189*8d13bc63SEmmanuel Vadotrequired:
190*8d13bc63SEmmanuel Vadot  - reg
191*8d13bc63SEmmanuel Vadot  - "#address-cells"
192*8d13bc63SEmmanuel Vadot  - "#size-cells"
193*8d13bc63SEmmanuel Vadot  - "#clock-cells"
194*8d13bc63SEmmanuel Vadot  - clocks
195*8d13bc63SEmmanuel Vadot  - clock-names
196*8d13bc63SEmmanuel Vadot
197*8d13bc63SEmmanuel VadotunevaluatedProperties: false
198*8d13bc63SEmmanuel Vadot
199*8d13bc63SEmmanuel Vadotexamples:
200*8d13bc63SEmmanuel Vadot  - |
201*8d13bc63SEmmanuel Vadot    i2c {
202*8d13bc63SEmmanuel Vadot      #address-cells = <1>;
203*8d13bc63SEmmanuel Vadot      #size-cells = <0>;
204*8d13bc63SEmmanuel Vadot
205*8d13bc63SEmmanuel Vadot      clock-generator@60 {
206*8d13bc63SEmmanuel Vadot        compatible = "silabs,si5351a-msop";
207*8d13bc63SEmmanuel Vadot        reg = <0x60>;
208*8d13bc63SEmmanuel Vadot        #address-cells = <1>;
209*8d13bc63SEmmanuel Vadot        #size-cells = <0>;
210*8d13bc63SEmmanuel Vadot        #clock-cells = <1>;
211*8d13bc63SEmmanuel Vadot
212*8d13bc63SEmmanuel Vadot        /* Connect XTAL input to 25MHz reference */
213*8d13bc63SEmmanuel Vadot        clocks = <&ref25>;
214*8d13bc63SEmmanuel Vadot        clock-names = "xtal";
215*8d13bc63SEmmanuel Vadot
216*8d13bc63SEmmanuel Vadot        /* Use XTAL input as source of PLL0 and PLL1 */
217*8d13bc63SEmmanuel Vadot        silabs,pll-source = <0 0>, <1 0>;
218*8d13bc63SEmmanuel Vadot
219*8d13bc63SEmmanuel Vadot        /* Don't reset PLL1 on rate adjustment */
220*8d13bc63SEmmanuel Vadot        silabs,pll-reset-mode = <1 1>;
221*8d13bc63SEmmanuel Vadot
222*8d13bc63SEmmanuel Vadot        /*
223*8d13bc63SEmmanuel Vadot         * Overwrite CLK0 configuration with:
224*8d13bc63SEmmanuel Vadot         * - 8 mA output drive strength
225*8d13bc63SEmmanuel Vadot         * - PLL0 as clock source of multisynth 0
226*8d13bc63SEmmanuel Vadot         * - Multisynth 0 as clock source of output divider
227*8d13bc63SEmmanuel Vadot         * - Multisynth 0 can change PLL0
228*8d13bc63SEmmanuel Vadot         * - Set initial clock frequency of 74.25MHz
229*8d13bc63SEmmanuel Vadot         */
230*8d13bc63SEmmanuel Vadot        clkout@0 {
231*8d13bc63SEmmanuel Vadot          reg = <0>;
232*8d13bc63SEmmanuel Vadot          silabs,drive-strength = <8>;
233*8d13bc63SEmmanuel Vadot          silabs,multisynth-source = <0>;
234*8d13bc63SEmmanuel Vadot          silabs,clock-source = <0>;
235*8d13bc63SEmmanuel Vadot          silabs,pll-master;
236*8d13bc63SEmmanuel Vadot          clock-frequency = <74250000>;
237*8d13bc63SEmmanuel Vadot        };
238*8d13bc63SEmmanuel Vadot
239*8d13bc63SEmmanuel Vadot        /*
240*8d13bc63SEmmanuel Vadot         * Overwrite CLK1 configuration with:
241*8d13bc63SEmmanuel Vadot         * - 4 mA output drive strength
242*8d13bc63SEmmanuel Vadot         * - PLL1 as clock source of multisynth 1
243*8d13bc63SEmmanuel Vadot         * - Multisynth 1 as clock source of output divider
244*8d13bc63SEmmanuel Vadot         * - Multisynth 1 can change PLL1
245*8d13bc63SEmmanuel Vadot         * - Reset PLL1 when enabling this clock output
246*8d13bc63SEmmanuel Vadot         */
247*8d13bc63SEmmanuel Vadot        clkout@1 {
248*8d13bc63SEmmanuel Vadot          reg = <1>;
249*8d13bc63SEmmanuel Vadot          silabs,drive-strength = <4>;
250*8d13bc63SEmmanuel Vadot          silabs,multisynth-source = <1>;
251*8d13bc63SEmmanuel Vadot          silabs,clock-source = <0>;
252*8d13bc63SEmmanuel Vadot          silabs,pll-master;
253*8d13bc63SEmmanuel Vadot          silabs,pll-reset;
254*8d13bc63SEmmanuel Vadot        };
255*8d13bc63SEmmanuel Vadot
256*8d13bc63SEmmanuel Vadot        /*
257*8d13bc63SEmmanuel Vadot         * Overwrite CLK2 configuration with:
258*8d13bc63SEmmanuel Vadot         * - XTAL as clock source of output divider
259*8d13bc63SEmmanuel Vadot         */
260*8d13bc63SEmmanuel Vadot        clkout@2 {
261*8d13bc63SEmmanuel Vadot          reg = <2>;
262*8d13bc63SEmmanuel Vadot          silabs,clock-source = <2>;
263*8d13bc63SEmmanuel Vadot        };
264*8d13bc63SEmmanuel Vadot      };
265*8d13bc63SEmmanuel Vadot    };
266