Skip to content
  • Manuel Lauss's avatar
    MIPS: Alchemy: Rewrite GPIO support. · 51e02b02
    Manuel Lauss authored
    
    
    The current in-kernel Alchemy GPIO support is far too inflexible for
    all my use cases.  To address this, the following changes are made:
    
    * create generic functions which deal with manipulating the on-chip
      GPIO1/2 blocks.  Such functions are universally useful.
    * Macros for GPIO2 shared interrupt management and block control.
    * support for both built-in CONFIG_GPIOLIB and fast, inlined GPIO macros.
    
      If CONFIG_GPIOLIB is not enabled, provide linux gpio framework
      compatibility by directly inlining the GPIO1/2 functions.  GPIO access
      is limited to on-chip ones and they can be accessed as documented in
      the datasheets (GPIO0-31 and 200-215).
    
      If CONFIG_GPIOLIB is selected, two (2) gpio_chip-s, one for GPIO1 and
      one for GPIO2, are registered.  GPIOs can still be accessed by using
      the numberspace established in the databooks.
    
      However this is not yet flexible enough for my uses:  My Alchemy
      systems have a documented "external" gpio interface (fixed, different
      numberspace) and can support a variety of baseboards, some of which
      are equipped with I2C gpio expanders.  I want to be able to provide
      the default 16 GPIOs of the CPU board numbered as 0..15 and also
      support gpio expanders, if present, starting as gpio16.
    
      To achieve this, a new Kconfig symbol for Alchemy is introduced,
      CONFIG_ALCHEMY_GPIO_INDIRECT, which boards can enable to signal
      that they don't want the Alchemy numberspace exposed to the outside
      world, but instead want to provide their own.  Boards are now respon-
      sible for providing the linux gpio interface glue code (either in a
      custom gpio.h header (in board include directory) or with gpio_chips).
    
      To make the board-specific inlined gpio functions work, the MIPS
      Makefile must be changed so that the mach-au1x00/gpio.h header is
      included _after_ the board headers, by moving the inclusion of
      the mach-au1x00/ to the end of the header list.
    
      See arch/mips/include/asm/mach-au1x00/gpio.h for more info.
    
    Signed-off-by: default avatarManuel Lauss <manuel.lauss@gmail.com>
    Acked-by: default avatarFlorian Fainelli <florian@openwrt.org>
    Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
    51e02b02