17 Oct, 2008

2 commits

  • Add a new internal mechanism to gpiolib to support low power
    operations by letting gpio_chip instances see when their GPIOs
    are in use. When no GPIOs are active, chips may be able to
    enter lower powered runtime states by disabling clocks and/or
    power domains.

    Signed-off-by: David Brownell
    Cc: "Magnus Damm"
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    David Brownell
     
  • Add a new gpiolib mechanism: gpio_chip instances can provide mappings
    between their (input) GPIOs and any associated IRQs. This makes it easier
    for platforms to support IRQs that are provided by board-specific external
    chips instead of as part of their core (such as SOC-integrated GPIOs).

    Also update the irq_to_gpio() description, saying to avoid it because it's
    not always supported.

    Signed-off-by: David Brownell
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    David Brownell
     

26 Jul, 2008

2 commits

  • This patch adds functionality to the gpio-lib subsystem to make it
    possible to enable the gpio-lib code even if the architecture code didn't
    request to get it built in.

    The archtitecture code does still need to implement the gpiolib accessor
    functions in its asm/gpio.h file. This patch adds the implementations for
    x86 and PPC.

    With these changes it is possible to run generic GPIO expansion cards on
    every architecture that implements the trivial wrapper functions. Support
    for more architectures can easily be added.

    Signed-off-by: Michael Buesch
    Cc: Benjamin Herrenschmidt
    Cc: Stephen Rothwell
    Cc: David Brownell
    Cc: Russell King
    Cc: Haavard Skinnemoen
    Cc: Jesper Nilsson
    Cc: Ralf Baechle
    Cc: Paul Mackerras
    Cc: Benjamin Herrenschmidt
    Cc: Ingo Molnar
    Cc: Thomas Gleixner
    Cc: Jean Delvare
    Cc: Samuel Ortiz
    Cc: Kumar Gala
    Cc: Sam Ravnborg
    Cc: Adrian Bunk
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Michael Buesch
     
  • This adds a simple sysfs interface for GPIOs.

    /sys/class/gpio
    /export ... asks the kernel to export a GPIO to userspace
    /unexport ... to return a GPIO to the kernel
    /gpioN ... for each exported GPIO #N
    /value ... always readable, writes fail for input GPIOs
    /direction ... r/w as: in, out (default low); write high, low
    /gpiochipN ... for each gpiochip; #N is its first GPIO
    /base ... (r/o) same as N
    /label ... (r/o) descriptive, not necessarily unique
    /ngpio ... (r/o) number of GPIOs; numbered N .. N+(ngpio - 1)

    GPIOs claimed by kernel code may be exported by its owner using a new
    gpio_export() call, which should be most useful for driver debugging.
    Such exports may optionally be done without a "direction" attribute.

    Userspace may ask to take over a GPIO by writing to a sysfs control file,
    helping to cope with incomplete board support or other "one-off"
    requirements that don't merit full kernel support:

    echo 23 > /sys/class/gpio/export
    ... will gpio_request(23, "sysfs") and gpio_export(23);
    use /sys/class/gpio/gpio-23/direction to (re)configure it,
    when that GPIO can be used as both input and output.
    echo 23 > /sys/class/gpio/unexport
    ... will gpio_free(23), when it was exported as above

    The extra D-space footprint is a few hundred bytes, except for the sysfs
    resources associated with each exported GPIO. The additional I-space
    footprint is about two thirds of the current size of gpiolib (!). Since
    no /dev node creation is involved, no "udev" support is needed.

    Related changes:

    * This adds a device pointer to "struct gpio_chip". When GPIO
    providers initialize that, sysfs gpio class devices become children of
    that device instead of being "virtual" devices.

    * The (few) gpio_chip providers which have such a device node have
    been updated.

    * Some gpio_chip drivers also needed to update their module "owner"
    field ... for which missing kerneldoc was added.

    * Some gpio_chips don't support input GPIOs. Those GPIOs are now
    flagged appropriately when the chip is registered.

    Based on previous patches, and discussion both on and off LKML.

    A Documentation/ABI/testing/sysfs-gpio update is ready to submit once this
    merges to mainline.

    [akpm@linux-foundation.org: a few maintenance build fixes]
    Signed-off-by: David Brownell
    Cc: Guennadi Liakhovetski
    Cc: Greg KH
    Cc: Kay Sievers
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    David Brownell
     

28 Apr, 2008

