• Ned Forrester's avatar
    pxa2xx_spi: chipselect bugfixes · 8423597d
    Ned Forrester authored
    Fixes several chipselect bugs in the pxa2xx_spi driver.  These bugs are in
    all versions of this driver and prevent using it with chips like m25p16
    flash.
    
     1. The spi_transfer.cs_change flag is handled too early:
        before spi_transfer.delay_usecs applies, thus making the
        delay ineffective at holding chip select.
    
     2. spi_transfer.delay_usecs is ignored on the last transfer
        of a message (likewise not holding chipselect long enough).
    
     3. If spi_transfer.cs_change is set on the last transfer, the
        chip select is always disabled, instead of the intended
        meaning: optionally holding chip select enabled for the
        next message.
    
    Those first three bugs were fixed with a relocation of delays
    and chip select de-assertions.
    
     4. If a message has the cs_change flag set on the last transfer,
        and had the chip select stayed enabled as requested (see 3,
        above), it would not have been disabled if the next message is
        for a different chip.  Fixed by dropping chip select regardless
        of cs_change at end of a message, if there is no next message
        or if the next message is for a different chip.
    
    This patch should apply to all kernels back to and including 2.6.20;
    it was test patched against 2.6.20.  An additional patch would be
    required for older kernels, but those versions are very buggy anyway.
    Signed-off-by: default avatarNed Forrester <nforrester@whoi.edu>
    Cc: Vernon Sauder <vernoninhand@gmail.com>
    Cc: Eric Miao <eric.y.miao@gmail.com>
    Signed-off-by: default avatarDavid Brownell <dbrownell@users.sourceforge.net>
    Cc: <stable@kernel.org>		[2.6.25.x, 2.6.26.x]
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    8423597d
pxa2xx_spi.c 42.9 KB