From 6a0221e11bcfdd7e6cdf45b09b42ae8829de3b1c Mon Sep 17 00:00:00 2001 From: Dave Stevenson Date: Wed, 19 Jan 2022 17:22:57 +0000 Subject: [PATCH] mfd: simple-mfd-i2c: Add configuration for RPi POE HAT 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 --- drivers/mfd/Kconfig | 10 ++++++++++ drivers/mfd/simple-mfd-i2c.c | 10 ++++++++++ 2 files changed, 20 insertions(+) diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig index ecd9ba2..24e864c 100644 --- a/drivers/mfd/Kconfig +++ b/drivers/mfd/Kconfig @@ -1170,6 +1170,16 @@ config MFD_SY7636A To enable support for building sub-devices as modules, choose M here. +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 diff --git a/drivers/mfd/simple-mfd-i2c.c b/drivers/mfd/simple-mfd-i2c.c index 6eda795..7b98ee2 100644 --- a/drivers/mfd/simple-mfd-i2c.c +++ b/drivers/mfd/simple-mfd-i2c.c @@ -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 = ®map_config_16r_8v, +}; + static int simple_mfd_i2c_probe(struct i2c_client *i2c) { const struct simple_mfd_data *simple_mfd_data; @@ -88,6 +97,7 @@ static const struct of_device_id simple_mfd_i2c_of_match[] = { { .compatible = "silergy,sy7636a", .data = &silergy_sy7636a}, { .compatible = "maxim,max5970", .data = &maxim_max5970}, { .compatible = "maxim,max5978", .data = &maxim_max5970}, + { .compatible = "raspberrypi,poe-core", &rpi_poe_core }, {} }; MODULE_DEVICE_TABLE(of, simple_mfd_i2c_of_match); -- 2.7.4