14 Jan, 2011

2 commits

  • This reverts commit 0fdae42d361bbb431ca0ab0efed5126a94821177, which
    wasn't really supposed to go in, and causes lots of annoying warnings.

    Quoth Andrew:
    "Complete brainfart - I meant to drop that patch ages ago."

    Quoth Greg:
    "Ick, yeah, that patch isn't ok to go in as-is, all of the callers
    need to be fixed up first, which is what I thought we had agreed on..."

    Reported-by: Stephen Rothwell
    Acked-by: Andrew Morton
    Acked-by: Greg KH
    Signed-off-by: Linus Torvalds

    Linus Torvalds
     
  • Because GPIOs can have crucial functions especially in embedded systems,
    we are better safe than sorry regarding their configuration. For
    gpio_request, the documentation is simply enforced: "The return
    value of gpio_request() must be checked." For gpio_direction_* and
    gpio_request_*, we now act accordingly.

    Signed-off-by: Wolfram Sang
    Cc: David Brownell
    Cc: Greg KH
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Wolfram Sang
     

19 Nov, 2010

1 commit


10 Sep, 2010

1 commit

  • There's been some recent confusion about error checking GPIO numbers.
    briefly, it should be handled mostly during setup, when gpio_request() is
    called, and NEVER by expectig gpio_is_valid to report more than
    never-usable GPIO numbers.

    [akpm@linux-foundation.org: terminate unterminated comment]
    Signed-off-by: David Brownell
    Cc: Eric Miao"
    Cc: "Ryan Mallon"
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    David Brownell
     

11 Aug, 2010

1 commit

  • Be more consistent about runtime programming interface abuse warnings,
    which can reduce some confusion and trigger bugfixes. Based on an
    observation and patch from Jani Nikula.

    Also update doc to highlight some sleeping-call issues and to match some
    recent changes.

    Signed-off-by: David Brownell
    Cc: Jani Nikula
    Cc: "Ryan Mallon"
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    David Brownell
     

07 Mar, 2010

1 commit

  • gpio_request() without initial configuration of the GPIO is normally
    useless, introduce gpio_request_one() together with GPIOF_ flags for
    input/output direction and initial output level.

    gpio_{request,free}_array() for multiple GPIOs.

    Signed-off-by: Eric Miao
    Cc: David Brownell
    Cc: Ben Nizette
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Eric Miao
     

16 Dec, 2009

1 commit

  • Drivers may use gpiolib sysfs as part of their public user space
    interface. The GPIO number and polarity might change from board to
    board. The gpio_export_link() call can be used to hide the GPIO number
    from user space. Add support for also hiding the GPIO line polarity
    changes from user space.

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

    Jani Nikula
     

10 Dec, 2009

1 commit


23 Sep, 2009

2 commits

  • Many gpio chips allow to generate interrupts when the value of a pin
    changes. This patch gives usermode application the opportunity to make
    use of this feature by calling poll(2) on the /sys/class/gpio/gpioN/value
    sysfs file. The edge to trigger can be set in the edge file in the same
    directory. Possible values are "none", "rising", "falling", and "both".

    Using level triggers is not possible with current sysfs since nothing
    changes the GPIO value (and the IRQ keeps triggering). Edge triggering
    will "just work". Note that if there was an event between read() and
    poll(), the poll() returns immediately.

    Also note that this version only supports true GPIO interrupts. Some
    later patch might be able to synthesize this behavior by timer-driven
    polling; some systems seem to need that.

    [dbrownell@users.sourceforge.net: align ids to 16 bit ids; whitespace]
    Signed-off-by: Daniel Glöckner
    Signed-off-by: David Brownell
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Daniel Glöckner
     
  • Commit 926b663ce8215ba448960e1ff6e58b67a2c3b99b (gpiolib: allow GPIOs to
    be named) already provides naming on the chip level. This patch provides
    more flexibility by allowing multiple names where ever in sysfs on a per
    GPIO basis.

    Adapted from David Brownell's comments on a similar concept:
    http://lkml.org/lkml/2009/4/20/203.

    [randy.dunlap@oracle.com: fix build for CONFIG_GENERIC_GPIO=n]
    Signed-off-by: Jani Nikula
    Acked-by: David Brownell
    Cc: Daniel Silverstone
    Signed-off-by: Randy Dunlap
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jani Nikula
     

13 Jun, 2009

1 commit


03 Apr, 2009

1 commit

  • We want to phase out the GPIO "autorequest" mechanism in gpiolib and
    require all callers to use gpio_request().

    - Update feature-removal-schedule
    - Update the documentation now
    - Convert the relevant pr_warning() in gpiolib to a WARN()
    so folk using this mechanism get a noisy stack dump

    Some drivers and board init code will probably need to change.
    Implementations not using gpiolib will still be fine; they are already
    required to implement gpio_{request,free}() stubs.

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

    David Brownell
     

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