The purpose of this page is to describe the Linux CCF driver for SI5324 Clock Multiplier/Jitter Attenuator

Introduction

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

Driver Overview

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 (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

  • Not a comprehensive SI5324 driver. Only API’s required to support Xilinx HDMI Tx use-case(s) are implemented at this time.
  • Driver does not conform to Linux coding guidelines and is being released as early-access. Consequently driver files will be located in staging area until further notice

Kernel Configuration Options for Driver

2018.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-pakages->modules->kernel-module-hdmi", save and exit
  • Build the project
%petalinux-build

2017.3: 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
2018.1: Documentation/devicetree/bindings/silabs,si5324.txt
2017.3: Documentation/devicetree/bindings/clock/silabs,si5324.txt

Boards Supported

Driver has been tested on following boards
  • zcu102 Rev 1.0
  • Zcu106 Rev C

Related Links