[PATCH v7 0/3] Cirrus Logic CS2600 clock device
Richard Fitzgerald <[email protected]> Fri, 7 Aug 2026 16:54:03 +0100
| Newsgroups | org.kernel.vger.linux-clk,org.kernel.vger.linux-devicetree,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
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: v7 changes: - Fix issues reported by Sashiko. - Remove most examples from DT binding. 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 | 170 ++ MAINTAINERS | 8 + drivers/clk/Kconfig | 1 + drivers/clk/Makefile | 1 + drivers/clk/cirrus/Kconfig | 24 + drivers/clk/cirrus/Makefile | 27 + drivers/clk/cirrus/clk-cs2600-kunit.c | 2526 +++++++++++++++++ drivers/clk/cirrus/clk-cs2600-kunit.h | 18 + drivers/clk/cirrus/clk-cs2600.c | 1229 ++++++++ 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, 4583 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