]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
spi/xilinx: Eliminate pdata references from common code.
authorGrant Likely <grant.likely@secretlab.ca>
Thu, 14 Oct 2010 14:54:55 +0000 (08:54 -0600)
committerGrant Likely <grant.likely@secretlab.ca>
Wed, 10 Nov 2010 04:41:27 +0000 (21:41 -0700)
The current code has the OF binding modifying the platform_data
pointer which it must not do, and the common code doesn't really need
to use a pdata pointer.  This patch eliminates the platform_data
references from the common part of the driver in preparation for
merging the OF and non-OF versions.

Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
Tested-by: Michal Simek <monstr@monstr.eu>
drivers/spi/xilinx_spi.c
drivers/spi/xilinx_spi.h
drivers/spi/xilinx_spi_of.c
drivers/spi/xilinx_spi_pltfm.c

index 80f2db5bcfd6e669bdd136c25f2d04ebb51d4595..efb28ba4a4ec057e95868172222b9defe3f1861f 100644 (file)
@@ -351,18 +351,12 @@ static irqreturn_t xilinx_spi_irq(int irq, void *dev_id)
 }
 
 struct spi_master *xilinx_spi_init(struct device *dev, struct resource *mem,
-       u32 irq, s16 bus_num)
+       u32 irq, s16 bus_num, int num_cs, int little_endian, int bits_per_word)
 {
        struct spi_master *master;
        struct xilinx_spi *xspi;
-       struct xspi_platform_data *pdata = dev->platform_data;
        int ret;
 
-       if (!pdata) {
-               dev_err(dev, "No platform data attached\n");
-               return NULL;
-       }
-
        master = spi_alloc_master(dev, sizeof(struct xilinx_spi));
        if (!master)
                return NULL;
@@ -389,21 +383,21 @@ struct spi_master *xilinx_spi_init(struct device *dev, struct resource *mem,
        }
 
        master->bus_num = bus_num;
-       master->num_chipselect = pdata->num_chipselect;
+       master->num_chipselect = num_cs;
 #ifdef CONFIG_OF
        master->dev.of_node = dev->of_node;
 #endif
 
        xspi->mem = *mem;
        xspi->irq = irq;
-       if (pdata->little_endian) {
+       if (little_endian) {
                xspi->read_fn = xspi_read32;
                xspi->write_fn = xspi_write32;
        } else {
                xspi->read_fn = xspi_read32_be;
                xspi->write_fn = xspi_write32_be;
        }
-       xspi->bits_per_word = pdata->bits_per_word;
+       xspi->bits_per_word = bits_per_word;
        if (xspi->bits_per_word == 8) {
                xspi->tx_fn = xspi_tx8;
                xspi->rx_fn = xspi_rx8;
index d211accf68d2062cf98bef8aad9b5adba3372617..d710a33f569f0dddd34e1a242bf7b99af96a944b 100644 (file)
@@ -26,7 +26,7 @@
 #define XILINX_SPI_NAME "xilinx_spi"
 
 struct spi_master *xilinx_spi_init(struct device *dev, struct resource *mem,
-       u32 irq, s16 bus_num);
+       u32 irq, s16 bus_num, int num_cs, int little_endian, int bits_per_word);
 
 void xilinx_spi_deinit(struct spi_master *master);
 #endif
index b66c2dbf20a59fa7e4ce4071fc0172fe163a939b..c2d8ade87a38b15266a2e0a186d3a42c226a5f3d 100644 (file)
@@ -42,12 +42,11 @@ static int __devinit xilinx_spi_of_probe(struct platform_device *ofdev,
        const struct of_device_id *match)
 {
        struct spi_master *master;
-       struct xspi_platform_data *pdata;
        struct resource r_mem;
        struct resource r_irq;
        int rc = 0;
        const u32 *prop;
-       int len;
+       int len, num_cs;
 
        rc = of_address_to_resource(ofdev->dev.of_node, 0, &r_mem);
        if (rc) {
@@ -61,21 +60,15 @@ static int __devinit xilinx_spi_of_probe(struct platform_device *ofdev,
                return -ENODEV;
        }
 
-       ofdev->dev.platform_data =
-               kzalloc(sizeof(struct xspi_platform_data), GFP_KERNEL);
-       pdata = ofdev->dev.platform_data;
-       if (!pdata)
-               return -ENOMEM;
-
        /* number of slave select bits is required */
        prop = of_get_property(ofdev->dev.of_node, "xlnx,num-ss-bits", &len);
        if (!prop || len < sizeof(*prop)) {
                dev_warn(&ofdev->dev, "no 'xlnx,num-ss-bits' property\n");
                return -EINVAL;
        }
-       pdata->num_chipselect = *prop;
-       pdata->bits_per_word = 8;
-       master = xilinx_spi_init(&ofdev->dev, &r_mem, r_irq.start, -1);
+       num_cs = __be32_to_cpup(prop);
+       master = xilinx_spi_init(&ofdev->dev, &r_mem, r_irq.start, -1,
+                                num_cs, 0, 8);
        if (!master)
                return -ENODEV;
 
@@ -88,8 +81,6 @@ static int __devexit xilinx_spi_remove(struct platform_device *ofdev)
 {
        xilinx_spi_deinit(dev_get_drvdata(&ofdev->dev));
        dev_set_drvdata(&ofdev->dev, 0);
-       kfree(ofdev->dev.platform_data);
-       ofdev->dev.platform_data = NULL;
        return 0;
 }
 
index 24debac646a9f671ee39827f1e13fd9ffcaa4060..a16722acafea9da91628e77b52cb2b5e053bd4bc 100644 (file)
@@ -54,7 +54,9 @@ static int __devinit xilinx_spi_probe(struct platform_device *dev)
        if (irq < 0)
                return -ENXIO;
 
-       master = xilinx_spi_init(&dev->dev, r, irq, dev->id);
+       master = xilinx_spi_init(&dev->dev, r, irq, dev->id,
+                                pdata->num_chipselect, pdata->little_endian,
+                                pdata->bits_per_word);
        if (!master)
                return -ENODEV;