aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/spi/spi-dw.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/spi/spi-dw.c')
-rw-r--r--drivers/spi/spi-dw.c15
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
606static 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 */
608static void spi_hw_init(struct dw_spi *dws) 615static 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);