14 Dec, 2011

1 commit


01 Nov, 2011

1 commit


06 Jun, 2011

1 commit

  • Sort the SPI makefile and enforce the naming convention spi_*.c for
    spi drivers.

    This change also rolls the contents of atmel_spi.h into the .c file
    since there is only one user of that particular include file.

    v2: - Use 'spi-' prefix instead of 'spi_' to match what seems to be
    be the predominant pattern for subsystem prefixes.
    - Clean up filenames in Kconfig and header comment blocks

    Signed-off-by: Grant Likely
    Acked-by: Wolfram Sang
    Acked-by: Linus Walleij

    Grant Likely
     

20 May, 2011

1 commit


31 Mar, 2011

1 commit


25 Dec, 2010

1 commit

  • Allow SPI drivers to use runtime PM and other dev_pm_ops features by
    implementing dev_pm_ops for the bus. The existing bus specific suspend
    and resume functions will be called if a driver does not provide dev_pm_ops
    allowing for transition to the new model.

    Signed-off-by: Mark Brown
    Acked-by: Grant Likely
    Signed-off-by: Rafael J. Wysocki

    Mark Brown
     

23 Dec, 2010

1 commit

  • This was fixed by David Lamparter in v2.6.36-rc5 3486008 ("spi: free
    children in spi_unregister_master, not siblings") and broken again in
    v2.6.37-rc1~2^2~4 during the merge of 2b9603a0 ("spi: enable
    spi_board_info to be registered after spi_master").

    Signed-off-by: Sebastian Andrzej Siewior
    Signed-off-by: David Lamparter
    Cc: Grant Likely
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Sebastian Andrzej Siewior
     

22 Oct, 2010

2 commits

  • This patch removes convention of passing a static string as a
    parameter to another static string. The convention is intended to
    reduce text usage by sharing the common bits of the string, but the
    implementation is inherently fragile (a change to one format string
    but not the other will nullify any possible advantage), it isn't
    necessarily a net win depending on what this compiler does, and it
    it reduces code readability.

    Signed-off-by: Linus Walleij
    [grant.likely@secretlab.ca: removed dev_dbg->dev_err hunk]
    Signed-off-by: Grant Likely

    Linus Walleij
     
  • Currently spi_register_board_info() has to be called before its related
    spi_master be registered, otherwise these board info will be just ignored.

    This patch will remove this order limit, it adds a global spi master list
    like the existing global board info listr. Whenever a board info or a
    spi_master is registered, the spi master list or board info list
    will be scanned, and a new spi device will be created if there is a
    master-board info match.

    Signed-off-by: Feng Tang
    Signed-off-by: Grant Likely

    Feng Tang
     

03 Oct, 2010

1 commit

  • This patch adds the OF hook to the spi core so that devices
    can automatically be registered based on device tree data. This fixes
    a problem with spi devices not binding to drivers after the cleanup of
    the spi & i2c binding code.

    Signed-off-by: Sinan Akman
    Signed-off-by: Grant Likely

    Sinan Akman
     

01 Sep, 2010

1 commit

  • introduced by 49dce689 ("spi doesn't need class_device") and bad-fixed
    by 350d0076 ("spi: fix double-free on spi_unregister_master"),
    spi_unregister_master would previously device_unregister all of the spi
    master's siblings (instead of its children). hilarity ensues.

    fix it to unregister children.

    Signed-off-by: David Lamparter
    Signed-off-by: Grant Likely

    David Lamparter
     

15 Aug, 2010

1 commit

  • * 'next-spi' of git://git.secretlab.ca/git/linux-2.6:
    spi/amba_pl022: Fix probe and remove hook section annotations.
    spi/mpc5121: change annotations for probe and remove functions
    spi/bitbang: reinitialize transfer parameters for every message
    spi/spi-gpio: add support for controllers without MISO or MOSI pin
    spi/bitbang: add support for SPI_MASTER_NO_{TX, RX} modes
    SPI100k: Fix 8-bit and RX-only transfers
    spi/mmc_spi: mmc_spi adaptations for SPI bus locking API
    spi/mmc_spi: SPI bus locking API, using mutex

    Fix trivial conflict in drivers/spi/mpc512x_psc_spi.c due to 'struct
    of_device' => 'struct platform_device' rename and __init/__exit to
    __devinit/__devexit fix.

    Linus Torvalds
     

30 Jul, 2010

1 commit


29 Jun, 2010

1 commit

  • SPI bus locking API to allow exclusive access to the SPI bus, especially, but
    not limited to, for the mmc_spi driver.

    Coded according to an outline from Grant Likely; here is his
    specification (accidentally swapped function names corrected):

    It requires 3 things to be added to struct spi_master.
    - 1 Mutex
    - 1 spin lock
    - 1 flag.

    The mutex protects spi_sync, and provides sleeping "for free"
    The spinlock protects the atomic spi_async call.
    The flag is set when the lock is obtained, and checked while holding
    the spinlock in spi_async(). If the flag is checked, then spi_async()
    must fail immediately.

    The current runtime API looks like this:
    spi_async(struct spi_device*, struct spi_message*);
    spi_sync(struct spi_device*, struct spi_message*);

    The API needs to be extended to this:
    spi_async(struct spi_device*, struct spi_message*)
    spi_sync(struct spi_device*, struct spi_message*)
    spi_bus_lock(struct spi_master*) /* although struct spi_device* might
    be easier */
    spi_bus_unlock(struct spi_master*)
    spi_async_locked(struct spi_device*, struct spi_message*)
    spi_sync_locked(struct spi_device*, struct spi_message*)

    Drivers can only call the last two if they already hold the spi_master_lock().

    spi_bus_lock() obtains the mutex, obtains the spin lock, sets the
    flag, and releases the spin lock before returning. It doesn't even
    need to sleep while waiting for "in-flight" spi_transactions to
    complete because its purpose is to guarantee no additional
    transactions are added. It does not guarantee that the bus is idle.

    spi_bus_unlock() clears the flag and releases the mutex, which will
    wake up any waiters.

    The difference between spi_async() and spi_async_locked() is that the
    locked version bypasses the check of the lock flag. Both versions
    need to obtain the spinlock.

    The difference between spi_sync() and spi_sync_locked() is that
    spi_sync() must hold the mutex while enqueuing a new transfer.
    spi_sync_locked() doesn't because the mutex is already held. Note
    however that spi_sync must *not* continue to hold the mutex while
    waiting for the transfer to complete, otherwise only one transfer
    could be queued up at a time!

    Almost no code needs to be written. The current spi_async() and
    spi_sync() can probably be renamed to __spi_async() and __spi_sync()
    so that spi_async(), spi_sync(), spi_async_locked() and
    spi_sync_locked() can just become wrappers around the common code.

    spi_sync() is protected by a mutex because it can sleep
    spi_async() needs to be protected with a flag and a spinlock because
    it can be called atomically and must not sleep

    Signed-off-by: Ernst Schwab
    [grant.likely@secretlab.ca: use spin_lock_irqsave()]
    Signed-off-by: Grant Likely
    Tested-by: Matt Fleming
    Tested-by: Antonio Ospite

    Ernst Schwab
     

28 Apr, 2010

2 commits


30 Mar, 2010

1 commit

  • …it slab.h inclusion from percpu.h

    percpu.h is included by sched.h and module.h and thus ends up being
    included when building most .c files. percpu.h includes slab.h which
    in turn includes gfp.h making everything defined by the two files
    universally available and complicating inclusion dependencies.

    percpu.h -> slab.h dependency is about to be removed. Prepare for
    this change by updating users of gfp and slab facilities include those
    headers directly instead of assuming availability. As this conversion
    needs to touch large number of source files, the following script is
    used as the basis of conversion.

    http://userweb.kernel.org/~tj/misc/slabh-sweep.py

    The script does the followings.

    * Scan files for gfp and slab usages and update includes such that
    only the necessary includes are there. ie. if only gfp is used,
    gfp.h, if slab is used, slab.h.

    * When the script inserts a new include, it looks at the include
    blocks and try to put the new include such that its order conforms
    to its surrounding. It's put in the include block which contains
    core kernel includes, in the same order that the rest are ordered -
    alphabetical, Christmas tree, rev-Xmas-tree or at the end if there
    doesn't seem to be any matching order.

    * If the script can't find a place to put a new include (mostly
    because the file doesn't have fitting include block), it prints out
    an error message indicating which .h file needs to be added to the
    file.

    The conversion was done in the following steps.

    1. The initial automatic conversion of all .c files updated slightly
    over 4000 files, deleting around 700 includes and adding ~480 gfp.h
    and ~3000 slab.h inclusions. The script emitted errors for ~400
    files.

    2. Each error was manually checked. Some didn't need the inclusion,
    some needed manual addition while adding it to implementation .h or
    embedding .c file was more appropriate for others. This step added
    inclusions to around 150 files.

    3. The script was run again and the output was compared to the edits
    from #2 to make sure no file was left behind.

    4. Several build tests were done and a couple of problems were fixed.
    e.g. lib/decompress_*.c used malloc/free() wrappers around slab
    APIs requiring slab.h to be added manually.

    5. The script was run on all .h files but without automatically
    editing them as sprinkling gfp.h and slab.h inclusions around .h
    files could easily lead to inclusion dependency hell. Most gfp.h
    inclusion directives were ignored as stuff from gfp.h was usually
    wildly available and often used in preprocessor macros. Each
    slab.h inclusion directive was examined and added manually as
    necessary.

    6. percpu.h was updated not to include slab.h.

    7. Build test were done on the following configurations and failures
    were fixed. CONFIG_GCOV_KERNEL was turned off for all tests (as my
    distributed build env didn't work with gcov compiles) and a few
    more options had to be turned off depending on archs to make things
    build (like ipr on powerpc/64 which failed due to missing writeq).

    * x86 and x86_64 UP and SMP allmodconfig and a custom test config.
    * powerpc and powerpc64 SMP allmodconfig
    * sparc and sparc64 SMP allmodconfig
    * ia64 SMP allmodconfig
    * s390 SMP allmodconfig
    * alpha SMP allmodconfig
    * um on x86_64 SMP allmodconfig

    8. percpu.h modifications were reverted so that it could be applied as
    a separate patch and serve as bisection point.

    Given the fact that I had only a couple of failures from tests on step
    6, I'm fairly confident about the coverage of this conversion patch.
    If there is a breakage, it's likely to be something in one of the arch
    headers which should be easily discoverable easily on most builds of
    the specific arch.

    Signed-off-by: Tejun Heo <tj@kernel.org>
    Guess-its-ok-by: Christoph Lameter <cl@linux-foundation.org>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Lee Schermerhorn <Lee.Schermerhorn@hp.com>

    Tejun Heo
     

23 Sep, 2009

3 commits

  • Support two new half-duplex SPI implementation restrictions, for links
    that talk to TX-only or RX-only devices. (Existing half-duplex flavors
    support both transfer directions, just not at the same time.)

    Move spi_async() into the spi.c core, and stop inlining it. Then make
    that function perform error checks and reject messages that demand more
    than the underlying controller can support.

    Based on a patch from Marek Szyprowski which did this only for the
    bitbanged GPIO driver.

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

    David Brownell
     
  • This makes it consistent with other buses (platform, i2c, vio, ...). I'm
    not sure why we use the prefixes, but there must be a reason.

    This was easy enough to do it, and I did it.

    Signed-off-by: Anton Vorontsov
    Cc: David Brownell
    Cc: David Woodhouse
    Cc: Grant Likely
    Cc: Jean Delvare
    Cc: Ben Dooks
    Cc: Benjamin Herrenschmidt
    Cc: Dmitry Torokhov
    Cc: Samuel Ortiz
    Cc: "John W. Linville"
    Acked-by: Mike Frysinger
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Anton Vorontsov
     
  • With this patch spi drivers can use standard spi_driver.id_table and
    MODULE_DEVICE_TABLE() mechanisms to bind against the devices. Just like
    we do with I2C drivers.

    This is useful when a single driver supports several variants of devices
    but it is not possible to detect them in run-time (like non-JEDEC chips
    probing in drivers/mtd/devices/m25p80.c), and when platform_data usage is
    overkill.

    This patch also makes life a lot easier on OpenFirmware platforms, since
    with OF we extensively use proper device IDs in modaliases.

    Signed-off-by: Anton Vorontsov
    Cc: David Brownell
    Cc: David Woodhouse
    Cc: Grant Likely
    Cc: Jean Delvare
    Cc: Ben Dooks
    Cc: Benjamin Herrenschmidt
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Anton Vorontsov
     

19 Jun, 2009

3 commits

  • Buffer needs not be dma-safe, not rx data length.

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

    Jiri Pirko
     
  • Move some common spi_setup() error checks into the SPI framework from the
    spi_master controller drivers:

    - Add a new "mode_bits" field to spi_master

    - Use that in spi_setup to validate the spi->mode value being
    requested. Setting this new field is now mandatory for any
    controller supporting more than vanilla SPI_MODE_0.

    - Update all spi_master drivers to:

    * Initialize that field
    * Remove current spi_setup() checks using that value.

    This is a net minor code shrink.

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

    David Brownell
     
  • Start moving some spi_setup() functionality into the SPI core from the
    various spi_master controller drivers:

    - Make that function stop being an inline;

    - Move two common idioms from drivers into that new function:
    * Default bits_per_word to 8 if that field isn't set
    * Issue a standardized dev_dbg() message

    This is a net minor source code shrink, and supports enhancments found in
    some follow-up patches.

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

    David Brownell
     

14 Apr, 2009

1 commit

  • The "simplify spi_write_then_read()" patch included two regressions from
    the 2.6.27 behaviors:

    - The data it wrote out during the (full duplex) read side
    of the transfer was not zeroed.

    - It fails completely on half duplex hardware, such as
    Microwire and most "3-wire" SPI variants.

    So, revert that patch. A revised version should be submitted at some
    point, which can get the speedup on standard hardware (full duplex)
    without breaking on less-capable half-duplex stuff.

    Signed-off-by: David Brownell
    Cc: [2.6.28.x, 2.6.29.x]
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    David Brownell
     

07 Jan, 2009

1 commit


17 Oct, 2008

2 commits

  • Make the SPI external GPIO expander drivers register themselves at
    subsys_initcall() time when they're statically linked, and make the SPI
    core do its driver model initialization earlier so that's safe.

    SOC-integrated GPIOs are available starting very early -- often before
    initcalls start to run, or earily in arch_initcall() at latest -- so this
    improves consistency, letting more subsystems rely on GPIOs being usable
    by their own subsys_initcall() code.

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

    David Brownell
     
  • Modify spi_write_then_read() to use one transfer. This speeds up all
    callers, and is a minor code shrink.

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

    Vernon Sauder
     

15 Aug, 2008

1 commit

  • When reviewing a recent patch I noticed a potential trouble spot in the
    registration of new SPI devices. The SPI master driver is told to set
    the device up before adding it to the driver model, so that it's always
    properly set up when probe() is called. (This is important, because in
    the case of inverted chipselects, this device can make the bus misbehave
    until it's properly deselected. It's got to be set up even if no driver
    binds to the device.)

    The trouble spot is that it doesn't first verify that no other device
    has been added using that chipselect. If such a device has been added,
    its configuration gets trashed. (Fortunately this has not been a common
    error!)

    The fix here adds an explicit check, and a mutex to protect the relevant
    critical region.

    [akpm@linux-foundation.org: make the lock local to spi_add_device()]
    Signed-off-by: David Brownell
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    David Brownell
     

26 Jul, 2008

1 commit

  • spi_new_device() allocates and registers an spi device all in one swoop.
    If the driver needs to add extra data to the spi_device before it is
    registered, then this causes problems. This is needed for OF device
    tree support so that the SPI device tree helper can add a pointer to
    the device node after the device is allocated, but before the device
    is registered. OF aware SPI devices can then retrieve data out of the
    device node to populate a platform data structure.

    This patch splits the allocation and registration portions of code out
    of spi_new_device() and creates two new functions; spi_alloc_device()
    and spi_register_device(). spi_new_device() is modified to use the new
    functions for allocation and registration. None of the existing users
    of spi_new_device() should be affected by this change.

    Drivers using the new API can forego the use of spi_board_info
    structure to describe the device layout and populate data into the
    spi_device structure directly.

    This change is in preparation for adding an OF device tree parser to
    generate spi_devices based on data in the device tree.

    Signed-off-by: Grant Likely
    Acked-by: David Brownell

    Grant Likely
     

25 Jul, 2008

1 commit

  • Currently, 'modalias' in the spi_device structure is a 'const char *'.
    The spi_new_device() function fills in the modalias value from a passed in
    spi_board_info data block. Since it is a pointer copy, the new spi_device
    remains dependent on the spi_board_info structure after the new spi_device
    is registered (no other fields in spi_device directly depend on the
    spi_board_info structure; all of the other data is copied).

    This causes a problem when dynamically propulating the list of attached
    SPI devices. For example, in arch/powerpc, the list of SPI devices can be
    populated from data in the device tree. With the current code, the device
    tree adapter must kmalloc() a new spi_board_info structure for each new
    SPI device it finds in the device tree, and there is no simple mechanism
    in place for keeping track of these allocations.

    This patch changes modalias from a 'const char *' to a fixed char array.
    By copying the modalias string instead of referencing it, the dependency
    on the spi_board_info structure is eliminated and an outside caller does
    not need to maintain a separate spi_board_info allocation for each device.

    If searched through the code to the best of my ability for any references
    to modalias which may be affected by this change and haven't found
    anything. It has been tested with the lite5200b platform in arch/powerpc.

    [dbrownell@users.sourceforge.net: cope with linux-next changes: KOBJ_NAME_LEN obliterated, etc]
    Signed-off-by: Grant Likely
    Signed-off-by: David Brownell
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Grant Likely
     

22 Jul, 2008

1 commit


07 Feb, 2008

2 commits


25 Jan, 2008

1 commit


06 Dec, 2007

2 commits

  • Simplify spi_sync calling convention, eliminating the need to check both
    the return value AND the message->status. In consequence, this corrects
    misbehaviours of spi_read and spi_write (which only checked the former) and
    their callers.

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

    Marc Pignat
     
  • Make spi_write_then_read() use a mutex not a binary semaphore.

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

    David Brownell
     

15 Nov, 2007

1 commit

  • After 49dce689ad4ef0fd1f970ef762168e4bd46f69a3, device_for_each_child
    iteration hits the master device itself. Do not call spi_unregister_device()
    for the master device.

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

    Atsushi Nemoto
     

17 Oct, 2007

1 commit

  • Make the SPI framework and drivers stop using class_device. Update docs
    accordingly ... highlighting just which sysfs paths should be
    "safe"/stable.

    Signed-off-by: Tony Jones
    Signed-off-by: David Brownell
    Cc: Greg KH
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Tony Jones
     

13 Oct, 2007

1 commit

  • This changes the uevent buffer functions to use a struct instead of a
    long list of parameters. It does no longer require the caller to do the
    proper buffer termination and size accounting, which is currently wrong
    in some places. It fixes a known bug where parts of the uevent
    environment are overwritten because of wrong index calculations.

    Many thanks to Mathieu Desnoyers for finding bugs and improving the
    error handling.

    Signed-off-by: Kay Sievers
    Cc: Mathieu Desnoyers
    Cc: Cornelia Huck
    Signed-off-by: Greg Kroah-Hartman

    Kay Sievers
     

01 Aug, 2007

1 commit

  • This updates some error reporting paths in SPI device setup:

    - Move validation logic for SPI chipselects to spi_new_device(),
    which is where it should always have been.

    - In spi_new_device(), emit error messages if the device can't
    be created. This is LOTS better than a silent failure; though
    eventually, the calling convention should probably change to
    use the conventions.

    - Includes one previously-missing check: SPI masters must always
    have at least one chipselect, even for dedicated busses which
    always keep it selected!

    It also adds a FIXME (IDR for dynamic ID allocation) so the issue doesn't live
    purely in my mailbox.

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

    David Brownell