i2c: gpio: OF gpio code does not handle defered probe case
authorBen Dooks <ben.dooks@codethink.co.uk>
Thu, 13 Mar 2014 14:37:38 +0000 (14:37 +0000)
committerWolfram Sang <wsa@the-dreams.de>
Thu, 13 Mar 2014 21:16:43 +0000 (22:16 +0100)
When using device-tree and the i2c-gpio driver is called before the
GPIO node has been probed then it needs to correctly defer the probe
instead of returning a permanent error that the gpio numbers are not
valid.

This fixes the following error:
/i2c@2: invalid GPIO pins, sda=-517/scl=-517

Signed-off-by: Ben Dooks <ben.dooks@codethink.co.uk>
Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
drivers/i2c/busses/i2c-gpio.c

index d9f7e186a4c7577c3f77eaf3905547f4a189a7b8..02d2d4abb9dd20a836d36b36a6ec5ae277ab2199 100644 (file)
@@ -94,6 +94,9 @@ static int of_i2c_gpio_get_pins(struct device_node *np,
        *sda_pin = of_get_gpio(np, 0);
        *scl_pin = of_get_gpio(np, 1);
 
+       if (*sda_pin == -EPROBE_DEFER || *scl_pin == -EPROBE_DEFER)
+               return -EPROBE_DEFER;
+
        if (!gpio_is_valid(*sda_pin) || !gpio_is_valid(*scl_pin)) {
                pr_err("%s: invalid GPIO pins, sda=%d/scl=%d\n",
                       np->full_name, *sda_pin, *scl_pin);