diff options
Diffstat (limited to 'drivers/spi/spi.c')
| -rw-r--r-- | drivers/spi/spi.c | 9 | 
1 files changed, 6 insertions, 3 deletions
diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c index b76f2468a84..b3a1f9259b6 100644 --- a/drivers/spi/spi.c +++ b/drivers/spi/spi.c @@ -23,6 +23,7 @@  #include <linux/init.h>  #include <linux/cache.h>  #include <linux/mutex.h> +#include <linux/slab.h>  #include <linux/mod_devicetable.h>  #include <linux/spi/spi.h> @@ -40,7 +41,7 @@ static void spidev_release(struct device *dev)  		spi->master->cleanup(spi);  	spi_master_put(spi->master); -	kfree(dev); +	kfree(spi);  }  static ssize_t @@ -256,6 +257,7 @@ int spi_add_device(struct spi_device *spi)  {  	static DEFINE_MUTEX(spi_add_lock);  	struct device *dev = spi->master->dev.parent; +	struct device *d;  	int status;  	/* Chipselects are numbered 0..max; validate. */ @@ -277,10 +279,11 @@ int spi_add_device(struct spi_device *spi)  	 */  	mutex_lock(&spi_add_lock); -	if (bus_find_device_by_name(&spi_bus_type, NULL, dev_name(&spi->dev)) -			!= NULL) { +	d = bus_find_device_by_name(&spi_bus_type, NULL, dev_name(&spi->dev)); +	if (d != NULL) {  		dev_err(dev, "chipselect %d already in use\n",  				spi->chip_select); +		put_device(d);  		status = -EBUSY;  		goto done;  	}  |