]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
Merge remote-tracking branch 'spi/topic/octeon' into spi-next
authorMark Brown <broonie@linaro.org>
Sun, 1 Sep 2013 12:49:00 +0000 (13:49 +0100)
committerMark Brown <broonie@linaro.org>
Sun, 1 Sep 2013 12:49:00 +0000 (13:49 +0100)
drivers/spi/spi-octeon.c

index 24daf964a4094322a891be0974f291dfbb1a024d..5f28ddbe4f7e9cf5b5d5716c55e88c8fe7f346f7 100644 (file)
@@ -28,7 +28,6 @@
 #define OCTEON_SPI_MAX_CLOCK_HZ 16000000
 
 struct octeon_spi {
-       struct spi_master *my_master;
        u64 register_base;
        u64 last_cfg;
        u64 cs_enax;
@@ -64,7 +63,6 @@ static int octeon_spi_do_transfer(struct octeon_spi *p,
        unsigned int speed_hz;
        int mode;
        bool cpha, cpol;
-       int bits_per_word;
        const u8 *tx_buf;
        u8 *rx_buf;
        int len;
@@ -76,12 +74,9 @@ static int octeon_spi_do_transfer(struct octeon_spi *p,
        mode = msg_setup->mode;
        cpha = mode & SPI_CPHA;
        cpol = mode & SPI_CPOL;
-       bits_per_word = msg_setup->bits_per_word;
 
        if (xfer->speed_hz)
                speed_hz = xfer->speed_hz;
-       if (xfer->bits_per_word)
-               bits_per_word = xfer->bits_per_word;
 
        if (speed_hz > OCTEON_SPI_MAX_CLOCK_HZ)
                speed_hz = OCTEON_SPI_MAX_CLOCK_HZ;
@@ -166,19 +161,6 @@ static int octeon_spi_do_transfer(struct octeon_spi *p,
        return xfer->len;
 }
 
-static int octeon_spi_validate_bpw(struct spi_device *spi, u32 speed)
-{
-       switch (speed) {
-       case 8:
-               break;
-       default:
-               dev_err(&spi->dev, "Error: %d bits per word not supported\n",
-                       speed);
-               return -EINVAL;
-       }
-       return 0;
-}
-
 static int octeon_spi_transfer_one_message(struct spi_master *master,
                                           struct spi_message *msg)
 {
@@ -196,15 +178,6 @@ static int octeon_spi_transfer_one_message(struct spi_master *master,
                goto err;
        }
 
-       list_for_each_entry(xfer, &msg->transfers, transfer_list) {
-               if (xfer->bits_per_word) {
-                       status = octeon_spi_validate_bpw(msg->spi,
-                                                        xfer->bits_per_word);
-                       if (status)
-                               goto err;
-               }
-       }
-
        list_for_each_entry(xfer, &msg->transfers, transfer_list) {
                bool last_xfer = &xfer->transfer_list == msg->transfers.prev;
                int r = octeon_spi_do_transfer(p, msg, xfer, last_xfer);
@@ -236,14 +209,9 @@ static struct octeon_spi_setup *octeon_spi_new_setup(struct spi_device *spi)
 
 static int octeon_spi_setup(struct spi_device *spi)
 {
-       int r;
        struct octeon_spi_setup *new_setup;
        struct octeon_spi_setup *old_setup = spi_get_ctldata(spi);
 
-       r = octeon_spi_validate_bpw(spi, spi->bits_per_word);
-       if (r)
-               return r;
-
        new_setup = octeon_spi_new_setup(spi);
        if (!new_setup)
                return -ENOMEM;
@@ -261,14 +229,8 @@ static void octeon_spi_cleanup(struct spi_device *spi)
        kfree(old_setup);
 }
 
-static int octeon_spi_nop_transfer_hardware(struct spi_master *master)
-{
-       return 0;
-}
-
 static int octeon_spi_probe(struct platform_device *pdev)
 {
-
        struct resource *res_mem;
        struct spi_master *master;
        struct octeon_spi *p;
@@ -278,8 +240,7 @@ static int octeon_spi_probe(struct platform_device *pdev)
        if (!master)
                return -ENOMEM;
        p = spi_master_get_devdata(master);
-       platform_set_drvdata(pdev, p);
-       p->my_master = master;
+       platform_set_drvdata(pdev, master);
 
        res_mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
 
@@ -307,9 +268,8 @@ static int octeon_spi_probe(struct platform_device *pdev)
 
        master->setup = octeon_spi_setup;
        master->cleanup = octeon_spi_cleanup;
-       master->prepare_transfer_hardware = octeon_spi_nop_transfer_hardware;
        master->transfer_one_message = octeon_spi_transfer_one_message;
-       master->unprepare_transfer_hardware = octeon_spi_nop_transfer_hardware;
+       master->bits_per_word_mask = SPI_BPW_MASK(8);
 
        master->dev.of_node = pdev->dev.of_node;
        err = spi_register_master(master);
@@ -328,10 +288,11 @@ fail:
 
 static int octeon_spi_remove(struct platform_device *pdev)
 {
-       struct octeon_spi *p = platform_get_drvdata(pdev);
+       struct spi_master *master = platform_get_drvdata(pdev);
+       struct octeon_spi *p = spi_master_get_devdata(master);
        u64 register_base = p->register_base;
 
-       spi_unregister_master(p->my_master);
+       spi_unregister_master(master);
 
        /* Clear the CSENA* and put everything in a known state. */
        cvmx_write_csr(register_base + OCTEON_SPI_CFG, 0);