mbox series

[v3,0/6] clk: sunxi-ng: Add a RTC CCU driver

Message ID 20220203021736.13434-1-samuel@sholland.org
Headers show
Series clk: sunxi-ng: Add a RTC CCU driver | expand

Message

Samuel Holland Feb. 3, 2022, 2:17 a.m. UTC
This patch series adds a CCU driver for the RTC in the H616, R329 and
D1. The extra patch at the end of this series shows how it would be
explanded to additional hardware variants.

The driver is intended to support the existing binding used for the H6,
but also an updated binding which includes all RTC input clocks.

A future patch series could add functionality to the driver to manage
IOSC calibration at boot and during suspend/resume.

It may be possible to support all of these hardware variants without
adding this new driver, by adding them to the existing RTC clock
provider, but I'm concerned about the complexity there, without any of
the CCU abstraction.

Changes in v3:
 - Add/fix several maxItems attributes for clocks and clock-items
 - Drop the SUNXI_CCU_MUX_HW_WITH_KEY macro, since it is no longer used.
 - Also drop the patch adding the SUNXI_CCU_MUX_DATA_WITH_GATE macro.
 - Rebase on v5.17-rc2 (CCU module support series was merged).
 - Move IOSC calibration control to prepare/unprepare operations.
 - Declare several `struct clk_init_data`s as static variables (instead
   of as anonymous) so they can be modified from the probe function
   without casting away const.
 - Instead of creating two copies of clocks which may or may not have
   muxes, change the number of parents to 1 in the non-mux case.
 - Use a single CCU description for all variants.
 - Use IS_REACHABLE to guard the call to sun6i_rtc_ccu_probe.
 - Allow the driver to be built on !ARM64 (i.e. RISCV).
 - Rebase example on top of driver changes, and drop the second example.

Changes in v2:
 - Combine "const"s to "enum" in the DT binding compatible property.
 - Properly update the DT binding clocks and clock-names properties.
 - Rebase on v2 of the CCU module support series.
 - Load the CCU driver from the RTC driver, not as an OF provider.

Samuel Holland (6):
  dt-bindings: rtc: sun6i: Clean up repetition
  dt-bindings: rtc: sun6i: Add H616, R329, and D1 support
  rtc: sun6i: Enable the bus clock when provided
  clk: sunxi-ng: mux: Allow muxes to have keys
  clk: sunxi-ng: Add support for the sun6i RTC clocks
  [DO NOT MERGE] clk: sunxi-ng: sun6i-rtc: Add support for H6

 .../bindings/rtc/allwinner,sun6i-a31-rtc.yaml |  84 +++-
 drivers/clk/sunxi-ng/Kconfig                  |   5 +
 drivers/clk/sunxi-ng/Makefile                 |   2 +
 drivers/clk/sunxi-ng/ccu-sun6i-rtc.c          | 393 ++++++++++++++++++
 drivers/clk/sunxi-ng/ccu-sun6i-rtc.h          |  15 +
 drivers/clk/sunxi-ng/ccu_common.h             |   1 +
 drivers/clk/sunxi-ng/ccu_mux.c                |   7 +
 drivers/rtc/rtc-sun6i.c                       |  48 ++-
 include/dt-bindings/clock/sun6i-rtc.h         |  10 +
 include/linux/clk/sunxi-ng.h                  |   2 +
 10 files changed, 538 insertions(+), 29 deletions(-)
 create mode 100644 drivers/clk/sunxi-ng/ccu-sun6i-rtc.c
 create mode 100644 drivers/clk/sunxi-ng/ccu-sun6i-rtc.h
 create mode 100644 include/dt-bindings/clock/sun6i-rtc.h

Comments

Alexandre Belloni Feb. 15, 2022, 10:16 p.m. UTC | #1
Hello,

