• Linus Walleij's avatar
    gpio: make the gpiochip a real device · ff2b1359
    Linus Walleij authored
    GPIO chips have been around for years, but were never real devices,
    instead they were piggy-backing on a parent device (such as a
    platform_device or amba_device) but this was always optional.
    GPIO chips could also exist without any device at all, with its
    struct device *parent (ex *dev) pointer being set to null.
    
    When sysfs was in use, a mock device would be created, with the
    optional parent assigned, or just floating orphaned with NULL
    as parent.
    
    If sysfs is active, it will use this device as parent.
    
    We now create a gpio_device struct containing a real
    struct device and move the subsystem over to using that. The
    list of struct gpio_chip:s is augmented to hold struct
    gpio_device:s and we find gpio_chips:s by first looking up
    the struct gpio_device.
    
    The struct gpio_device is designed to stay around even if the
    gpio_chip is removed, so as to satisfy users in userspace
    that need a backing data structure to hold the state of the
    session initiated with e.g. a character device even if there is
    no physical chip anymore.
    
    From this point on, gpiochips are devices.
    
    Cc: Johan Hovold <johan@kernel.org>
    Cc: Michael Welling <mwelling@ieee.org>
    Cc: Markus Pargmann <mpa@pengutronix.de>
    Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
    ff2b1359
gpiolib-sysfs.c 18.7 KB