162306a36Sopenharmony_ciBinding for Silicon Labs Si5351a/b/c programmable i2c clock generator.
262306a36Sopenharmony_ci
362306a36Sopenharmony_ciReference
462306a36Sopenharmony_ci[1] Si5351A/B/C Data Sheet
562306a36Sopenharmony_ci    https://www.skyworksinc.com/-/media/Skyworks/SL/documents/public/data-sheets/Si5351-B.pdf
662306a36Sopenharmony_ci
762306a36Sopenharmony_ciThe Si5351a/b/c are programmable i2c clock generators with up to 8 output
862306a36Sopenharmony_ciclocks. Si5351a also has a reduced pin-count package (MSOP10) where only
962306a36Sopenharmony_ci3 output clocks are accessible. The internal structure of the clock
1062306a36Sopenharmony_cigenerators can be found in [1].
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_ci==I2C device node==
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_ciRequired properties:
1562306a36Sopenharmony_ci- compatible: shall be one of the following:
1662306a36Sopenharmony_ci	"silabs,si5351a" - Si5351a, QFN20 package
1762306a36Sopenharmony_ci	"silabs,si5351a-msop" - Si5351a, MSOP10 package
1862306a36Sopenharmony_ci	"silabs,si5351b" - Si5351b, QFN20 package
1962306a36Sopenharmony_ci	"silabs,si5351c" - Si5351c, QFN20 package
2062306a36Sopenharmony_ci- reg: i2c device address, shall be 0x60 or 0x61.
2162306a36Sopenharmony_ci- #clock-cells: from common clock binding; shall be set to 1.
2262306a36Sopenharmony_ci- clocks: from common clock binding; list of parent clock
2362306a36Sopenharmony_ci  handles, shall be xtal reference clock or xtal and clkin for
2462306a36Sopenharmony_ci  si5351c only. Corresponding clock input names are "xtal" and
2562306a36Sopenharmony_ci  "clkin" respectively.
2662306a36Sopenharmony_ci- #address-cells: shall be set to 1.
2762306a36Sopenharmony_ci- #size-cells: shall be set to 0.
2862306a36Sopenharmony_ci
2962306a36Sopenharmony_ciOptional properties:
3062306a36Sopenharmony_ci- silabs,pll-source: pair of (number, source) for each pll. Allows
3162306a36Sopenharmony_ci  to overwrite clock source of pll A (number=0) or B (number=1).
3262306a36Sopenharmony_ci
3362306a36Sopenharmony_ci==Child nodes==
3462306a36Sopenharmony_ci
3562306a36Sopenharmony_ciEach of the clock outputs can be overwritten individually by
3662306a36Sopenharmony_ciusing a child node to the I2C device node. If a child node for a clock
3762306a36Sopenharmony_cioutput is not set, the eeprom configuration is not overwritten.
3862306a36Sopenharmony_ci
3962306a36Sopenharmony_ciRequired child node properties:
4062306a36Sopenharmony_ci- reg: number of clock output.
4162306a36Sopenharmony_ci
4262306a36Sopenharmony_ciOptional child node properties:
4362306a36Sopenharmony_ci- silabs,clock-source: source clock of the output divider stage N, shall be
4462306a36Sopenharmony_ci  0 = multisynth N
4562306a36Sopenharmony_ci  1 = multisynth 0 for output clocks 0-3, else multisynth4
4662306a36Sopenharmony_ci  2 = xtal
4762306a36Sopenharmony_ci  3 = clkin (si5351c only)
4862306a36Sopenharmony_ci- silabs,drive-strength: output drive strength in mA, shall be one of {2,4,6,8}.
4962306a36Sopenharmony_ci- silabs,multisynth-source: source pll A(0) or B(1) of corresponding multisynth
5062306a36Sopenharmony_ci  divider.
5162306a36Sopenharmony_ci- silabs,pll-master: boolean, multisynth can change pll frequency.
5262306a36Sopenharmony_ci- silabs,pll-reset: boolean, clock output can reset its pll.
5362306a36Sopenharmony_ci- silabs,disable-state : clock output disable state, shall be
5462306a36Sopenharmony_ci  0 = clock output is driven LOW when disabled
5562306a36Sopenharmony_ci  1 = clock output is driven HIGH when disabled
5662306a36Sopenharmony_ci  2 = clock output is FLOATING (HIGH-Z) when disabled
5762306a36Sopenharmony_ci  3 = clock output is NEVER disabled
5862306a36Sopenharmony_ci
5962306a36Sopenharmony_ci==Example==
6062306a36Sopenharmony_ci
6162306a36Sopenharmony_ci/* 25MHz reference crystal */
6262306a36Sopenharmony_ciref25: ref25M {
6362306a36Sopenharmony_ci	compatible = "fixed-clock";
6462306a36Sopenharmony_ci	#clock-cells = <0>;
6562306a36Sopenharmony_ci	clock-frequency = <25000000>;
6662306a36Sopenharmony_ci};
6762306a36Sopenharmony_ci
6862306a36Sopenharmony_cii2c-master-node {
6962306a36Sopenharmony_ci
7062306a36Sopenharmony_ci	/* Si5351a msop10 i2c clock generator */
7162306a36Sopenharmony_ci	si5351a: clock-generator@60 {
7262306a36Sopenharmony_ci		compatible = "silabs,si5351a-msop";
7362306a36Sopenharmony_ci		reg = <0x60>;
7462306a36Sopenharmony_ci		#address-cells = <1>;
7562306a36Sopenharmony_ci		#size-cells = <0>;
7662306a36Sopenharmony_ci		#clock-cells = <1>;
7762306a36Sopenharmony_ci
7862306a36Sopenharmony_ci		/* connect xtal input to 25MHz reference */
7962306a36Sopenharmony_ci		clocks = <&ref25>;
8062306a36Sopenharmony_ci		clock-names = "xtal";
8162306a36Sopenharmony_ci
8262306a36Sopenharmony_ci		/* connect xtal input as source of pll0 and pll1 */
8362306a36Sopenharmony_ci		silabs,pll-source = <0 0>, <1 0>;
8462306a36Sopenharmony_ci
8562306a36Sopenharmony_ci		/*
8662306a36Sopenharmony_ci		 * overwrite clkout0 configuration with:
8762306a36Sopenharmony_ci		 * - 8mA output drive strength
8862306a36Sopenharmony_ci		 * - pll0 as clock source of multisynth0
8962306a36Sopenharmony_ci		 * - multisynth0 as clock source of output divider
9062306a36Sopenharmony_ci		 * - multisynth0 can change pll0
9162306a36Sopenharmony_ci		 * - set initial clock frequency of 74.25MHz
9262306a36Sopenharmony_ci		 */
9362306a36Sopenharmony_ci		clkout0 {
9462306a36Sopenharmony_ci			reg = <0>;
9562306a36Sopenharmony_ci			silabs,drive-strength = <8>;
9662306a36Sopenharmony_ci			silabs,multisynth-source = <0>;
9762306a36Sopenharmony_ci			silabs,clock-source = <0>;
9862306a36Sopenharmony_ci			silabs,pll-master;
9962306a36Sopenharmony_ci			clock-frequency = <74250000>;
10062306a36Sopenharmony_ci		};
10162306a36Sopenharmony_ci
10262306a36Sopenharmony_ci		/*
10362306a36Sopenharmony_ci		 * overwrite clkout1 configuration with:
10462306a36Sopenharmony_ci		 * - 4mA output drive strength
10562306a36Sopenharmony_ci		 * - pll1 as clock source of multisynth1
10662306a36Sopenharmony_ci		 * - multisynth1 as clock source of output divider
10762306a36Sopenharmony_ci		 * - multisynth1 can change pll1
10862306a36Sopenharmony_ci		 */
10962306a36Sopenharmony_ci		clkout1 {
11062306a36Sopenharmony_ci			reg = <1>;
11162306a36Sopenharmony_ci			silabs,drive-strength = <4>;
11262306a36Sopenharmony_ci			silabs,multisynth-source = <1>;
11362306a36Sopenharmony_ci			silabs,clock-source = <0>;
11462306a36Sopenharmony_ci			pll-master;
11562306a36Sopenharmony_ci		};
11662306a36Sopenharmony_ci
11762306a36Sopenharmony_ci		/*
11862306a36Sopenharmony_ci		 * overwrite clkout2 configuration with:
11962306a36Sopenharmony_ci		 * - xtal as clock source of output divider
12062306a36Sopenharmony_ci		 */
12162306a36Sopenharmony_ci		clkout2 {
12262306a36Sopenharmony_ci			reg = <2>;
12362306a36Sopenharmony_ci			silabs,clock-source = <2>;
12462306a36Sopenharmony_ci		};
12562306a36Sopenharmony_ci	};
12662306a36Sopenharmony_ci};
127