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@xxxxxxxxxxx`. `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@xxxxxxxxxxxxxx> --- 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