• David Brownell's avatar
    spi: bugfix spi_add_device() with duplicate chipselects · e48880e0
    David Brownell authored
    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: default avatarDavid Brownell <dbrownell@users.sourceforge.net>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    e48880e0
spi.c 20.5 KB