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