[PATCH] i2c: implement detect callback for virtual adapter device as well

Ahmad Fatoum a.fatoum at pengutronix.de
Tue Jan 24 23:53:23 PST 2023


For MMCs, we already support detect on both the hardware device and the
mmcX virtual device. Let's do the same for i2c, so users have the option
to do `detect i2c0` instead of `detect 30a30000.i2c at 30a30000.of`.

`detect -a` still works as expected, as the detect callback is a no-op
if everything on the bus is already registered.

Signed-off-by: Ahmad Fatoum <a.fatoum at pengutronix.de>
---
 drivers/i2c/i2c.c | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/drivers/i2c/i2c.c b/drivers/i2c/i2c.c
index 7e1cea49f3b6..4ecf7bb163e6 100644
--- a/drivers/i2c/i2c.c
+++ b/drivers/i2c/i2c.c
@@ -472,6 +472,14 @@ int of_i2c_register_devices_by_node(struct device_node *node)
 }
 
 static int i2c_bus_detect(struct device *dev)
+{
+	struct i2c_adapter *adap = container_of(dev, struct i2c_adapter, dev);
+
+	of_i2c_register_devices(adap);
+	return 0;
+}
+
+static int i2c_hw_detect(struct device *dev)
 {
 	struct i2c_adapter *adap;
 
@@ -712,6 +720,7 @@ int i2c_add_numbered_adapter(struct i2c_adapter *adapter)
 	}
 
 	adapter->dev.id = adapter->nr;
+	adapter->dev.detect = i2c_bus_detect;
 	dev_set_name(&adapter->dev, "i2c");
 
 	ret = register_device(&adapter->dev);
@@ -726,8 +735,8 @@ int i2c_add_numbered_adapter(struct i2c_adapter *adapter)
 	hw_dev = adapter->dev.parent;
 	if (hw_dev && dev_of_node(hw_dev)) {
 		if (!hw_dev->detect)
-			hw_dev->detect = i2c_bus_detect;
-		i2c_bus_detect(hw_dev);
+			hw_dev->detect = i2c_hw_detect;
+		i2c_hw_detect(hw_dev);
 	}
 
 	return 0;
-- 
2.30.2




More information about the barebox mailing list