• Linus Walleij's avatar
    gpio: add a userspace chardev ABI for GPIOs · 3c702e99
    Linus Walleij authored
    A new chardev that is to be used for userspace GPIO access is
    added in this patch. It is intended to gradually replace the
    horribly broken sysfs ABI.
    
    Using a chardev has many upsides:
    
    - All operations are per-gpiochip, which is the actual
      device underlying the GPIOs, making us tie in to the
      kernel device model properly.
    
    - Hotpluggable GPIO controllers can come and go, as this
      kind of problem has been know to userspace for character
      devices since ages, and if a gpiochip handle is held in
      userspace we know we will break something, whereas the
      sysfs is stateless.
    
    - The one-value-per-file rule of sysfs is really hard to
      maintain when you want to twist more than one knob at a time,
      for example have in-kernel APIs to switch several GPIO
      lines at the same time, and this will be possible to do
      with a single ioctl() from userspace, saving a lot of
      context switching.
    
    We also need to add a new bus type for GPIO. This is
    necessary for example for userspace coldplug, where sysfs is
    traversed to find the boot-time device nodes and create the
    character devices in /dev.
    
    This new chardev ABI is *non* *optional* and can be counted
    on to be present in the future, emphasizing the preference
    of this ABI.
    
    The ABI only implements one single ioctl() to get the name
    and number of GPIO lines of a chip. Even this is debatable:
    see it as a minimal example for review. This ABI shall be
    ruthlessly reviewed and etched in stone.
    
    The old /sys/class/gpio is still optional to compile in,
    but will be deprecated.
    
    Unique device IDs are created using IDR, which is overkill
    and insanely scalable, but also well tested.
    
    Cc: Johan Hovold <johan@kernel.org>
    Cc: Michael Welling <mwelling@ieee.org>
    Cc: Markus Pargmann <mpa@pengutronix.de>
    Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Cc: Arnd Bergmann <arnd@arndb.de>
    Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
    3c702e99
gpiolib.c 74.9 KB