Merge branch 'next-s3c64xx-fixes' into next-s3c-fixes
authorBen Dooks <ben-linux@fluff.org>
Thu, 17 Sep 2009 09:12:48 +0000 (10:12 +0100)
committerBen Dooks <ben-linux@fluff.org>
Thu, 17 Sep 2009 09:12:48 +0000 (10:12 +0100)
arch/arm/plat-s3c64xx/dma.c
arch/arm/plat-s3c64xx/include/plat/dma-plat.h
arch/arm/plat-s3c64xx/s3c6400-clock.c

index 67aa93dbb69e16c6b213bb9d2cd222c1c61e2385..266a10745a85988c36f74671ab216bf60dd3cd96 100644 (file)
@@ -345,13 +345,13 @@ int s3c2410_dma_enqueue(unsigned int channel, void *id,
        if (!chan)
                return -EINVAL;
 
-       buff = kzalloc(sizeof(struct s3c64xx_dma_buff), GFP_KERNEL);
+       buff = kzalloc(sizeof(struct s3c64xx_dma_buff), GFP_ATOMIC);
        if (!buff) {
                printk(KERN_ERR "%s: no memory for buffer\n", __func__);
                return -ENOMEM;
        }
 
-       lli = dma_pool_alloc(dma_pool, GFP_KERNEL, &buff->lli_dma);
+       lli = dma_pool_alloc(dma_pool, GFP_ATOMIC, &buff->lli_dma);
        if (!lli) {
                printk(KERN_ERR "%s: no memory for lli\n", __func__);
                ret = -ENOMEM;
@@ -697,7 +697,7 @@ static int __init s3c64xx_dma_init(void)
 
        printk(KERN_INFO "%s: Registering DMA channels\n", __func__);
 
-       dma_pool = dma_pool_create("DMA-LLI", NULL, 32, 16, 0);
+       dma_pool = dma_pool_create("DMA-LLI", NULL, sizeof(struct pl080s_lli), 16, 0);
        if (!dma_pool) {
                printk(KERN_ERR "%s: failed to create pool\n", __func__);
                return -ENOMEM;
index 0c30dd98672584c2035c6aaba759f2a835de4a6b..8f76a1e474d6c49091b5e51db89a4917e137c6af 100644 (file)
@@ -26,7 +26,7 @@ struct s3c64xx_dma_buff {
        struct s3c64xx_dma_buff *next;
 
        void                    *pw;
-       struct pl080_lli        *lli;
+       struct pl080s_lli       *lli;
        dma_addr_t               lli_dma;
 };
 
index febac1950d8ea658c5ba1321d56a000f01509972..9745852261e03a7c149bbc46b83001607a2a9d7e 100644 (file)
@@ -302,8 +302,8 @@ static int s3c64xx_setrate_clksrc(struct clk *clk, unsigned long rate)
                return -EINVAL;
 
        val = __raw_readl(reg);
-       val &= ~(0xf << sclk->shift);
-       val |= (div - 1) << sclk->shift;
+       val &= ~(0xf << sclk->divider_shift);
+       val |= (div - 1) << sclk->divider_shift;
        __raw_writel(val, reg);
 
        return 0;
@@ -328,6 +328,8 @@ static int s3c64xx_setparent_clksrc(struct clk *clk, struct clk *parent)
                clksrc |= src_nr << sclk->shift;
 
                __raw_writel(clksrc, S3C_CLK_SRC);
+
+               clk->parent = parent;
                return 0;
        }
 
@@ -343,7 +345,7 @@ static unsigned long s3c64xx_roundrate_clksrc(struct clk *clk,
        if (rate > parent_rate)
                rate = parent_rate;
        else {
-               div = rate / parent_rate;
+               div = parent_rate / rate;
 
                if (div == 0)
                        div = 1;