| # SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) | |
| %YAML 1.2 | |
| --- | |
| $id: http://devicetree.org/schemas/silabs,si5341.yaml# | |
| $schema: http://devicetree.org/meta-schemas/core.yaml# | |
| title: Silicon Labs Si5340/1/2/4/5 programmable i2c clock generator | |
| maintainers: | |
| - Mike Looijmans <mike.looijmans@topic.nl> | |
| description: > | |
| Silicon Labs Si5340, Si5341 Si5342, Si5344 and Si5345 programmable i2c clock | |
| generator. | |
| Reference | |
| [1] Si5341 Data Sheet | |
| https://www.silabs.com/documents/public/data-sheets/Si5341-40-D-DataSheet.pdf | |
| [2] Si5341 Reference Manual | |
| https://www.silabs.com/documents/public/reference-manuals/Si5341-40-D-RM.pdf | |
| [3] Si5345 Reference Manual | |
| https://www.silabs.com/documents/public/reference-manuals/Si5345-44-42-D-RM.pdf | |
| The Si5341 and Si5340 are programmable i2c clock generators with up to 10 output | |
| clocks. The chip contains a PLL that sources 5 (or 4) multisynth clocks, which | |
| in turn can be directed to any of the 10 (or 4) outputs through a divider. | |
| The internal structure of the clock generators can be found in [2]. | |
| The Si5345 is similar to the Si5341 with the addition of fractional input | |
| dividers and automatic input selection, as described in [3]. | |
| The Si5342 and Si5344 are smaller versions of the Si5345, with 2 or 4 outputs. | |
| The driver can be used in "as is" mode, reading the current settings from the | |
| chip at boot, in case you have a (pre-)programmed device. If the PLL is not | |
| configured when the driver probes, it assumes the driver must fully initialize | |
| it. | |
| The device type, speed grade and revision are determined runtime by probing. | |
| properties: | |
| compatible: | |
| enum: | |
| - silabs,si5340 | |
| - silabs,si5341 | |
| - silabs,si5342 | |
| - silabs,si5344 | |
| - silabs,si5345 | |
| reg: | |
| maxItems: 1 | |
| "#clock-cells": | |
| const: 2 | |
| description: > | |
| The first value is "0" for outputs, "1" for synthesizers. | |
| The second value is the output or synthesizer index. | |
| "#address-cells": | |
| const: 1 | |
| "#size-cells": | |
| const: 0 | |
| clocks: | |
| minItems: 1 | |
| maxItems: 4 | |
| clock-names: | |
| minItems: 1 | |
| items: | |
| - const: xtal | |
| - const: in0 | |
| - const: in1 | |
| - const: in2 | |
| clock-output-names: true | |
| interrupts: | |
| maxItems: 1 | |
| description: Interrupt for INTRb pin | |
| vdd-supply: | |
| description: Regulator node for VDD | |
| vdda-supply: | |
| description: Regulator node for VDDA | |
| vdds-supply: | |
| description: Regulator node for VDDS | |
| silabs,pll-m-num: | |
| description: | |
| Numerator for PLL feedback divider. Must be such that the PLL output is in | |
| the valid range. For example, to create 14GHz from a 48MHz xtal, use | |
| m-num=14000 and m-den=48. Only the fraction matters, using 3500 and 12 | |
| will deliver the exact same result. If these are not specified, and the | |
| PLL is not yet programmed when the driver probes, the PLL will be set to | |
| 14GHz. | |
| $ref: /schemas/types.yaml#/definitions/uint32 | |
| silabs,pll-m-den: | |
| description: Denominator for PLL feedback divider | |
| $ref: /schemas/types.yaml#/definitions/uint32 | |
| silabs,reprogram: | |
| description: Always perform soft-reset and reinitialize PLL | |
| type: boolean | |
| silabs,xaxb-ext-clk: | |
| description: Use XA/XB pins as external reference clock | |
| type: boolean | |
| silabs,iovdd-33: | |
| description: I2C lines use 3.3V thresholds | |
| type: boolean | |
| patternProperties: | |
| "^vddo[0-9]-supply$": true | |
| "^out@[0-9]$": | |
| description: > | |
| Output-specific override nodes | |
| Each of the clock outputs can be overwritten individually by using a child | |
| node. If a child node for a clock output is not set, the configuration | |
| remains unchanged. | |
| type: object | |
| additionalProperties: false | |
| properties: | |
| reg: | |
| description: Number of clock output | |
| maximum: 9 | |
| always-on: | |
| description: Set to keep the clock output always running | |
| type: boolean | |
| silabs,format: | |
| description: Output format | |
| $ref: /schemas/types.yaml#/definitions/uint32 | |
| enum: [1, 2, 4] | |
| silabs,common-mode: | |
| description: Override output common mode | |
| $ref: /schemas/types.yaml#/definitions/uint32 | |
| silabs,amplitude: | |
| description: Override output amplitude | |
| $ref: /schemas/types.yaml#/definitions/uint32 | |
| silabs,synth-master: | |
| description: Allow dynamic multisynth rate control | |
| type: boolean | |
| silabs,disable-high: | |
| description: Drive output HIGH when disabled | |
| type: boolean | |
| required: | |
| - reg | |
| required: | |
| - compatible | |
| - reg | |
| - "#clock-cells" | |
| - "#address-cells" | |
| - "#size-cells" | |
| - clocks | |
| - clock-names | |
| additionalProperties: false | |
| examples: | |
| - | | |
| i2c { | |
| #address-cells = <1>; | |
| #size-cells = <0>; | |
| clock-generator@74 { | |
| reg = <0x74>; | |
| compatible = "silabs,si5341"; | |
| #clock-cells = <2>; | |
| #address-cells = <1>; | |
| #size-cells = <0>; | |
| clocks = <&ref48>; | |
| clock-names = "xtal"; | |
| silabs,pll-m-num = <14000>; /* PLL at 14.0 GHz */ | |
| silabs,pll-m-den = <48>; | |
| silabs,reprogram; /* Chips are not programmed, always reset */ | |
| out@0 { | |
| reg = <0>; | |
| silabs,format = <1>; /* LVDS 3v3 */ | |
| silabs,common-mode = <3>; | |
| silabs,amplitude = <3>; | |
| silabs,synth-master; | |
| }; | |
| /* | |
| * Output 6 configuration: | |
| * LVDS 1v8 | |
| */ | |
| out@6 { | |
| reg = <6>; | |
| silabs,format = <1>; /* LVDS 1v8 */ | |
| silabs,common-mode = <13>; | |
| silabs,amplitude = <3>; | |
| }; | |
| /* | |
| * Output 8 configuration: | |
| * HCSL 3v3 | |
| */ | |
| out@8 { | |
| reg = <8>; | |
| silabs,format = <2>; | |
| silabs,common-mode = <11>; | |
| silabs,amplitude = <3>; | |
| }; | |
| }; | |
| }; |