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