Merge tag 'driver-core-3.19-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git...
[firefly-linux-kernel-4.4.55.git] / drivers / spi / spi-fsl-spi.c
index ed792880c9d6f2933596e286c9595bcd1acd7690..60c590790854242dde41e86135192ca2c1cbb4a9 100644 (file)
@@ -353,7 +353,8 @@ static int fsl_spi_bufs(struct spi_device *spi, struct spi_transfer *t,
        return mpc8xxx_spi->count;
 }
 
-static void fsl_spi_do_one_msg(struct spi_message *m)
+static int fsl_spi_do_one_msg(struct spi_master *master,
+                             struct spi_message *m)
 {
        struct spi_device *spi = m->spi;
        struct spi_transfer *t, *first;
@@ -367,10 +368,9 @@ static void fsl_spi_do_one_msg(struct spi_message *m)
        list_for_each_entry(t, &m->transfers, transfer_list) {
                if ((first->bits_per_word != t->bits_per_word) ||
                        (first->speed_hz != t->speed_hz)) {
-                       status = -EINVAL;
                        dev_err(&spi->dev,
                                "bits_per_word/speed_hz should be same for the same SPI transfer\n");
-                       return;
+                       return -EINVAL;
                }
        }
 
@@ -408,8 +408,7 @@ static void fsl_spi_do_one_msg(struct spi_message *m)
        }
 
        m->status = status;
-       if (m->complete)
-               m->complete(m->context);
+       spi_finalize_current_message(master);
 
        if (status || !cs_change) {
                ndelay(nsecs);
@@ -417,6 +416,7 @@ static void fsl_spi_do_one_msg(struct spi_message *m)
        }
 
        fsl_spi_setup_transfer(spi, NULL);
+       return 0;
 }
 
 static int fsl_spi_setup(struct spi_device *spi)
@@ -624,15 +624,13 @@ static struct spi_master * fsl_spi_probe(struct device *dev,
 
        dev_set_drvdata(dev, master);
 
-       ret = mpc8xxx_spi_probe(dev, mem, irq);
-       if (ret)
-               goto err_probe;
+       mpc8xxx_spi_probe(dev, mem, irq);
 
        master->setup = fsl_spi_setup;
        master->cleanup = fsl_spi_cleanup;
+       master->transfer_one_message = fsl_spi_do_one_msg;
 
        mpc8xxx_spi = spi_master_get_devdata(master);
-       mpc8xxx_spi->spi_do_one_msg = fsl_spi_do_one_msg;
        mpc8xxx_spi->spi_remove = fsl_spi_remove;
        mpc8xxx_spi->max_bits_per_word = 32;
        mpc8xxx_spi->type = fsl_spi_get_type(dev);
@@ -704,7 +702,6 @@ free_irq:
 err_ioremap:
        fsl_spi_cpm_free(mpc8xxx_spi);
 err_cpm_init:
-err_probe:
        spi_master_put(master);
 err:
        return ERR_PTR(ret);
@@ -882,7 +879,6 @@ static int of_fsl_spi_remove(struct platform_device *ofdev)
 static struct platform_driver of_fsl_spi_driver = {
        .driver = {
                .name = "fsl_spi",
-               .owner = THIS_MODULE,
                .of_match_table = of_fsl_spi_match,
        },
        .probe          = of_fsl_spi_probe,
@@ -929,7 +925,6 @@ static struct platform_driver mpc8xxx_spi_driver = {
        .remove = plat_mpc8xxx_spi_remove,
        .driver = {
                .name = "mpc8xxx_spi",
-               .owner = THIS_MODULE,
        },
 };