[PATCH RESEND] spi/designware: Add device tree bindings

2012-09-17 Thread dinguyen
From: Dinh Nguyen dingu...@altera.com

Add device tree bindings for designware spi modules,
specifically, spi-dw-mmio and spi-dw-pci.

Signed-off-by: Dinh Nguyen dingu...@altera.com
Cc: Rob Herring rob.herr...@calxeda.com
Cc: Paul Gortmaker paul.gortma...@windriver.com
Cc: Axel Lin axel@gmail.com
---
Resend to a bigger audience.
---
 Documentation/devicetree/bindings/spi/spi-dw.txt |   20 +++
 drivers/spi/spi-dw-mmio.c|   24 +++---
 drivers/spi/spi-dw-pci.c |   29 +++---
 3 files changed, 66 insertions(+), 7 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/spi/spi-dw.txt

diff --git a/Documentation/devicetree/bindings/spi/spi-dw.txt 
b/Documentation/devicetree/bindings/spi/spi-dw.txt
new file mode 100644
index 000..10a6e9d
--- /dev/null
+++ b/Documentation/devicetree/bindings/spi/spi-dw.txt
@@ -0,0 +1,20 @@
+DesignWare SPI device
+
+Required properties:
+- compatible : should be snps,dw-spi-mmio or snps,dw-spi-pci
+- reg : offset and length of the register set for the device
+- interrupts: The interrupt number to the cpu. The interrupt specifier format
+  depends on the interrupt controller.
+- num-chipselect: Contains the number of the chipselect
+- bus-num: Bus number
+
+Example:
+   spi: spi@fff0 {
+   compatible = snps,dw-spi-mmio;
+   #address-cells = 1;
+   #size-cells = 0;
+   reg = 0xfff0 0x1000;
+   interrupts = 0 154 4;
+   num-chipselect = 4;
+   bus-num = 0;
+   };
diff --git a/drivers/spi/spi-dw-mmio.c b/drivers/spi/spi-dw-mmio.c
index db2f1ba..555c47a 100644
--- a/drivers/spi/spi-dw-mmio.c
+++ b/drivers/spi/spi-dw-mmio.c
@@ -16,6 +16,7 @@
 #include linux/spi/spi.h
 #include linux/scatterlist.h
 #include linux/module.h
+#include linux/of.h
 
 #include spi-dw.h
 
@@ -31,7 +32,7 @@ static int __devinit dw_spi_mmio_probe(struct platform_device 
*pdev)
struct dw_spi_mmio *dwsmmio;
struct dw_spi *dws;
struct resource *mem, *ioarea;
-   int ret;
+   int ret, num_cs, bus_num;
 
dwsmmio = kzalloc(sizeof(struct dw_spi_mmio), GFP_KERNEL);
if (!dwsmmio) {
@@ -78,9 +79,19 @@ static int __devinit dw_spi_mmio_probe(struct 
platform_device *pdev)
}
clk_enable(dwsmmio-clk);
 
+   ret = of_property_read_u32(pdev-dev.of_node, num-chipselect, 
num_cs);
+   if (ret  0)
+   dws-num_cs = 4;
+   else
+   dws-num_cs = num_cs;
+
+   ret = of_property_read_u32(pdev-dev.of_node, bus-num, bus_num);
+   if (ret  0)
+   dws-bus_num = 0;
+   else
+   dws-bus_num = bus_num;
+
dws-parent_dev = pdev-dev;
-   dws-bus_num = 0;
-   dws-num_cs = 4;
dws-max_freq = clk_get_rate(dwsmmio-clk);
 
ret = dw_spi_add_host(dws);
@@ -127,12 +138,19 @@ static int __devexit dw_spi_mmio_remove(struct 
platform_device *pdev)
return 0;
 }
 