On 02/02/2022 20:17:30-0600, Samuel Holland wrote:
> This patch series adds a CCU driver for the RTC in the H616, R329 and
> D1. The extra patch at the end of this series shows how it would be
> explanded to additional hardware variants.
> 
> The driver is intended to support the existing binding used for the H6,
> but also an updated binding which includes all RTC input clocks.
> 
> A future patch series could add functionality to the driver to manage
> IOSC calibration at boot and during suspend/resume.
> 
> It may be possible to support all of these hardware variants without
> adding this new driver, by adding them to the existing RTC clock
> provider, but I'm concerned about the complexity there, without any of
> the CCU abstraction.
> 
> Changes in v3:
>  - Add/fix several maxItems attributes for clocks and clock-items
>  - Drop the SUNXI_CCU_MUX_HW_WITH_KEY macro, since it is no longer used.
>  - Also drop the patch adding the SUNXI_CCU_MUX_DATA_WITH_GATE macro.
>  - Rebase on v5.17-rc2 (CCU module support series was merged).
>  - Move IOSC calibration control to prepare/unprepare operations.
>  - Declare several `struct clk_init_data`s as static variables (instead
>    of as anonymous) so they can be modified from the probe function
>    without casting away const.
>  - Instead of creating two copies of clocks which may or may not have
>    muxes, change the number of parents to 1 in the non-mux case.
>  - Use a single CCU description for all variants.
>  - Use IS_REACHABLE to guard the call to sun6i_rtc_ccu_probe.
>  - Allow the driver to be built on !ARM64 (i.e. RISCV).
>  - Rebase example on top of driver changes, and drop the second example.
> 
> Changes in v2:
>  - Combine "const"s to "enum" in the DT binding compatible property.
>  - Properly update the DT binding clocks and clock-names properties.
>  - Rebase on v2 of the CCU module support series.
>  - Load the CCU driver from the RTC driver, not as an OF provider.
> 
> Samuel Holland (6):
>   dt-bindings: rtc: sun6i: Clean up repetition
>   dt-bindings: rtc: sun6i: Add H616, R329, and D1 support
>   rtc: sun6i: Enable the bus clock when provided

I've now applied 1-3/6, thanks!

>   clk: sunxi-ng: mux: Allow muxes to have keys
>   clk: sunxi-ng: Add support for the sun6i RTC clocks
>   [DO NOT MERGE] clk: sunxi-ng: sun6i-rtc: Add support for H6
> 
>  .../bindings/rtc/allwinner,sun6i-a31-rtc.yaml |  84 +++-
>  drivers/clk/sunxi-ng/Kconfig                  |   5 +
>  drivers/clk/sunxi-ng/Makefile                 |   2 +
>  drivers/clk/sunxi-ng/ccu-sun6i-rtc.c          | 393 ++++++++++++++++++
>  drivers/clk/sunxi-ng/ccu-sun6i-rtc.h          |  15 +
>  drivers/clk/sunxi-ng/ccu_common.h             |   1 +
>  drivers/clk/sunxi-ng/ccu_mux.c                |   7 +
>  drivers/rtc/rtc-sun6i.c                       |  48 ++-
>  include/dt-bindings/clock/sun6i-rtc.h         |  10 +
>  include/linux/clk/sunxi-ng.h                  |   2 +
>  10 files changed, 538 insertions(+), 29 deletions(-)
>  create mode 100644 drivers/clk/sunxi-ng/ccu-sun6i-rtc.c
>  create mode 100644 drivers/clk/sunxi-ng/ccu-sun6i-rtc.h
>  create mode 100644 include/dt-bindings/clock/sun6i-rtc.h
> 
> -- 
> 2.33.1
>
Alexandre Belloni March 12, 2022, 11:29 a.m. UTC | #2
On Wed, 2 Feb 2022 20:17:30 -0600, Samuel Holland wrote:
> This patch series adds a CCU driver for the RTC in the H616, R329 and
> D1. The extra patch at the end of this series shows how it would be
> explanded to additional hardware variants.
> 
> The driver is intended to support the existing binding used for the H6,
> but also an updated binding which includes all RTC input clocks.
> 
> [...]

Applied, thanks!

[1/6] dt-bindings: rtc: sun6i: Clean up repetition
      (no commit info)
[2/6] dt-bindings: rtc: sun6i: Add H616, R329, and D1 support
      (no commit info)
[3/6] rtc: sun6i: Enable the bus clock when provided
      (no commit info)
[4/6] clk: sunxi-ng: mux: Allow muxes to have keys
      commit: b6e649834afa1fc6fd856b287e808cebe2c6fb8e
[5/6] clk: sunxi-ng: Add support for the sun6i RTC clocks
      commit: df8925adc02f1cb2c87582d688dd8991aaabf8b2
[6/6] clk: sunxi-ng: sun6i-rtc: Add support for H6
      commit: dc1d63a697304fbd246e24901e0635885856ef63

Best regards,