From: David Brownell <[email protected]>
More cleanup of DaVinci DMA code:
- Make "sparse" ("too many warnings") happy.
- Properly register the EDMA device, it's resources, and the driver.
- Rename the init call so it's not confused with <asm/mach/dma.h>
infrastructure.
- It's pointless to bzero BSS data.
This is pure housekeeping cleanup, also saving about 50 bytes.
Signed-off-by: David Brownell <[email protected]>
---
arch/arm/mach-davinci/dma.c | 64 ++++++++++++++++++++++++++++--------------
1 file changed, 43 insertions(+), 21 deletions(-)
--- a/arch/arm/mach-davinci/dma.c
+++ b/arch/arm/mach-davinci/dma.c
@@ -29,8 +29,7 @@
#include <linux/interrupt.h>
#include <linux/platform_device.h>
#include <linux/spinlock.h>
-
-#include <asm/io.h>
+#include <linux/io.h>
#include <mach/cpu.h>
#include <mach/memory.h>
@@ -109,9 +108,11 @@
#define EDMA_SHADOW0 0x2000 /* 4 shadow regions */
#define EDMA_PARM 0x4000 /* 128 param entries */
+#define DAVINCI_DMA_3PCC_BASE 0x01C00000
+
#define PARM_OFFSET(param_no) (EDMA_PARM + ((param_no) << 5))
-unsigned int edmacc_regs_base;
+static const void __iomem *edmacc_regs_base =
IO_ADDRESS(DAVINCI_DMA_3PCC_BASE);
static inline unsigned int edma_read(int offset)
{
@@ -203,20 +204,44 @@ static inline void edma_parm_or(int offs
{
edma_or(EDMA_PARM + offset + (param_no << 5), or);
}
-#define DAVINCI_DMA_3PCC_BASE 0x01C00000
static spinlock_t dma_chan_lock;
-static struct device_driver edma_driver;
-static struct platform_device edma_dev;
#define LOCK_INIT spin_lock_init(&dma_chan_lock)
#define LOCK spin_lock(&dma_chan_lock)
#define UNLOCK spin_unlock(&dma_chan_lock)
-static unsigned int get_edma_base(void)
-{
- return (unsigned int) IO_ADDRESS(DAVINCI_DMA_3PCC_BASE);
-}
+static struct platform_driver edma_driver = {
+ .driver.name = "edma",
+};
+
+static struct resource edma_resources[] = {
+ {
+ .start = DAVINCI_DMA_3PCC_BASE,
+ .end = DAVINCI_DMA_3PCC_BASE + SZ_64K - 1,
+ .flags = IORESOURCE_MEM,
+ },
+ {
+ .name = "edma_tc0",
+ .start = 0x01c10000,
+ .end = 0x01c10000 + SZ_1K - 1,
+ .flags = IORESOURCE_MEM,
+ },
+ {
+ .name = "edma_tc1",
+ .start = 0x01c10400,
+ .end = 0x01c10400 + SZ_1K - 1,
+ .flags = IORESOURCE_MEM,
+ },
+};
+
+static struct platform_device edma_dev = {
+ .name = "edma",
+ .id = -1,
+ .dev.driver = &edma_driver.driver,
+ .num_resources = ARRAY_SIZE(edma_resources),
+ .resource = edma_resources,
+};
/* Structure containing the dma channel parameters */
static struct davinci_dma_lch {
@@ -337,13 +362,13 @@ static void map_dmach_param(int ch_no, i
}
}
-static void map_queue_tc(int queue_no, int tc_no)
+static void __init map_queue_tc(int queue_no, int tc_no)
{
int bit = queue_no * 4;
edma_modify(EDMA_QUETCMAP, ~(0x7 << bit), ((tc_no & 0x7) << bit));
}
-static void assign_priority_to_queue(int queue_no, int priority)
+static void __init assign_priority_to_queue(int queue_no, int priority)
{
int bit = queue_no * 4;
edma_modify(EDMA_QUEPRI, ~(0x7 << bit), ((priority & 0x7) << bit));
@@ -772,19 +797,16 @@ static irqreturn_t dma_tc1err_handler(in
* DMA initialisation on davinci
*
*****************************************************************************/
-int __init arch_dma_init(void)
+static int __init davinci_dma_init(void)
{
int i;
int status;
- edma_driver.name = "edma";
- edma_dev.name = "dma";
- edma_dev.id = -1;
- edma_dev.dev.driver = &edma_driver;
+ platform_driver_register(&edma_driver);
+ platform_device_register(&edma_dev);
+
+ dev_dbg(&edma_dev.dev, "DMA REG BASE ADDR=%p\n", edmacc_regs_base);
- edmacc_regs_base = get_edma_base();
- dev_dbg(&edma_dev.dev, "DMA REG BASE ADDR=%x\n", edmacc_regs_base);
- memset(dma_chan, 0x00, sizeof(dma_chan));
for (i = 0; i < DAVINCI_EDMA_NUM_PARAMENTRY * PARM_SIZE; i += 4)
edma_write(EDMA_PARM + i, 0);
@@ -856,7 +878,7 @@ int __init arch_dma_init(void)
LOCK_INIT;
return 0;
}
-arch_initcall(arch_dma_init)
+arch_initcall(davinci_dma_init);
/******************************************************************************
*
_______________________________________________
Davinci-linux-open-source mailing list
[email protected]
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source