Merge branch 'locking-arch-for-linus' of git://git.kernel.org/pub/scm/linux/kernel...
[firefly-linux-kernel-4.4.55.git] / drivers / spi / spi-dw.c
index 7064cd008539e00f9cfa57e0d52ae72f2c6c1c3a..72921588525008a0f4eaf615980eb884b8614108 100644 (file)
@@ -265,7 +265,7 @@ static void giveback(struct dw_spi *dws)
                                        transfer_list);
 
        if (!last_transfer->cs_change)
-               spi_chip_sel(dws, dws->cur_msg->spi, 0);
+               spi_chip_sel(dws, msg->spi, 0);
 
        spi_finalize_current_message(dws->master);
 }
@@ -390,7 +390,7 @@ static void pump_transfers(unsigned long data)
                goto early_exit;
        }
 
-       /* Delay if requested at end of transfer*/
+       /* Delay if requested at end of transfer */
        if (message->state == RUNNING_STATE) {
                previous = list_entry(transfer->transfer_list.prev,
                                        struct spi_transfer,
@@ -519,7 +519,7 @@ static int dw_spi_transfer_one_message(struct spi_master *master,
        struct dw_spi *dws = spi_master_get_devdata(master);
 
        dws->cur_msg = msg;
-       /* Initial message state*/
+       /* Initial message state */
        dws->cur_msg->state = START_STATE;
        dws->cur_transfer = list_entry(dws->cur_msg->transfers.next,
                                                struct spi_transfer,
@@ -542,8 +542,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);
@@ -604,6 +603,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)
 {
@@ -645,8 +652,7 @@ int dw_spi_add_host(struct device *dev, struct dw_spi *dws)
        dws->prev_chip = NULL;
        dws->dma_inited = 0;
        dws->dma_addr = (dma_addr_t)(dws->paddr + 0x60);
-       snprintf(dws->name, sizeof(dws->name), "dw_spi%d",
-                       dws->bus_num);
+       snprintf(dws->name, sizeof(dws->name), "dw_spi%d", dws->bus_num);
 
        ret = devm_request_irq(dev, dws->irq, dw_spi_irq, IRQF_SHARED,
                        dws->name, dws);
@@ -660,6 +666,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;