[PATCH v6 0/3] Cirrus Logic CS2600 clock device

From: Richard Fitzgerald

Date: Tue Jun 30 2026 - 12:04:45 EST


This patch set provides Common Clock Framework support for the
Cirrus Logic CS2600 Fractional-N Clock Synthesizer and Multiplier.

KUnit testing is included in the series.

Major changes:

v6 changes:
- Convert DT smart mode selection from an enum property to two booleans.
- Fix DT clock names to match the datasheet names.
- Add DT property to explicitly flag that the internal oscillator should
be used instead of inferring it from having a variable definition of
clock-names.
- Add DT support for setting BCLK invert, FSYNC invert, and FSYNC duty
cycles.
- More DT examples
- Merged and factored-out duplicated code in the driver.
- Fixed rounding errors that caused the calculated frequency to drift when
it was passed into clock core and then passed back to the driver.
- Fixed driver bugs where the functions for one clock relied on the
register values of other clocks being set already, which is not
guaranteed.
- Fix a bug where the (mandatory) REF_CLK_IN wasn't requested and enabled
when using CLK_IN as the frequency reference in manual mode.
- Lots of code cleanup in the driver
- Fix driver bugs.
- Added KUnit test.

v5 changes:
- Change dt-binding to dt-bindings in commit message
- Add minItems to clocks
- Remove unneeded comments for the cirrus,aux-output-source enums

v4 changes:
- Change DT discription to add more detial.
- Move reg property to keep consistent with the required list.
- Add enum to string DT inputs and change the input values to lower case.
- Change unevauatedProperties to additionalProperties
- Reove black line.

v3 changes:
- Changed clock-names in device tree to an emum since the both clocks
are not always required.
- Changed cirrus,aux-output-source to a string input.
- Added cirrus,clock-mode as a string input.
- Fixed ordering in DT example.
- Removed dt-bindings .h file.
- Add in_range to allow for acceptable ranges for clock rates.

v2 changes:
- Remove | from after "discription" in DT binding.
- Remove discription from "clocks" in DT binding.
- Change ref_clk to xti
- Clarify auxiliary clock pin
- Change DT example to not have "reg" for the bus
- Change DT example to change i2c@0 to i2c
- Remove "OUTPUT" from the clock ouputs in the dt binding include file.
- Remove AUX_OUT defines
- Use do_div when dividing u64 by a u32
- Include the dt bindings include file
- Use the includes from the dt bindings include file aux output.
- Move of_device_id and i2c_device_id tables next to i2c_driver struct.

Paul Handrigan (2):
dt-bindings: clock: cs2600: Add support for the CS2600
clk: cs2600: Add Fractional-N clock driver

Richard Fitzgerald (1):
clk: cs2600: Add KUnit test for CS2600 driver

