diff options
| -rw-r--r-- | drivers/spi/spi-dw.c | 12 | 
1 files changed, 10 insertions, 2 deletions
| diff --git a/drivers/spi/spi-dw.c b/drivers/spi/spi-dw.c index 29f33143b795..b4508db2edcd 100644 --- a/drivers/spi/spi-dw.c +++ b/drivers/spi/spi-dw.c @@ -547,8 +547,7 @@ static int dw_spi_setup(struct spi_device *spi)  	/* Only alloc on first setup */  	chip = spi_get_ctldata(spi);  	if (!chip) { -		chip = devm_kzalloc(&spi->dev, sizeof(struct chip_data), -				GFP_KERNEL); +		chip = kzalloc(sizeof(struct chip_data), GFP_KERNEL);  		if (!chip)  			return -ENOMEM;  		spi_set_ctldata(spi, chip); @@ -606,6 +605,14 @@ static int dw_spi_setup(struct spi_device *spi)  	return 0;  } +static void dw_spi_cleanup(struct spi_device *spi) +{ +	struct chip_data *chip = spi_get_ctldata(spi); + +	kfree(chip); +	spi_set_ctldata(spi, NULL); +} +  /* Restart the controller, disable all interrupts, clean rx fifo */  static void spi_hw_init(struct dw_spi *dws)  { @@ -661,6 +668,7 @@ int dw_spi_add_host(struct device *dev, struct dw_spi *dws)  	master->bus_num = dws->bus_num;  	master->num_chipselect = dws->num_cs;  	master->setup = dw_spi_setup; +	master->cleanup = dw_spi_cleanup;  	master->transfer_one_message = dw_spi_transfer_one_message;  	master->max_speed_hz = dws->max_freq; | 
