[PATCH v3 2/9] mfd: cgbc: Add I2C platform data

From: Thomas Richard (congatec GmbH)

Date: Fri Sep 11 2026 - 14:59:16 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>
---
MAINTAINERS | 1 +
drivers/mfd/cgbc-core.c | 39 ++++++++++++++++++++++++++--------
include/linux/platform_data/i2c-cgbc.h | 22 +++++++++++++++++++
3 files changed, 53 insertions(+), 9 deletions(-)

diff --git a/MAINTAINERS b/MAINTAINERS
index 6215fcb07770..561f102c2541 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -6621,6 +6621,7 @@ F: drivers/mfd/cgbc-core.c
F: drivers/video/backlight/cgbc_bl.c
F: drivers/watchdog/cgbc_wdt.c
F: include/linux/mfd/cgbc.h
+F: include/linux/platform_data/i2c-cgbc.h

CONSOLE SUBSYSTEM
M: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>
diff --git a/drivers/mfd/cgbc-core.c b/drivers/mfd/cgbc-core.c
index 4a409234e66c..321fa3fff2ac 100644
--- a/drivers/mfd/cgbc-core.c
+++ b/drivers/mfd/cgbc-core.c
@@ -16,6 +16,7 @@
#include <linux/mfd/cgbc.h>
#include <linux/mfd/core.h>
#include <linux/module.h>
+#include <linux/platform_data/i2c-cgbc.h>
#include <linux/platform_device.h>
#include <linux/sysfs.h>

@@ -55,6 +56,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[] = {
+ { .name = "cgbc-backlight" },
+ { .name = "cgbc-gpio" },
+ { .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),
+ },
+ { .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 +265,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/platform_data/i2c-cgbc.h b/include/linux/platform_data/i2c-cgbc.h
new file mode 100644
index 000000000000..4465e8a7b40e
--- /dev/null
+++ b/include/linux/platform_data/i2c-cgbc.h
@@ -0,0 +1,22 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+/*
+ * i2c-cgbc interface to platform code
+ *
+ * Copyright (C) 2026 congatec GmbH
+ * Author: Thomas Richard <thomas.richard@xxxxxxxxxxx>
+ */
+
+#ifndef _LINUX_I2C_CGBC_H
+#define _LINUX_I2C_CGBC_H
+
+/**
+ * struct cgbc_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_I2C_CGBC_H */

--
2.53.0