gpio: fix abi regression in sysfs
authorBamvor Jian Zhang <bamvor.zhangjian@linaro.org>
Wed, 24 Feb 2016 14:17:19 +0000 (22:17 +0800)
committerLinus Walleij <linus.walleij@linaro.org>
Thu, 25 Feb 2016 15:08:45 +0000 (16:08 +0100)
We started to assign the gpio_device as parent for the sysfs
but this changes the expected layout of sysfs. Restore the
previous behaviour.

Signed-off-by: Bamvor Jian Zhang <bamvor.zhangjian@linaro.org>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
drivers/gpio/gpiolib-sysfs.c

index c56309491e8ba5d2a493b7cb5aa6b5ad036d48a1..932e510aec50db6c2dba5f2ce539f5cb46925d31 100644 (file)
@@ -721,6 +721,7 @@ EXPORT_SYMBOL_GPL(gpiod_unexport);
 int gpiochip_sysfs_register(struct gpio_device *gdev)
 {
        struct device   *dev;
+       struct device   *parent;
        struct gpio_chip *chip = gdev->chip;
 
        /*
@@ -732,8 +733,17 @@ int gpiochip_sysfs_register(struct gpio_device *gdev)
        if (!gpio_class.p)
                return 0;
 
+       /*
+        * For sysfs backward compatibility we need to preserve this
+        * preferred parenting to the gpio_chip parent field, if set.
+        */
+       if (chip->parent)
+               parent = chip->parent;
+       else
+               parent = &gdev->dev;
+
        /* use chip->base for the ID; it's already known to be unique */
-       dev = device_create_with_groups(&gpio_class, &gdev->dev,
+       dev = device_create_with_groups(&gpio_class, parent,
                                        MKDEV(0, 0),
                                        chip, gpiochip_groups,
                                        "gpiochip%d", chip->base);