[PATCH v4 2/9] mfd: cgbc: Add I2C platform data
From: Thomas Richard (congatec GmbH)
Date: Fri Oct 02 2026 - 07:14:15 EST
Define I2C platform data for each I2C bus in the cgbc MFD driver. Platform
data passes per-bus parameters to the I2C driver, rather than being defined
inside the i2c-cgbc driver itself. This makes the i2c-cgbc driver more
generic.
Signed-off-by: Thomas Richard (congatec GmbH) <thomas.richard@xxxxxxxxxxx>
---
drivers/mfd/cgbc-core.c | 38 +++++++++++++++++++++++++++++---------
include/linux/mfd/cgbc.h | 10 ++++++++++
2 files changed, 39 insertions(+), 9 deletions(-)
diff --git a/drivers/mfd/cgbc-core.c b/drivers/mfd/cgbc-core.c
index 4a409234e66c..0cd9e6f888cb 100644
--- a/drivers/mfd/cgbc-core.c
+++ b/drivers/mfd/cgbc-core.c
@@ -55,6 +55,35 @@
static struct platform_device *cgbc_pdev;
+static const struct cgbc_i2c_platform_data cgbc_i2c_gp_pdata = {
+ .name = "Congatec General Purpose I2C adapter",
+ .cgbc_bus_id = 0,
+};
+
+static const struct cgbc_i2c_platform_data cgbc_i2c_pm_pdata = {
+ .name = "Congatec Power Management I2C adapter",
+ .cgbc_bus_id = 4,
+};
+
+static const struct mfd_cell cgbc_devs[] = {
+ MFD_CELL_NAME("cgbc-backlight"),
+ MFD_CELL_NAME("cgbc-gpio"),
+ MFD_CELL_NAME("cgbc-hwmon"),
+ {
+ .name = "cgbc-i2c",
+ .id = 1,
+ .platform_data = &cgbc_i2c_gp_pdata,
+ .pdata_size = sizeof(cgbc_i2c_gp_pdata),
+ },
+ {
+ .name = "cgbc-i2c",
+ .id = 2,
+ .platform_data = &cgbc_i2c_pm_pdata,
+ .pdata_size = sizeof(cgbc_i2c_pm_pdata),
+ },
+ MFD_CELL_NAME("cgbc-wdt"),
+};
+
/* Wait the Board Controller is ready to receive some session commands */
static int cgbc_wait_device(struct cgbc_device_data *cgbc)
{
@@ -235,15 +264,6 @@ int cgbc_command(struct cgbc_device_data *cgbc, void *cmd, unsigned int cmd_size
}
EXPORT_SYMBOL_GPL(cgbc_command);
-static struct mfd_cell cgbc_devs[] = {
- { .name = "cgbc-wdt" },
- { .name = "cgbc-gpio" },
- { .name = "cgbc-i2c", .id = 1 },
- { .name = "cgbc-i2c", .id = 2 },
- { .name = "cgbc-hwmon" },
- { .name = "cgbc-backlight" },
-};
-
static int cgbc_map(struct cgbc_device_data *cgbc)
{
struct device *dev = cgbc->dev;
diff --git a/include/linux/mfd/cgbc.h b/include/linux/mfd/cgbc.h
index 91f501e76c8f..4b6e41b9ca4a 100644
--- a/include/linux/mfd/cgbc.h
+++ b/include/linux/mfd/cgbc.h
@@ -41,4 +41,14 @@ struct cgbc_device_data {
int cgbc_command(struct cgbc_device_data *cgbc, void *cmd, unsigned int cmd_size,
void *data, unsigned int data_size, u8 *status);
+/**
+ * struct cgbc_i2c_platform_data - Platform data of the CGBC I2C driver
+ * @name: I2C adapter name
+ * @cgbc_bus_id: I2C bus ID (from Board Controller point of view)
+ */
+struct cgbc_i2c_platform_data {
+ const char *name;
+ int cgbc_bus_id;
+};
+
#endif /*_LINUX_MFD_CGBC_H_*/
--
2.53.0