xref: /freebsd/sys/contrib/device-tree/Bindings/clock/silabs,si5351.txt (revision 8cc087a1eee9ec1ca9f7ac1e63ad51bdb5a682eb)
1c66ec88fSEmmanuel VadotBinding for Silicon Labs Si5351a/b/c programmable i2c clock generator.
2c66ec88fSEmmanuel Vadot
3c66ec88fSEmmanuel VadotReference
4c66ec88fSEmmanuel Vadot[1] Si5351A/B/C Data Sheet
5*8cc087a1SEmmanuel Vadot    https://www.skyworksinc.com/-/media/Skyworks/SL/documents/public/data-sheets/Si5351-B.pdf
6c66ec88fSEmmanuel Vadot
7c66ec88fSEmmanuel VadotThe Si5351a/b/c are programmable i2c clock generators with up to 8 output
8c66ec88fSEmmanuel Vadotclocks. Si5351a also has a reduced pin-count package (MSOP10) where only
9c66ec88fSEmmanuel Vadot3 output clocks are accessible. The internal structure of the clock
10c66ec88fSEmmanuel Vadotgenerators can be found in [1].
11c66ec88fSEmmanuel Vadot
12c66ec88fSEmmanuel Vadot==I2C device node==
13c66ec88fSEmmanuel Vadot
14c66ec88fSEmmanuel VadotRequired properties:
15c66ec88fSEmmanuel Vadot- compatible: shall be one of the following:
16c66ec88fSEmmanuel Vadot	"silabs,si5351a" - Si5351a, QFN20 package
17c66ec88fSEmmanuel Vadot	"silabs,si5351a-msop" - Si5351a, MSOP10 package
18c66ec88fSEmmanuel Vadot	"silabs,si5351b" - Si5351b, QFN20 package
19c66ec88fSEmmanuel Vadot	"silabs,si5351c" - Si5351c, QFN20 package
20c66ec88fSEmmanuel Vadot- reg: i2c device address, shall be 0x60 or 0x61.
21c66ec88fSEmmanuel Vadot- #clock-cells: from common clock binding; shall be set to 1.
22c66ec88fSEmmanuel Vadot- clocks: from common clock binding; list of parent clock
23c66ec88fSEmmanuel Vadot  handles, shall be xtal reference clock or xtal and clkin for
24c66ec88fSEmmanuel Vadot  si5351c only. Corresponding clock input names are "xtal" and
25c66ec88fSEmmanuel Vadot  "clkin" respectively.
26c66ec88fSEmmanuel Vadot- #address-cells: shall be set to 1.
27c66ec88fSEmmanuel Vadot- #size-cells: shall be set to 0.
28c66ec88fSEmmanuel Vadot
29c66ec88fSEmmanuel VadotOptional properties:
30c66ec88fSEmmanuel Vadot- silabs,pll-source: pair of (number, source) for each pll. Allows
31c66ec88fSEmmanuel Vadot  to overwrite clock source of pll A (number=0) or B (number=1).
32c66ec88fSEmmanuel Vadot
33c66ec88fSEmmanuel Vadot==Child nodes==
34c66ec88fSEmmanuel Vadot
35c66ec88fSEmmanuel VadotEach of the clock outputs can be overwritten individually by
36c66ec88fSEmmanuel Vadotusing a child node to the I2C device node. If a child node for a clock
37c66ec88fSEmmanuel Vadotoutput is not set, the eeprom configuration is not overwritten.
38c66ec88fSEmmanuel Vadot
39c66ec88fSEmmanuel VadotRequired child node properties:
40c66ec88fSEmmanuel Vadot- reg: number of clock output.
41c66ec88fSEmmanuel Vadot
42c66ec88fSEmmanuel VadotOptional child node properties:
43c66ec88fSEmmanuel Vadot- silabs,clock-source: source clock of the output divider stage N, shall be
44c66ec88fSEmmanuel Vadot  0 = multisynth N
45c66ec88fSEmmanuel Vadot  1 = multisynth 0 for output clocks 0-3, else multisynth4
46c66ec88fSEmmanuel Vadot  2 = xtal
47c66ec88fSEmmanuel Vadot  3 = clkin (si5351c only)
48c66ec88fSEmmanuel Vadot- silabs,drive-strength: output drive strength in mA, shall be one of {2,4,6,8}.
49c66ec88fSEmmanuel Vadot- silabs,multisynth-source: source pll A(0) or B(1) of corresponding multisynth
50c66ec88fSEmmanuel Vadot  divider.
51c66ec88fSEmmanuel Vadot- silabs,pll-master: boolean, multisynth can change pll frequency.
52c66ec88fSEmmanuel Vadot- silabs,pll-reset: boolean, clock output can reset its pll.
53c66ec88fSEmmanuel Vadot- silabs,disable-state : clock output disable state, shall be
54c66ec88fSEmmanuel Vadot  0 = clock output is driven LOW when disabled
55c66ec88fSEmmanuel Vadot  1 = clock output is driven HIGH when disabled
56c66ec88fSEmmanuel Vadot  2 = clock output is FLOATING (HIGH-Z) when disabled
57c66ec88fSEmmanuel Vadot  3 = clock output is NEVER disabled
58c66ec88fSEmmanuel Vadot
59c66ec88fSEmmanuel Vadot==Example==
60c66ec88fSEmmanuel Vadot
61c66ec88fSEmmanuel Vadot/* 25MHz reference crystal */
62c66ec88fSEmmanuel Vadotref25: ref25M {
63c66ec88fSEmmanuel Vadot	compatible = "fixed-clock";
64c66ec88fSEmmanuel Vadot	#clock-cells = <0>;
65c66ec88fSEmmanuel Vadot	clock-frequency = <25000000>;
66c66ec88fSEmmanuel Vadot};
67c66ec88fSEmmanuel Vadot
68c66ec88fSEmmanuel Vadoti2c-master-node {
69c66ec88fSEmmanuel Vadot
70c66ec88fSEmmanuel Vadot	/* Si5351a msop10 i2c clock generator */
71c66ec88fSEmmanuel Vadot	si5351a: clock-generator@60 {
72c66ec88fSEmmanuel Vadot		compatible = "silabs,si5351a-msop";
73c66ec88fSEmmanuel Vadot		reg = <0x60>;
74c66ec88fSEmmanuel Vadot		#address-cells = <1>;
75c66ec88fSEmmanuel Vadot		#size-cells = <0>;
76c66ec88fSEmmanuel Vadot		#clock-cells = <1>;
77c66ec88fSEmmanuel Vadot
78c66ec88fSEmmanuel Vadot		/* connect xtal input to 25MHz reference */
79c66ec88fSEmmanuel Vadot		clocks = <&ref25>;
80c66ec88fSEmmanuel Vadot		clock-names = "xtal";
81c66ec88fSEmmanuel Vadot
82c66ec88fSEmmanuel Vadot		/* connect xtal input as source of pll0 and pll1 */
83c66ec88fSEmmanuel Vadot		silabs,pll-source = <0 0>, <1 0>;
84c66ec88fSEmmanuel Vadot
85c66ec88fSEmmanuel Vadot		/*
86c66ec88fSEmmanuel Vadot		 * overwrite clkout0 configuration with:
87c66ec88fSEmmanuel Vadot		 * - 8mA output drive strength
88c66ec88fSEmmanuel Vadot		 * - pll0 as clock source of multisynth0
89c66ec88fSEmmanuel Vadot		 * - multisynth0 as clock source of output divider
90c66ec88fSEmmanuel Vadot		 * - multisynth0 can change pll0
91c66ec88fSEmmanuel Vadot		 * - set initial clock frequency of 74.25MHz
92c66ec88fSEmmanuel Vadot		 */
93c66ec88fSEmmanuel Vadot		clkout0 {
94c66ec88fSEmmanuel Vadot			reg = <0>;
95c66ec88fSEmmanuel Vadot			silabs,drive-strength = <8>;
96c66ec88fSEmmanuel Vadot			silabs,multisynth-source = <0>;
97c66ec88fSEmmanuel Vadot			silabs,clock-source = <0>;
98c66ec88fSEmmanuel Vadot			silabs,pll-master;
99c66ec88fSEmmanuel Vadot			clock-frequency = <74250000>;
100c66ec88fSEmmanuel Vadot		};
101c66ec88fSEmmanuel Vadot
102c66ec88fSEmmanuel Vadot		/*
103c66ec88fSEmmanuel Vadot		 * overwrite clkout1 configuration with:
104c66ec88fSEmmanuel Vadot		 * - 4mA output drive strength
105c66ec88fSEmmanuel Vadot		 * - pll1 as clock source of multisynth1
106c66ec88fSEmmanuel Vadot		 * - multisynth1 as clock source of output divider
107c66ec88fSEmmanuel Vadot		 * - multisynth1 can change pll1
108c66ec88fSEmmanuel Vadot		 */
109c66ec88fSEmmanuel Vadot		clkout1 {
110c66ec88fSEmmanuel Vadot			reg = <1>;
111c66ec88fSEmmanuel Vadot			silabs,drive-strength = <4>;
112c66ec88fSEmmanuel Vadot			silabs,multisynth-source = <1>;
113c66ec88fSEmmanuel Vadot			silabs,clock-source = <0>;
114c66ec88fSEmmanuel Vadot			pll-master;
115c66ec88fSEmmanuel Vadot		};
116c66ec88fSEmmanuel Vadot
117c66ec88fSEmmanuel Vadot		/*
118c66ec88fSEmmanuel Vadot		 * overwrite clkout2 configuration with:
119c66ec88fSEmmanuel Vadot		 * - xtal as clock source of output divider
120c66ec88fSEmmanuel Vadot		 */
121c66ec88fSEmmanuel Vadot		clkout2 {
122c66ec88fSEmmanuel Vadot			reg = <2>;
123c66ec88fSEmmanuel Vadot			silabs,clock-source = <2>;
124c66ec88fSEmmanuel Vadot		};
125c66ec88fSEmmanuel Vadot	};
126c66ec88fSEmmanuel Vadot};
127