.../bindings/clock/cirrus,cs2600.yaml | 262 ++
MAINTAINERS | 8 +
drivers/clk/Kconfig | 1 +
drivers/clk/Makefile | 1 +
drivers/clk/cirrus/Kconfig | 23 +
drivers/clk/cirrus/Makefile | 27 +
drivers/clk/cirrus/clk-cs2600-kunit.c | 2495 +++++++++++++++++
drivers/clk/cirrus/clk-cs2600-kunit.h | 18 +
drivers/clk/cirrus/clk-cs2600.c | 1274 +++++++++
drivers/clk/cirrus/clk-cs2600.h | 163 ++
drivers/clk/cirrus/kunit_clk_cs2600.dtsi | 40 +
.../clk/cirrus/kunit_clk_cs2600_assigned.dtso | 27 +
.../kunit_clk_cs2600_aux1_out_clk_in.dtso | 17 +
...it_clk_cs2600_aux1_out_clk_in_missing.dtso | 17 +
...kunit_clk_cs2600_aux1_out_freq_unlock.dtso | 17 +
...unit_clk_cs2600_aux1_out_phase_unlock.dtso | 17 +
.../kunit_clk_cs2600_aux1_out_ref_clk_in.dtso | 17 +
.../cirrus/kunit_clk_cs2600_bclk_invert.dtso | 17 +
.../cirrus/kunit_clk_cs2600_fsync_duty_1.dtso | 17 +
.../cirrus/kunit_clk_cs2600_fsync_duty_2.dtso | 17 +
.../kunit_clk_cs2600_fsync_duty_32.dtso | 17 +
.../cirrus/kunit_clk_cs2600_fsync_invert.dtso | 17 +
.../kunit_clk_cs2600_manual_intosc_clkin.dtso | 17 +
.../kunit_clk_cs2600_manual_intosc_only.dtso | 17 +
.../kunit_clk_cs2600_manual_refclk_clkin.dtso | 16 +
.../kunit_clk_cs2600_manual_refclk_only.dtso | 16 +
.../kunit_clk_cs2600_name_output_clocks.dtso | 23 +
...it_clk_cs2600_smart_clkin_only_intosc.dtso | 19 +
...it_clk_cs2600_smart_clkin_only_refclk.dtso | 18 +
.../cirrus/kunit_clk_cs2600_smart_intosc.dtso | 18 +
.../cirrus/kunit_clk_cs2600_smart_refclk.dtso | 17 +
.../dt-bindings/clock/cirrus,cs2600-clock.h | 18 +
32 files changed, 4688 insertions(+)
create mode 100644 Documentation/devicetree/bindings/clock/cirrus,cs2600.yaml
create mode 100644 drivers/clk/cirrus/Kconfig
create mode 100644 drivers/clk/cirrus/Makefile
create mode 100644 drivers/clk/cirrus/clk-cs2600-kunit.c
create mode 100644 drivers/clk/cirrus/clk-cs2600-kunit.h
create mode 100644 drivers/clk/cirrus/clk-cs2600.c
create mode 100644 drivers/clk/cirrus/clk-cs2600.h
create mode 100644 drivers/clk/cirrus/kunit_clk_cs2600.dtsi
create mode 100644 drivers/clk/cirrus/kunit_clk_cs2600_assigned.dtso
create mode 100644 drivers/clk/cirrus/kunit_clk_cs2600_aux1_out_clk_in.dtso
create mode 100644 drivers/clk/cirrus/kunit_clk_cs2600_aux1_out_clk_in_missing.dtso
create mode 100644 drivers/clk/cirrus/kunit_clk_cs2600_aux1_out_freq_unlock.dtso
create mode 100644 drivers/clk/cirrus/kunit_clk_cs2600_aux1_out_phase_unlock.dtso
create mode 100644 drivers/clk/cirrus/kunit_clk_cs2600_aux1_out_ref_clk_in.dtso
create mode 100644 drivers/clk/cirrus/kunit_clk_cs2600_bclk_invert.dtso
create mode 100644 drivers/clk/cirrus/kunit_clk_cs2600_fsync_duty_1.dtso
create mode 100644 drivers/clk/cirrus/kunit_clk_cs2600_fsync_duty_2.dtso
create mode 100644 drivers/clk/cirrus/kunit_clk_cs2600_fsync_duty_32.dtso
create mode 100644 drivers/clk/cirrus/kunit_clk_cs2600_fsync_invert.dtso
create mode 100644 drivers/clk/cirrus/kunit_clk_cs2600_manual_intosc_clkin.dtso
create mode 100644 drivers/clk/cirrus/kunit_clk_cs2600_manual_intosc_only.dtso
create mode 100644 drivers/clk/cirrus/kunit_clk_cs2600_manual_refclk_clkin.dtso
create mode 100644 drivers/clk/cirrus/kunit_clk_cs2600_manual_refclk_only.dtso
create mode 100644 drivers/clk/cirrus/kunit_clk_cs2600_name_output_clocks.dtso
create mode 100644 drivers/clk/cirrus/kunit_clk_cs2600_smart_clkin_only_intosc.dtso
create mode 100644 drivers/clk/cirrus/kunit_clk_cs2600_smart_clkin_only_refclk.dtso
create mode 100644 drivers/clk/cirrus/kunit_clk_cs2600_smart_intosc.dtso
create mode 100644 drivers/clk/cirrus/kunit_clk_cs2600_smart_refclk.dtso
create mode 100644 include/dt-bindings/clock/cirrus,cs2600-clock.h

--
2.47.3