aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/mips/jz4740/dma.c24
1 files changed, 22 insertions, 2 deletions
diff --git a/arch/mips/jz4740/dma.c b/arch/mips/jz4740/dma.c
index 317ec6fffb12..0e34b97efa8c 100644
--- a/arch/mips/jz4740/dma.c
+++ b/arch/mips/jz4740/dma.c
@@ -16,6 +16,7 @@
16#include <linux/kernel.h> 16#include <linux/kernel.h>
17#include <linux/module.h> 17#include <linux/module.h>
18#include <linux/spinlock.h> 18#include <linux/spinlock.h>
19#include <linux/clk.h>
19#include <linux/interrupt.h> 20#include <linux/interrupt.h>
20 21
21#include <linux/dma-mapping.h> 22#include <linux/dma-mapping.h>
@@ -268,6 +269,7 @@ static irqreturn_t jz4740_dma_irq(int irq, void *dev_id)
268 269
269static int jz4740_dma_init(void) 270static int jz4740_dma_init(void)
270{ 271{
272 struct clk *clk;
271 unsigned int ret; 273 unsigned int ret;
272 274
273 jz4740_dma_base = ioremap(JZ4740_DMAC_BASE_ADDR, 0x400); 275 jz4740_dma_base = ioremap(JZ4740_DMAC_BASE_ADDR, 0x400);
@@ -277,11 +279,29 @@ static int jz4740_dma_init(void)
277 279
278 spin_lock_init(&jz4740_dma_lock); 280 spin_lock_init(&jz4740_dma_lock);
279 281
280 ret = request_irq(JZ4740_IRQ_DMAC, jz4740_dma_irq, 0, "DMA", NULL); 282 clk = clk_get(NULL, "dma");
283 if (IS_ERR(clk)) {
284 ret = PTR_ERR(clk);
285 printk(KERN_ERR "JZ4740 DMA: Failed to request clock: %d\n",
286 ret);
287 goto err_iounmap;
288 }
281 289
282 if (ret) 290 ret = request_irq(JZ4740_IRQ_DMAC, jz4740_dma_irq, 0, "DMA", NULL);
291 if (ret) {
283 printk(KERN_ERR "JZ4740 DMA: Failed to request irq: %d\n", ret); 292 printk(KERN_ERR "JZ4740 DMA: Failed to request irq: %d\n", ret);
293 goto err_clkput;
294 }
295
296 clk_prepare_enable(clk);
297
298 return 0;
299
300err_clkput:
301 clk_put(clk);
284 302
303err_iounmap:
304 iounmap(jz4740_dma_base);
285 return ret; 305 return ret;
286} 306}
287arch_initcall(jz4740_dma_init); 307arch_initcall(jz4740_dma_init);