mfd: simple-mfd-i2c: Add configuration for RPi POE HAT
authorDave Stevenson <dave.stevenson@raspberrypi.com>
Wed, 19 Jan 2022 17:22:57 +0000 (17:22 +0000)
committerDom Cobley <popcornmix@gmail.com>
Mon, 21 Mar 2022 16:04:38 +0000 (16:04 +0000)
The Raspbery Pi PoE+ HAT exposes a fan controller and power
supply status reporting via a single I2C address.

Create an MFD device that allows loading of the relevant
sub-drivers, with a shared I2C regmap.

Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
drivers/mfd/Kconfig
drivers/mfd/simple-mfd-i2c.c

index c79bb26..24e376b 100644 (file)
@@ -1093,6 +1093,16 @@ config MFD_SPMI_PMIC
          Say M here if you want to include support for the SPMI PMIC
          series as a module.  The module will be called "qcom-spmi-pmic".
 
+config MFD_RASPBERRYPI_POE_HAT
+       tristate "Raspberry Pi PoE HAT MFD"
+       depends on I2C
+       select MFD_SIMPLE_MFD_I2C
+       help
+         This module supports the PWM fan controller found on the Raspberry Pi
+         POE and POE+ HAT boards, and the power supply driver on the POE+ HAT.
+         (Functionally it relies on MFD_SIMPLE_MFD_I2C to provide the framework
+         that loads the child drivers).
+
 config MFD_RDC321X
        tristate "RDC R-321x southbridge"
        select MFD_CORE
index 5153669..16eb2a3 100644 (file)
@@ -29,6 +29,15 @@ static const struct regmap_config regmap_config_8r_8v = {
        .val_bits = 8,
 };
 
+static const struct regmap_config regmap_config_16r_8v = {
+       .reg_bits = 16,
+       .val_bits = 8,
+};
+
+static const struct simple_mfd_data rpi_poe_core = {
+       .regmap_config = &regmap_config_16r_8v,
+};
+
 static int simple_mfd_i2c_probe(struct i2c_client *i2c)
 {
        const struct simple_mfd_data *simple_mfd_data;
@@ -64,6 +73,7 @@ static int simple_mfd_i2c_probe(struct i2c_client *i2c)
 
 static const struct of_device_id simple_mfd_i2c_of_match[] = {
        { .compatible = "kontron,sl28cpld" },
+       { .compatible = "raspberrypi,poe-core", &rpi_poe_core },
        {}
 };
 MODULE_DEVICE_TABLE(of, simple_mfd_i2c_of_match);