Commit 771669349e6cec0e29a18dc0b5a108e81b85d58c

Authored by Richard Röjfors
Committed by Grant Likely
1 parent c9da2e1255

xilinx_spi: add a platform driver using the xilinx_spi common module.

This patch adds in a platform device driver using the xilinx_spi common module.

Tested-by: John Linn <John.Linn@xilinx.com>
Signed-off-by: Richard Röjfors <richard.rojfors@mocean-labs.com>
Signed-off-by: Grant Likely <grant.likely@secretlab.ca>

Showing 3 changed files with 110 additions and 0 deletions Side-by-side Diff

... ... @@ -261,6 +261,13 @@
261 261 help
262 262 This is the OF driver for the SPI controller IP from the Xilinx EDK.
263 263  
  264 +config SPI_XILINX_PLTFM
  265 + tristate "Xilinx SPI controller platform device"
  266 + depends on SPI_XILINX
  267 + help
  268 + This is the platform driver for the SPI controller IP
  269 + from the Xilinx EDK.
  270 +
264 271 #
265 272 # Add new SPI master controllers in alphabetical order above this line
266 273 #
drivers/spi/Makefile
... ... @@ -33,6 +33,7 @@
33 33 obj-$(CONFIG_SPI_TXX9) += spi_txx9.o
34 34 obj-$(CONFIG_SPI_XILINX) += xilinx_spi.o
35 35 obj-$(CONFIG_SPI_XILINX_OF) += xilinx_spi_of.o
  36 +obj-$(CONFIG_SPI_XILINX_PLTFM) += xilinx_spi_pltfm.o
36 37 obj-$(CONFIG_SPI_SH_SCI) += spi_sh_sci.o
37 38 obj-$(CONFIG_SPI_STMP3XXX) += spi_stmp.o
38 39 # ... add above this line ...
drivers/spi/xilinx_spi_pltfm.c
  1 +/*
  2 + * Support for Xilinx SPI platform devices
  3 + * Copyright (c) 2009 Intel Corporation
  4 + *
  5 + * This program is free software; you can redistribute it and/or modify
  6 + * it under the terms of the GNU General Public License version 2 as
  7 + * published by the Free Software Foundation.
  8 + *
  9 + * This program is distributed in the hope that it will be useful,
  10 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12 + * GNU General Public License for more details.
  13 + *
  14 + * You should have received a copy of the GNU General Public License
  15 + * along with this program; if not, write to the Free Software
  16 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  17 + */
  18 +
  19 +/* Supports:
  20 + * Xilinx SPI devices as platform devices
  21 + *
  22 + * Inspired by xilinx_spi.c, 2002-2007 (c) MontaVista Software, Inc.
  23 + */
  24 +
  25 +#include <linux/module.h>
  26 +#include <linux/init.h>
  27 +#include <linux/interrupt.h>
  28 +#include <linux/io.h>
  29 +#include <linux/platform_device.h>
  30 +
  31 +#include <linux/spi/spi.h>
  32 +#include <linux/spi/spi_bitbang.h>
  33 +#include <linux/spi/xilinx_spi.h>
  34 +
  35 +#include "xilinx_spi.h"
  36 +
  37 +static int __devinit xilinx_spi_probe(struct platform_device *dev)
  38 +{
  39 + struct xspi_platform_data *pdata;
  40 + struct resource *r;
  41 + int irq;
  42 + struct spi_master *master;
  43 + u8 i;
  44 +
  45 + pdata = dev->dev.platform_data;
  46 + if (!pdata)
  47 + return -ENODEV;
  48 +
  49 + r = platform_get_resource(dev, IORESOURCE_MEM, 0);
  50 + if (!r)
  51 + return -ENODEV;
  52 +
  53 + irq = platform_get_irq(dev, 0);
  54 + if (irq < 0)
  55 + return -ENXIO;
  56 +
  57 + master = xilinx_spi_init(&dev->dev, r, irq, dev->id);
  58 + if (!master)
  59 + return -ENODEV;
  60 +
  61 + for (i = 0; i < pdata->num_devices; i++)
  62 + spi_new_device(master, pdata->devices + i);
  63 +
  64 + platform_set_drvdata(dev, master);
  65 + return 0;
  66 +}
  67 +
  68 +static int __devexit xilinx_spi_remove(struct platform_device *dev)
  69 +{
  70 + xilinx_spi_deinit(platform_get_drvdata(dev));
  71 + platform_set_drvdata(dev, 0);
  72 +
  73 + return 0;
  74 +}
  75 +
  76 +/* work with hotplug and coldplug */
  77 +MODULE_ALIAS("platform:" XILINX_SPI_NAME);
  78 +
  79 +static struct platform_driver xilinx_spi_driver = {
  80 + .probe = xilinx_spi_probe,
  81 + .remove = __devexit_p(xilinx_spi_remove),
  82 + .driver = {
  83 + .name = XILINX_SPI_NAME,
  84 + .owner = THIS_MODULE,
  85 + },
  86 +};
  87 +
  88 +static int __init xilinx_spi_pltfm_init(void)
  89 +{
  90 + return platform_driver_register(&xilinx_spi_driver);
  91 +}
  92 +module_init(xilinx_spi_pltfm_init);
  93 +
  94 +static void __exit xilinx_spi_pltfm_exit(void)
  95 +{
  96 + platform_driver_unregister(&xilinx_spi_driver);
  97 +}
  98 +module_exit(xilinx_spi_pltfm_exit);
  99 +
  100 +MODULE_AUTHOR("Mocean Laboratories <info@mocean-labs.com>");
  101 +MODULE_DESCRIPTION("Xilinx SPI platform driver");
  102 +MODULE_LICENSE("GPL v2");