On Wed, Sep 26, 2012 at 09:44:29AM -0400, Matt Porter wrote:
Add ifdefery hacks to only use SRAM on Davinci. This
needs to be cleaned up with a sane generic SRAM allocator
(like the DT based driver available that can't be used on
Davinci which is just starting DT conversion) before it
can go upstream.
I agree with that ;-)
Needing lots of ifdefs in *.c files is usually a bad sign...
Thanks anyway for posting, it's good to have things like that in the archives.
And please make driver code and documentation updates separate patches in the
future.
Hans
Adds DT, pinctrl, and runtime PM support for use on
AM33xx.
Signed-off-by: Matt Porter mpor...@ti.com
---
Documentation/devicetree/bindings/uio/pruss.txt| 17 ++
.../devicetree/bindings/uio/uio_pruss.txt | 17 ++
drivers/uio/Kconfig|4 +-
drivers/uio/uio_pruss.c| 63
+++-
4 files changed, 98 insertions(+), 3 deletions(-)
create mode 100644 Documentation/devicetree/bindings/uio/pruss.txt
create mode 100644 Documentation/devicetree/bindings/uio/uio_pruss.txt
diff --git a/Documentation/devicetree/bindings/uio/pruss.txt
b/Documentation/devicetree/bindings/uio/pruss.txt
new file mode 100644
index 000..2ac45c5
--- /dev/null
+++ b/Documentation/devicetree/bindings/uio/pruss.txt
@@ -0,0 +1,17 @@
+TI PRUSS device
+
+Required properties:
+- compatible :
+ - ti,pruss-v1 for AM18xx/OMAP-L138/DA850
+ - ti,pruss-v2 for AM33xx.
+- ti,pintc-offset : Offset of the PINTC from the PRUSS address base
+- ti,hwmods: Name of the hwmod associated to the PRUSS
+
+Example:
+
+pruss: pruss@4a30 {
+ compatible = ti,pruss-v2;
+ ti,hwmods = pruss;
+ reg = 0x4a30 0x08;
+ ti,pintc-offset = 0x2;
+};
diff --git a/Documentation/devicetree/bindings/uio/uio_pruss.txt
b/Documentation/devicetree/bindings/uio/uio_pruss.txt
new file mode 100644
index 000..2ac45c5
--- /dev/null
+++ b/Documentation/devicetree/bindings/uio/uio_pruss.txt
@@ -0,0 +1,17 @@
+TI PRUSS device
+
+Required properties:
+- compatible :
+ - ti,pruss-v1 for AM18xx/OMAP-L138/DA850
+ - ti,pruss-v2 for AM33xx.
+- ti,pintc-offset : Offset of the PINTC from the PRUSS address base
+- ti,hwmods: Name of the hwmod associated to the PRUSS
+
+Example:
+
+pruss: pruss@4a30 {
+ compatible = ti,pruss-v2;
+ ti,hwmods = pruss;
+ reg = 0x4a30 0x08;
+ ti,pintc-offset = 0x2;
+};
diff --git a/drivers/uio/Kconfig b/drivers/uio/Kconfig
index 6f3ea9b..8da7d9b 100644
--- a/drivers/uio/Kconfig
+++ b/drivers/uio/Kconfig
@@ -96,9 +96,9 @@ config UIO_NETX
config UIO_PRUSS
tristate Texas Instruments PRUSS driver
- depends on ARCH_DAVINCI_DA850
+ depends on ARCH_DAVINCI_DA850 || SOC_AM33XX
help
- PRUSS driver for OMAPL138/DA850/AM18XX devices
+ PRUSS driver for OMAPL138/DA850/AM18XX and AM33XX devices
PRUSS driver requires user space components, examples and user space
driver is available from below SVN repo - you may use anonymous login
diff --git a/drivers/uio/uio_pruss.c b/drivers/uio/uio_pruss.c
index 33a7a27..326ce40 100644
--- a/drivers/uio/uio_pruss.c
+++ b/drivers/uio/uio_pruss.c
@@ -25,7 +25,15 @@
#include linux/clk.h
#include linux/dma-mapping.h
#include linux/slab.h
+#include linux/of_address.h
+#include linux/of_device.h
+#include linux/pinctrl/consumer.h
+#include linux/err.h
+#include linux/pm_runtime.h
+
+#ifdef CONFIG_ARCH_DAVINCI_DA850
#include mach/sram.h
+#endif
#define DRV_NAME pruss_uio
#define DRV_VERSION 1.0
@@ -105,8 +113,10 @@ static void pruss_cleanup(struct platform_device *dev,
dma_free_coherent(dev-dev, extram_pool_sz, gdev-ddr_vaddr,
gdev-ddr_paddr);
}
+#ifdef CONFIG_ARCH_DAVINCI_DA850
if (gdev-sram_vaddr)
sram_free(gdev-sram_vaddr, sram_pool_sz);
+#endif
kfree(gdev-info);
clk_put(gdev-pruss_clk);
kfree(gdev);
@@ -117,8 +127,10 @@ static int __devinit pruss_probe(struct platform_device
*dev)
struct uio_info *p;
struct uio_pruss_dev *gdev;
struct resource *regs_prussio;
+ struct resource res;
int ret = -ENODEV, cnt = 0, len;
struct uio_pruss_pdata *pdata = dev-dev.platform_data;
+ struct pinctrl *pinctrl;
gdev = kzalloc(sizeof(struct uio_pruss_dev), GFP_KERNEL);
if (!gdev)
@@ -129,6 +141,7 @@ static int __devinit pruss_probe(struct platform_device
*dev)
kfree(gdev);
return -ENOMEM;
}
+#ifdef CONFIG_ARCH_DAVINCI_DA850
/* Power on PRU in case its not done as part of boot-loader */
gdev-pruss_clk = clk_get(dev-dev, pruss);
if (IS_ERR(gdev-pruss_clk)) {
@@ -140,6 +153,28 @@ static int __devinit pruss_probe(struct platform_device
*dev)
} else {