spi/stmp: Fix device remove function
authorGuenter Roeck <linux@roeck-us.net>
Fri, 24 Aug 2012 03:08:47 +0000 (20:08 -0700)
committerMark Brown <broonie@opensource.wolfsonmicro.com>
Mon, 27 Aug 2012 16:37:52 +0000 (09:37 -0700)
commit154390dcf826dc97b9d338305db14582c32cb58a
treebb26c340dfaaa81a88bc2bd0a0cc71521f1c06ac
parent58ed90de3ef58a19c035355a4a0cd6dfef6d6b0c
spi/stmp: Fix device remove function

The call sequence spi_alloc_master/spi_register_master/spi_unregister_master
is complete; it reduces the device reference count to zero, which results in
device memory being freed. The remove function accesses the freed memory after
the call to spi_unregister_master(), _and_ it calls spi_master_put on the freed
memory.

Acquire a reference to the SPI master device and release it after cleanup is
complete (with the existing spi_master_put) to solve the problem.

Also, the device subsystem ensures that the remove function is only called once,
and resets device driver data to NULL. Remove the respective check and drop the
unnecessaary call to platform_set_drvdata().

Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
drivers/spi/spi-stmp.c