| From bd98a1b6f3129361219ea871c891013d75480c0d Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Mon, 25 Aug 2025 12:20:51 -0500 |
| Subject: mfd: simple-mfd-i2c: Add SpacemiT P1 support |
| |
| From: Alex Elder <elder@riscstar.com> |
| |
| [ Upstream commit 6fc5d415c10e98ac1b31dd1d5653443e691cdcff ] |
| |
| Enable support for the RTC and regulators found in the SpacemiT P1 |
| PMIC. Support is implemented by the simple I2C MFD driver. |
| |
| The P1 PMIC is normally implemented with the SpacemiT K1 SoC. This |
| PMIC provides 6 buck converters and 12 LDO regulators. It also |
| implements a switch, watchdog timer, real-time clock, and more. |
| Initially its RTC and regulators are supported. |
| |
| Signed-off-by: Alex Elder <elder@riscstar.com> |
| Link: https://lore.kernel.org/r/20250825172057.163883-3-elder@riscstar.com |
| Signed-off-by: Lee Jones <lee@kernel.org> |
| Stable-dep-of: 8f34c1a64c53 ("mfd: simple-mfd-i2c: Add Delta TN48M CPLD support") |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/mfd/Kconfig | 13 +++++++++++++ |
| drivers/mfd/simple-mfd-i2c.c | 17 +++++++++++++++++ |
| 2 files changed, 30 insertions(+) |
| |
| diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig |
| index 68d71b4b55bd3..45e0447d3b414 100644 |
| --- a/drivers/mfd/Kconfig |
| +++ b/drivers/mfd/Kconfig |
| @@ -1137,6 +1137,19 @@ config MFD_QCOM_RPM |
| Say M here if you want to include support for the Qualcomm RPM as a |
| module. This will build a module called "qcom_rpm". |
| |
| +config MFD_SPACEMIT_P1 |
| + tristate "SpacemiT P1 PMIC" |
| + depends on ARCH_SPACEMIT || COMPILE_TEST |
| + depends on I2C |
| + select I2C_K1 |
| + select MFD_SIMPLE_MFD_I2C |
| + help |
| + This option supports the I2C-based SpacemiT P1 PMIC, which |
| + contains regulators, a power switch, GPIOs, an RTC, and more. |
| + This option is selected when any of the supported sub-devices |
| + is configured. The basic functionality is implemented by the |
| + simple MFD I2C driver. |
| + |
| config MFD_SPMI_PMIC |
| tristate "Qualcomm SPMI PMICs" |
| depends on ARCH_QCOM || COMPILE_TEST |
| diff --git a/drivers/mfd/simple-mfd-i2c.c b/drivers/mfd/simple-mfd-i2c.c |
| index f7798bd922224..63ac263888606 100644 |
| --- a/drivers/mfd/simple-mfd-i2c.c |
| +++ b/drivers/mfd/simple-mfd-i2c.c |
| @@ -93,6 +93,22 @@ static const struct simple_mfd_data maxim_mon_max77705 = { |
| .mfd_cell_size = ARRAY_SIZE(max77705_sensor_cells), |
| }; |
| |
| +static const struct regmap_config spacemit_p1_regmap_config = { |
| + .reg_bits = 8, |
| + .val_bits = 8, |
| +}; |
| + |
| +static const struct mfd_cell spacemit_p1_cells[] = { |
| + { .name = "spacemit-p1-regulator", }, |
| + { .name = "spacemit-p1-rtc", }, |
| +}; |
| + |
| +static const struct simple_mfd_data spacemit_p1 = { |
| + .regmap_config = &spacemit_p1_regmap_config, |
| + .mfd_cell = spacemit_p1_cells, |
| + .mfd_cell_size = ARRAY_SIZE(spacemit_p1_cells), |
| +}; |
| + |
| static const struct of_device_id simple_mfd_i2c_of_match[] = { |
| { .compatible = "kontron,sl28cpld" }, |
| { .compatible = "silergy,sy7636a", .data = &silergy_sy7636a}, |
| @@ -101,6 +117,7 @@ static const struct of_device_id simple_mfd_i2c_of_match[] = { |
| { .compatible = "maxim,max77705-battery", .data = &maxim_mon_max77705}, |
| { .compatible = "fsl,lx2160aqds-fpga" }, |
| { .compatible = "fsl,ls1028aqds-fpga" }, |
| + { .compatible = "spacemit,p1", .data = &spacemit_p1, }, |
| {} |
| }; |
| MODULE_DEVICE_TABLE(of, simple_mfd_i2c_of_match); |
| -- |
| 2.51.0 |
| |