diff options
Diffstat (limited to 'drivers/spi/spi-dw.c')
-rw-r--r-- | drivers/spi/spi-dw.c | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/drivers/spi/spi-dw.c b/drivers/spi/spi-dw.c index 6bb484919e58..72e12bad14b9 100644 --- a/drivers/spi/spi-dw.c +++ b/drivers/spi/spi-dw.c | |||
@@ -265,7 +265,7 @@ static void giveback(struct dw_spi *dws) | |||
265 | transfer_list); | 265 | transfer_list); |
266 | 266 | ||
267 | if (!last_transfer->cs_change) | 267 | if (!last_transfer->cs_change) |
268 | spi_chip_sel(dws, dws->cur_msg->spi, 0); | 268 | spi_chip_sel(dws, msg->spi, 0); |
269 | 269 | ||
270 | spi_finalize_current_message(dws->master); | 270 | spi_finalize_current_message(dws->master); |
271 | } | 271 | } |
@@ -542,8 +542,7 @@ static int dw_spi_setup(struct spi_device *spi) | |||
542 | /* Only alloc on first setup */ | 542 | /* Only alloc on first setup */ |
543 | chip = spi_get_ctldata(spi); | 543 | chip = spi_get_ctldata(spi); |
544 | if (!chip) { | 544 | if (!chip) { |
545 | chip = devm_kzalloc(&spi->dev, sizeof(struct chip_data), | 545 | chip = kzalloc(sizeof(struct chip_data), GFP_KERNEL); |
546 | GFP_KERNEL); | ||
547 | if (!chip) | 546 | if (!chip) |
548 | return -ENOMEM; | 547 | return -ENOMEM; |
549 | spi_set_ctldata(spi, chip); | 548 | spi_set_ctldata(spi, chip); |
@@ -604,6 +603,14 @@ static int dw_spi_setup(struct spi_device *spi) | |||
604 | return 0; | 603 | return 0; |
605 | } | 604 | } |
606 | 605 | ||
606 | static void dw_spi_cleanup(struct spi_device *spi) | ||
607 | { | ||
608 | struct chip_data *chip = spi_get_ctldata(spi); | ||
609 | |||
610 | kfree(chip); | ||
611 | spi_set_ctldata(spi, NULL); | ||
612 | } | ||
613 | |||
607 | /* Restart the controller, disable all interrupts, clean rx fifo */ | 614 | /* Restart the controller, disable all interrupts, clean rx fifo */ |
608 | static void spi_hw_init(struct dw_spi *dws) | 615 | static void spi_hw_init(struct dw_spi *dws) |
609 | { | 616 | { |
@@ -659,8 +666,10 @@ int dw_spi_add_host(struct device *dev, struct dw_spi *dws) | |||
659 | master->bus_num = dws->bus_num; | 666 | master->bus_num = dws->bus_num; |
660 | master->num_chipselect = dws->num_cs; | 667 | master->num_chipselect = dws->num_cs; |
661 | master->setup = dw_spi_setup; | 668 | master->setup = dw_spi_setup; |
669 | master->cleanup = dw_spi_cleanup; | ||
662 | master->transfer_one_message = dw_spi_transfer_one_message; | 670 | master->transfer_one_message = dw_spi_transfer_one_message; |
663 | master->max_speed_hz = dws->max_freq; | 671 | master->max_speed_hz = dws->max_freq; |
672 | master->dev.of_node = dev->of_node; | ||
664 | 673 | ||
665 | /* Basic HW init */ | 674 | /* Basic HW init */ |
666 | spi_hw_init(dws); | 675 | spi_hw_init(dws); |