i2c-gpio: Also set bus numbers from reg property
authorPhil Elwell <phil@raspberrypi.org>
Tue, 20 Feb 2018 10:07:27 +0000 (10:07 +0000)
committerDom Cobley <popcornmix@gmail.com>
Mon, 21 Mar 2022 16:03:51 +0000 (16:03 +0000)
I2C busses can be assigned specific bus numbers using aliases in
Device Tree - string properties where the name is the alias and the
value is the path to the node. The current DT parameter mechanism
does not allow property names to be derived from a parameter value
in any way, so it isn't possible to generate unique or matching
aliases for nodes from an overlay that can generate multiple
instances, e.g. i2c-gpio.

Work around this limitation (at least temporarily) by allowing
the i2c adapter number to be initialised from the "reg" property
if present.

Signed-off-by: Phil Elwell <phil@raspberrypi.org>
drivers/i2c/busses/i2c-gpio.c

index 7a048ab..08ad370 100644 (file)
@@ -445,7 +445,9 @@ static int i2c_gpio_probe(struct platform_device *pdev)
        adap->dev.parent = dev;
        adap->dev.of_node = np;
 
-       adap->nr = pdev->id;
+       if (pdev->id != PLATFORM_DEVID_NONE || !pdev->dev.of_node ||
+           of_property_read_u32(pdev->dev.of_node, "reg", &adap->nr))
+               adap->nr = pdev->id;
        ret = i2c_bit_add_numbered_bus(adap);
        if (ret)
                return ret;