03 Apr, 2009

2 commits

  • 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
     
  • Allow GPIOs in GPIOLIB chips to be named. This name is then used when the
    GPIO is exported to sysfs, although it could be used elsewhere if deemed
    useful.

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

    Daniel Silverstone
     

30 Jan, 2009

1 commit


07 Jan, 2009

1 commit


20 Nov, 2008

1 commit

  • There are already various drivers having bigger label than 12 bytes. Most
    of them fit well under 20 bytes but make column width exact so that
    oversized labels don't mess up output alignment.

    Signed-off-by: Jarkko Nikula
    Acked-by: David Brownell
    Cc: [2.6.26.x, 2.6.26.x, 2.6.27.x]
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jarkko Nikula
     

21 Oct, 2008

1 commit

  • …/git/tip/linux-2.6-tip

    This merges branches irq/genirq, irq/sparseirq-v4, timers/hpet-percpu
    and x86/uv.

    The sparseirq branch is just preliminary groundwork: no sparse IRQs are
    actually implemented by this tree anymore - just the new APIs are added
    while keeping the old way intact as well (the new APIs map 1:1 to
    irq_desc[]). The 'real' sparse IRQ support will then be a relatively
    small patch ontop of this - with a v2.6.29 merge target.

    * 'genirq-v28-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: (178 commits)
    genirq: improve include files
    intr_remapping: fix typo
    io_apic: make irq_mis_count available on 64-bit too
    genirq: fix name space collisions of nr_irqs in arch/*
    genirq: fix name space collision of nr_irqs in autoprobe.c
    genirq: use iterators for irq_desc loops
    proc: fixup irq iterator
    genirq: add reverse iterator for irq_desc
    x86: move ack_bad_irq() to irq.c
    x86: unify show_interrupts() and proc helpers
    x86: cleanup show_interrupts
    genirq: cleanup the sparseirq modifications
    genirq: remove artifacts from sparseirq removal
    genirq: revert dynarray
    genirq: remove irq_to_desc_alloc
    genirq: remove sparse irq code
    genirq: use inline function for irq_to_desc
    genirq: consolidate nr_irqs and for_each_irq_desc()
    x86: remove sparse irq from Kconfig
    genirq: define nr_irqs for architectures with GENERIC_HARDIRQS=n
    ...

    Linus Torvalds
     

20 Oct, 2008

2 commits

  • We can get the following oops from gpio_get_value_cansleep() when a GPIO
    controller doesn't provide a get() callback:

    Unable to handle kernel paging request for instruction fetch
    Faulting instruction address: 0x00000000
    Oops: Kernel access of bad area, sig: 11 [#1]
    [...]
    NIP [00000000] 0x0
    LR [c0182fb0] gpio_get_value_cansleep+0x40/0x50
    Call Trace:
    [c7b79e80] [c0183f28] gpio_value_show+0x5c/0x94
    [c7b79ea0] [c01a584c] dev_attr_show+0x30/0x7c
    [c7b79eb0] [c00d6b48] fill_read_buffer+0x68/0xe0
    [c7b79ed0] [c00d6c54] sysfs_read_file+0x94/0xbc
    [c7b79ef0] [c008f24c] vfs_read+0xb4/0x16c
    [c7b79f10] [c008f580] sys_read+0x4c/0x90
    [c7b79f40] [c0013a14] ret_from_syscall+0x0/0x38

    It's OK to request the value of *any* GPIO; most GPIOs are bidirectional,
    so configuring them as outputs just enables an output driver and doesn't
    disable the input logic.

    So the problem is that gpio_get_value_cansleep() isn't making the same
    sanity check that gpio_get_value() does: making sure this GPIO isn't one
    of the atypical "no input logic" cases.

    Reported-by: Anton Vorontsov
    Signed-off-by: David Brownell
    Cc: [2.6.27.x, 2.6.26.x, 2.6.25.x]
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    David Brownell
     
  • gpiolib can export GPIOs to userspace via sysfs. This patch modifies the
    gpio_value_show() so that any non-zero value is explicitly printed as "1",
    rather than whatever numerical value the lower-level driver returns.

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

    Steven A. Falco
     

17 Oct, 2008

3 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
     
  • According to the documentation gpio_free should only be called from task
    context only. To make this more explicit add a might sleep to all
    implementations.

    This is the generic part which changes gpiolib and the fallback
    implementation only.

    Signed-off-by: Uwe Kleine-König
    Cc: David Brownell
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Uwe Kleine-König
     

16 Oct, 2008

1 commit

  • add CONFIG_HAVE_SPARSE_IRQ to for use condensed array.
    Get rid of irq_desc[] array assumptions.

    Preallocate 32 irq_desc, and irq_desc() will try to get more.

    ( No change in functionality is expected anywhere, except the odd build
    failure where we missed a code site or where a crossing commit itroduces
    new irq_desc[] usage. )

    v2: according to Eric, change get_irq_desc() to irq_desc()

    Signed-off-by: Yinghai Lu
    Signed-off-by: Ingo Molnar

    Yinghai Lu
     

26 Jul, 2008

1 commit

  • 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
     

25 May, 2008

1 commit

  • The last gpio belonging to a chip is chip->base + chip->ngpios - 1. Some
    places in the code, but not all, forgot the critical minus one.

    Signed-off-by: Trent Piepho
    Acked-by: David Brownell
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Trent Piepho
     

30 Apr, 2008

1 commit


28 Apr, 2008

4 commits

  • Add a new function gpiochip_reserve() to reserve ranges of gpios that platform
    code has pre-allocated. That is, this marks gpio numbers which will be
    claimed by drivers that haven't yet been loaded, and thus are not available
    for dynamic gpio number allocation.

    [akpm@linux-foundation.org: remove unneeded __must_check]
    [david-b@pacbell.net: don't export gpiochip_reserve (section fix)]
    Signed-off-by: Anton Vorontsov
    Signed-off-by: David Brownell
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Anton Vorontsov
     
  • If gpio_chip->base is negative during registration, gpiolib performs dynamic
    base allocation. This is useful for devices that aren't always present, such
    as GPIOs on hotplugged devices rather than mainboards. (This behavior was
    previously specified but not implemented.)

    To avoid using any numbers that may have been explicitly assigned but not yet
    registered, this dynamic allocation assigns GPIO numbers from the biggest
    number on down, instead of from the smallest on up.

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

    Anton Vorontsov
     
  • 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
     
  • As long as one or more GPIOs on a gpio chip are used its driver should not be
    unloaded. The existing mechanism (gpiochip_remove failure) doesn't address
    that, since rmmod can no longer be made to fail by having the cleanup code
    report errors. Module usecounts are the solution.

    Assuming standard "initialize struct to zero" policies, this change won't
    affect SOC platform drivers. However, drivers for external chips (on I2C and
    SPI busses) should be updated if they can be built as modules.

    Signed-off-by: Guennadi Liakhovetski
    [ gpio_ensure_requested() needs to update module usecounts too ]
    Signed-off-by: David Brownell
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Guennadi Liakhovetski
     

06 Feb, 2008

1 commit

  • Provide new implementation infrastructure that platforms may choose to use
    when implementing the GPIO programming interface. Platforms can update their
    GPIO support to use this. In many cases the incremental cost to access a
    non-inlined GPIO should be less than a dozen instructions, with the memory
    cost being about a page (total) of extra data and code. The upside is:

    * Providing two features which were "want to have (but OK to defer)" when
    GPIO interfaces were first discussed in November 2006:

    - A "struct gpio_chip" to plug in GPIOs that aren't directly supported
    by SOC platforms, but come from FPGAs or other multifunction devices
    using conventional device registers (like UCB-1x00 or SM501 GPIOs,
    and southbridges in PCs with more open specs than usual).

    - Full support for message-based GPIO expanders, where registers are
    accessed through sleeping I/O calls. Previous support for these
    "cansleep" calls was just stubs. (One example: the widely used
    pcf8574 I2C chips, with 8 GPIOs each.)

    * Including a non-stub implementation of the gpio_{request,free}() calls,
    making those calls much more useful. The diagnostic labels are also
    recorded given DEBUG_FS, so /sys/kernel/debug/gpio can show a snapshot
    of all GPIOs known to this infrastructure.

    The driver programming interfaces introduced in 2.6.21 do not change at all;
    this infrastructure is entirely below those covers.

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

    David Brownell