]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
mfd: simple-mfd-i2c: Add SpacemiT P1 support
authorAlex Elder <elder@riscstar.com>
Mon, 25 Aug 2025 17:20:51 +0000 (12:20 -0500)
committerLee Jones <lee@kernel.org>
Wed, 1 Oct 2025 09:28:35 +0000 (10:28 +0100)
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>
drivers/mfd/Kconfig
drivers/mfd/simple-mfd-i2c.c

index 6dba1673b213e53e201335f57e5cd39457a8427c..4a43672812da8567dfe503d02095b926521cccee 100644 (file)
@@ -1254,6 +1254,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
index f7798bd922224eff971183fe4b2adabf2595c5ea..63ac263888606158b4bd781122f397670c308634 100644 (file)
@@ -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);