1 commit

  • Introduce a gpio_is_valid() predicate; use it in gpiolib.

    Signed-off-by: Guennadi Liakhovetski
    [ use inline function; follow the gpio_* naming convention;
    work without gpiolib; all programming interfaces need docs ]
    Signed-off-by: David Brownell
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Guennadi Liakhovetski
     

05 Mar, 2008

1 commit

  • Add a defining fail/warn stubs for GPIO calls on platforms that
    don't support the GPIO programming interface. That includes the arch-specific
    implementation glue otherwise.

    This facilitates a new model for GPIO usage: drivers that can use GPIOs if
    they're available, but don't require them. One example of such a driver is
    NAND driver for various FreeScale chips. On platforms update with GPIO
    support, they can be used instead of a worst-case delay to verify that the
    BUSY signal is off.

    (Also includes a couple minor unrelated doc updates.)

    Signed-off-by: David Brownell
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    David Brownell
     

06 Feb, 2008

1 commit

  • Update Documentation/gpio.txt, primarily to include the new "gpiolib"
    infrastructure.

    Signed-off-by: David Brownell
    Cc: Jean Delvare
    Cc: Eric Miao
    Cc: Sam Ravnborg
    Cc: Haavard Skinnemoen
    Cc: Philipp Zabel
    Cc: Russell King
    Cc: Ben Gardner
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    David Brownell
     

25 Jul, 2007

1 commit

  • Fix doc bug noted by Uwe Kleine-König: gpio_set_direction() is long
    gone, replaced by gpio_direction_input() and gpio_direction_output().

    Signed-off-by: David Brownell
    Cc:
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    David Brownell
     

20 Jul, 2007

1 commit

  • Clarify that drivers using the GPIO operations don't need to issue io
    barrier instructions themselves. Previously this wasn't clear, and at
    least one platform assumed otherwise (and would thus break various
    otherwise-portable drivers which don't issue barriers).

    Signed-off-by: David Brownell
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    David Brownell
     

17 May, 2007

1 commit

  • Loosen gpio_{request,free}() and gpio_direction_{in,out}put() call context
    restrictions slightly, so a common idiom is no longer an error: board init
    code setting up spinlock-safe GPIOs before tasking is enabled.

    The issue was caught by some paranoid code with might_sleep() checks. The
    legacy platform-specific GPIO interfaces stick to spinlock-safe GPIOs, so this
    change reflects current implementations and won't break anything.

    Signed-off-by: David Brownell
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    David Brownell
     

11 May, 2007

1 commit

  • Documentation/gpio.txt should mention the Kconfig GENERIC_GPIO flag, for
    platforms to declare when relevant. This should help minimize goofs like
    omitting it, or not depending on it when needed.

    Signed-off-by: David Brownell
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    David Brownell
     

13 Apr, 2007

1 commit


17 Mar, 2007

1 commit

  • It's been pointed out that output GPIOs should have an initial value, to
    avoid signal glitching ... among other things, it can be some time before
    a driver is ready. This patch corrects that oversight, fixing

    - documentation
    - platforms supporting the GPIO interface
    - users of that call (just one for now, others are pending)

    There's only one user of this call for now since most platforms are still
    using non-generic GPIO setup code, which in most cases already couples the
    initial value with its "set output mode" request.

    Note that most platforms are clear about the hardware letting the output
    value be set before the pin direction is changed, but the s3c241x docs are
    vague on that topic ... so those chips might not avoid the glitches.

    Signed-off-by: David Brownell
    Acked-by: Andrew Victor
    Acked-by: Milan Svoboda
    Acked-by: Haavard Skinnemoen
    Cc: Russell King
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    David Brownell
     

17 Feb, 2007

1 commit


13 Feb, 2007

1 commit

  • This defines a simple and minimalist programming interface for GPIO APIs:

    - Documentation/gpio.txt ... describes things (read it)

    - include/asm-arm/gpio.h ... defines the ARM hook, which just punts
    to for any implementation

    - include/asm-generic/gpio.h ... implement "can sleep" variants as calling
    the normal ones, for systems that don't handle i2c expanders.

    The immediate need for such a cross-architecture API convention is to support
    drivers that work the same on AT91 ARM and AVR32 AP7000 chips, which embed many
    of the same controllers but have different CPUs. However, several other users
    have been reported, including a driver for a hardware watchdog chip and some
    handhelds.org multi-CPU button drivers.

    Signed-off-by: David Brownell
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    David Brownell