This series adds initial support for the Samsung S2MPG10 PMIC using the MFD framework. This is a PMIC for mobile applications and is used on the Google Pixel 6 and 6 Pro (oriole / raven). *** dependency note *** To compile, this depends on the Samsung ACPM driver in Linux next with the following additional patches: https://lore.kernel.org/all/20250321-acpm-atomic-v1-0-fb887bde7e61@xxxxxxxxxx/ https://lore.kernel.org/all/20250319-acpm-fixes-v2-0-ac2c1bcf322b@xxxxxxxxxx/ https://lore.kernel.org/all/20250327-acpm-children-v1-0-0afe15ee2ff7@xxxxxxxxxx/ *** dependency note end *** +++ Kconfig update +++ There is a Kconfig symbol update in this series, because the existing Samsung S2M driver has been split into core and transport (I2C & ACPM) parts. CONFIG_MFD_SEC_CORE is now truly a core driver, and the I2C code that was part of it is now enabled via CONFIG_MFD_SEC_I2C. This was necessary because unlike the other S2M PMICs, S2MPG10 doesn't talk via I2C, but via the Samsung ACPM firmware. +++ Kconfig update end +++ This series must be applied in-order, due to interdependencies of some of the patches. There are also various cleanup patches to the S2M drivers. I've kept them ordered as: * DT bindings (patches 1 ... 3) * s2m mfd prep for adding S2MPG10 support (patches 4 ... 7) * split S2M mfd driver into s2m-core and s2m-i2c, including the kconfig symbol update (patch 8) * S2MPG10 core driver (patch 9) * s2m mfd driver cleanup patches (patches 10 ... 23) * S2MPG10 clock driver (patch 24) * s2m RTC prep for adding S2MPG10 (patch 25 ... 26) * S2MPG10 RTC driver (patch 27) * s2m RTC cleanup patches (patches 28 ... 31) I realise these are many, but since some prep-work was required to be able to add S2MPG anyway, I wanted to get the cleanup patches in as well :-) Let me know if I should postpone them to a later date instead. The S2MPG10 includes buck converters, various LDOs, power meters, RTC, clock outputs, and additional GPIOs interfaces. This series adds support in the top-level device driver, and for the RTC and clock. Importantly, having the RTC driver allows to do a proper reset of the system. Drivers or driver updates for the other components will be added in future patches. This will need a DT update for Oriole / Raven to enable this device. I will send that out separately. Cheers, Andre' Signed-off-by: André Draszik <andre.draszik@xxxxxxxxxx> --- Changes in v2: - Rob: - make PMIC node a child of ACPM, and all related changes (binding, driver) - Krzysztof: - merge defconfig updates into patch changing the symbols (patch 8) - split MODULE_AUTHOR update into a separate patch - better alignment fix (patch 11) - merge two s2dos05/s2mpu05 related patches into one (patch 14) - myself: - keep PMIC DT parsing in core, not in transport driver - several updates in sec-acpm.c, see separate entries in patch 9 - fix typo in patch 17 - collect tags - Link to v1: https://lore.kernel.org/r/20250323-s2mpg10-v1-0-d08943702707@xxxxxxxxxx --- André Draszik (32): dt-bindings: mfd: samsung,s2mps11: add s2mpg10 dt-bindings: clock: samsung,s2mps11: add s2mpg10 dt-bindings: firmware: google,gs101-acpm-ipc: add PMIC child node mfd: sec: drop non-existing forward declarations mfd: sec: sort includes alphabetically mfd: sec: update includes to add missing and remove superfluous ones mfd: sec: move private internal API to internal header mfd: sec: split into core and transport (i2c) drivers mfd: sec: add support for S2MPG10 PMIC mfd: sec: merge separate core and irq modules mfd: sec: fix open parenthesis alignment (multiple) mfd: sec: sort struct of_device_id entries and the device type switch mfd: sec: use dev_err_probe() where appropriate mfd: sec: s2dos05/s2mpu05: use explicit regmap config and drop default mfd: sec: s2dos05: doesn't support interrupts (it seems) mfd: sec: don't ignore errors from sec_irq_init() mfd: sec: rework platform data and regmap instantiating mfd: sec: change device_type to int mfd: sec: don't compare against NULL / 0 for errors, use ! mfd: sec: use sizeof(*var), not sizeof(struct type_of_var) mfd: sec: convert to using MFD_CELL macros mfd: sec: convert to using REGMAP_IRQ_REG() macros mfd: sec: add myself as module author clk: s2mps11: add support for S2MPG10 PMIC clock rtc: s5m: cache value of platform_get_device_id() during probe rtc: s5m: prepare for external regmap rtc: s5m: add support for S2MPG10 RTC rtc: s5m: fix a typo: peding -> pending rtc: s5m: switch to devm_device_init_wakeup rtc: s5m: replace regmap_update_bits with regmap_clear/set_bits rtc: s5m: replace open-coded read/modify/write registers with regmap helpers MAINTAINERS: add myself as reviewer for Samsung S2M MFD .../devicetree/bindings/clock/samsung,s2mps11.yaml | 1 + .../bindings/firmware/google,gs101-acpm-ipc.yaml | 17 + .../devicetree/bindings/mfd/samsung,s2mps11.yaml | 28 +- MAINTAINERS | 3 +- arch/arm/configs/exynos_defconfig | 2 +- arch/arm/configs/multi_v7_defconfig | 2 +- arch/arm/configs/pxa_defconfig | 2 +- arch/arm64/configs/defconfig | 2 +- drivers/clk/clk-s2mps11.c | 8 + drivers/mfd/Kconfig | 35 +- drivers/mfd/Makefile | 5 +- drivers/mfd/sec-acpm.c | 460 ++++++++++++++++++++ drivers/mfd/sec-common.c | 301 +++++++++++++ drivers/mfd/sec-core.c | 481 --------------------- drivers/mfd/sec-core.h | 23 + drivers/mfd/sec-i2c.c | 239 ++++++++++ drivers/mfd/sec-irq.c | 460 +++++++------------- drivers/rtc/rtc-s5m.c | 197 ++++++--- include/linux/mfd/samsung/core.h | 7 +- include/linux/mfd/samsung/irq.h | 103 +++++ include/linux/mfd/samsung/rtc.h | 37 ++ include/linux/mfd/samsung/s2mpg10.h | 454 +++++++++++++++++++ 22 files changed, 2002 insertions(+), 865 deletions(-) --- base-commit: f58dd835f82a5dda6c9d3895ee6f15016431fb1f change-id: 20250321-s2mpg10-ef5d1ebd3043 Best regards, -- André Draszik <andre.draszik@xxxxxxxxxx>