+static struct of_device_id dw_spi_mmio_of_match[] __devinitdata = {
+   { .compatible = snps,dw-spi-mmio, },
+   { /* sentinel */}
+};
+MODULE_DEVICE_TABLE(of, dw_spi_mmio_of_match);
+
 static struct platform_driver dw_spi_mmio_driver = {
.probe  = dw_spi_mmio_probe,
.remove = __devexit_p(dw_spi_mmio_remove),
.driver = {
.name   = DRIVER_NAME,
.owner  = THIS_MODULE,
+   .of_match_table = dw_spi_mmio_of_match,
},
 };
 module_platform_driver(dw_spi_mmio_driver);
diff --git a/drivers/spi/spi-dw-pci.c b/drivers/spi/spi-dw-pci.c
index ff81abb..d6d9d77 100644
--- a/drivers/spi/spi-dw-pci.c
+++ b/drivers/spi/spi-dw-pci.c
@@ -22,6 +22,7 @@
 #include linux/slab.h
 #include linux/spi/spi.h
 #include linux/module.h
+#include linux/of.h
 
 #include spi-dw.h
 
@@ -38,7 +39,7 @@ static int __devinit spi_pci_probe(struct pci_dev *pdev,
struct dw_spi_pci *dwpci;
struct dw_spi *dws;
int pci_bar = 0;
-   int ret;
+   int ret, num_cs, bus_num;
 
printk(KERN_INFO DW: found PCI SPI controller(ID: %04x:%04x)\n,
pdev-vendor, pdev-device);
@@ -71,9 +72,19 @@ static int __devinit spi_pci_probe(struct pci_dev *pdev,
goto err_release_reg;
}
 
+   ret = of_property_read_u32(pdev-dev.of_node, num-chipselect, 
num_cs);
+   if (ret  0)
+   dws-num_cs = 4;
+   else
+   dws-num_cs = num_cs;
+
+   ret = of_property_read_u32(pdev-dev.of_node, bus-num, bus_num);
+   if (ret  0)
+   dws-bus_num = 0;
+   else
+   dws-bus_num = bus_num;
+
dws-parent_dev = pdev-dev;
-   dws-bus_num = 0;
-   dws-num_cs = 4;
dws-irq = pdev-irq;
 
/*
@@ 

[PATCH] spi/designware: Add device tree bindings

2012-09-11 Thread dinguyen
From: Dinh Nguyen dingu...@altera.com

Add device tree bindings for designware spi modules,
specifically, spi-dw-mmio and spi-dw-pci.

Signed-off-by: Dinh Nguyen dingu...@altera.com
---
 Documentation/devicetree/bindings/spi/spi-dw.txt |   20 +++
 drivers/spi/spi-dw-mmio.c|   24 +++---
 drivers/spi/spi-dw-pci.c |   29 +++---
 3 files changed, 66 insertions(+), 7 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/spi/spi-dw.txt

diff --git a/Documentation/devicetree/bindings/spi/spi-dw.txt 
b/Documentation/devicetree/bindings/spi/spi-dw.txt
new file mode 100644
index 000..10a6e9d
--- /dev/null
+++ b/Documentation/devicetree/bindings/spi/spi-dw.txt
@@ -0,0 +1,20 @@
+DesignWare SPI device
+
+Required properties:
+- compatible : should be snps,dw-spi-mmio or snps,dw-spi-pci
+- reg : offset and length of the register set for the device
+- interrupts: The interrupt number to the cpu. The interrupt specifier format
+  depends on the interrupt controller.
+- num-chipselect: Contains the number of the chipselect
+- bus-num: Bus number
+
+Example:
+   spi: spi@fff0 {
+   compatible = snps,dw-spi-mmio;
+   #address-cells = 1;
+   #size-cells = 0;
+   reg = 0xfff0 0x1000;
+   interrupts = 0 154 4;
+   num-chipselect = 4;
+   bus-num = 0;
+   };
diff --git a/drivers/spi/spi-dw-mmio.c b/drivers/spi/spi-dw-mmio.c
index db2f1ba..555c47a 100644
--- a/drivers/spi/spi-dw-mmio.c
+++ b/drivers/spi/spi-dw-mmio.c
@@ -16,6 +16,7 @@
 #include linux/spi/spi.h
 #include linux/scatterlist.h
 #include linux/module.h
+#include linux/of.h
 
 #include spi-dw.h
 
@@ -31,7 +32,7 @@ static int __devinit dw_spi_mmio_probe(struct platform_device 
*pdev)
struct dw_spi_mmio *dwsmmio;
struct dw_spi *dws;
struct resource *mem, *ioarea;
-   int ret;
+   int ret, num_cs, bus_num;
 
dwsmmio = kzalloc(sizeof(struct dw_spi_mmio), GFP_KERNEL);
if (!dwsmmio) {
@@ -78,9 +79,19 @@ static int __devinit dw_spi_mmio_probe(struct 
platform_device *pdev)
}
clk_enable(dwsmmio-clk);
 
+   ret = of_property_read_u32(pdev-dev.of_node, num-chipselect, 
num_cs);
+   if (ret  0)
+   dws-num_cs = 4;
+   else
+   dws-num_cs = num_cs;
+
+   ret = of_property_read_u32(pdev-dev.of_node, bus-num, bus_num);
+   if (ret  0)
+   dws-bus_num = 0;
+   else
+   dws-bus_num = bus_num;
+
dws-parent_dev = pdev-dev;
-   dws-bus_num = 0;
-   dws-num_cs = 4;
dws-max_freq = clk_get_rate(dwsmmio-clk);
 
ret = dw_spi_add_host(dws);
@@ -127,12 +138,19 @@ static int __devexit dw_spi_mmio_remove(struct 
platform_device *pdev)
return 0;
 }
 
+static struct of_device_id dw_spi_mmio_of_match[] __devinitdata = {
+   { .compatible = snps,dw-spi-mmio, },
+   { /* sentinel */}
+};
+MODULE_DEVICE_TABLE(of, dw_spi_mmio_of_match);
+
 static struct platform_driver dw_spi_mmio_driver = {
.probe  = dw_spi_mmio_probe,
.remove = __devexit_p(dw_spi_mmio_remove),
.driver = {
.name   = DRIVER_NAME,
.owner  = THIS_MODULE,
+   .of_match_table = dw_spi_mmio_of_match,
},
 };
 module_platform_driver(dw_spi_mmio_driver);
