The purpose of this page is to describe the Linux CCF driver for SI5324 Clock Multiplier/Jitter Attenuator
The Si5324 is a low-bandwidth, jitter-attenuating, precision clock multiplier for applications requiring sub 1 ps jitter performance with loop bandwidths between 4 Hz and 525 Hz. The Si5324 accepts two input clocks ranging from 2 kHz to 710 MHz and generates two output clocks ranging from 2 kHz to 945 MHz and select frequencies to 1.4 GHz. The two outputs are divided down separately from a common source. The Si5324 can also use its external reference as a clock source for frequency synthesis. The device provides virtually any frequency translation combination across this operating range. The Si5324 input clock frequency and clock multiplication ratio are programmable via an I2C or SPI interface
SI5324 driver is implemented to adhere to Linux Kernel Common Clock Framework (CCF). This driver is added as a clock producer. This clock can be obtained and set by any consuming driver. In Xilinx’s HDMI Tx use-case, for every mode change, after Tx is configured for the requested mode, DRM driver requests the desired frequency from the CCF which in turn triggers the SI5423 programming.Note: SI5324 is pin and register compatible with SI5319 and SI5328 (available on zcu106 boards). Driver at probe time will read the device ID register to validate which device is being controlled.
Known Issues and Limitations
- Driver is now part of kernel and present inside ./driver/clk folder. This is not a comprehensive SI5324 driver. Only API’s required to support Xilinx HDMI Tx use-case(s) are implemented at this time.
Kernel Configuration Options for Driver
2018.3: From 2018.3 onwards, this driver will be part of linux as explained above and will be compiled as built-in module. By default the driver will be part of generated kernel image as the COMMON_CLK_SI5324 is set in default configuration2018.1:
CONFIG_COMMON_CLK and CONFIG_I2C should be enabled
Driver is added as an out-of-tree kernel module and therefore requires no driver specific kernel configuration However to enable the driver user must include it in the rootfs. Following steps are required enable the driver
- Make sure the meta-user layer has the recipe-hdmi included
- Add the recipe to petalinux image. Edit ./meta-user/recipes-core/images/petalinux-image.bbappend and add the new recipe at the end
IMAGE_INSTALL_append = " kernel-module-hdmi"
- Next include the driver in the rootfs
% petalinux-config -c rootfs
- Select "user-packages->modules->kernel-module-hdmi", save and exit
- Build the project
Driver is added in-kernel and can be enabled via following configuration options
CONFIG_COMMON_CLK_SI5324, CONFIG_COMMON_CLK and CONFIG_I2C should be enabled
Device Tree Binding
The dts node should be defined with correct hardware configuration. How to define the node is documented in
- Correct SI5324_OUT_REGS macro value from 28 to 14
- si5324 driver is now inside linux kernel and compiled as built in module (no more part of hdmi-modules)
- Driver code is present in ./driver/clk folder and Device tree documentation at ./Documentation/devicetree/bindings/clock/silabs,si5324.txt