diff --git a/drivers/spi/spi-dw-pci.c b/drivers/spi/spi-dw-pci.c
index ff81abb..d6d9d77 100644
--- a/drivers/spi/spi-dw-pci.c
+++ b/drivers/spi/spi-dw-pci.c
@@ -22,6 +22,7 @@
 #include linux/slab.h
 #include linux/spi/spi.h
 #include linux/module.h
+#include linux/of.h
 
 #include spi-dw.h
 
@@ -38,7 +39,7 @@ static int __devinit spi_pci_probe(struct pci_dev *pdev,
struct dw_spi_pci *dwpci;
struct dw_spi *dws;
int pci_bar = 0;
-   int ret;
+   int ret, num_cs, bus_num;
 
printk(KERN_INFO DW: found PCI SPI controller(ID: %04x:%04x)\n,
pdev-vendor, pdev-device);
@@ -71,9 +72,19 @@ static int __devinit spi_pci_probe(struct pci_dev *pdev,
goto err_release_reg;
}
 
+   ret = of_property_read_u32(pdev-dev.of_node, num-chipselect, 
num_cs);
+   if (ret  0)
+   dws-num_cs = 4;
+   else
+   dws-num_cs = num_cs;
+
+   ret = of_property_read_u32(pdev-dev.of_node, bus-num, bus_num);
+   if (ret  0)
+   dws-bus_num = 0;
+   else
+   dws-bus_num = bus_num;
+
dws-parent_dev = pdev-dev;
-   dws-bus_num = 0;
-   dws-num_cs = 4;
dws-irq = pdev-irq;
 
/*
@@ -155,13 +166,23 @@ static DEFINE_PCI_DEVICE_TABLE(pci_ids) = {
{},
 };
 
+static struct of_device_id dw_spi_pci_of_match[] __devinitdata = {
+