]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - drivers/video/fb-puv3.c
Merge branch 'next/cleanup2' of git://git.linaro.org/people/arnd/arm-soc
[karo-tx-linux.git] / drivers / video / fb-puv3.c
index dbd2dc4745d101fb683e613bad6452c51dfbbb2e..60a787fa32cfe97ddc8cdbb2999492e4da99144d 100644 (file)
@@ -13,7 +13,6 @@
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/errno.h>
-#include <linux/vmalloc.h>
 #include <linux/platform_device.h>
 #include <linux/clk.h>
 #include <linux/fb.h>
@@ -531,7 +530,7 @@ static int unifb_set_par(struct fb_info *info)
                return -EINVAL;
        }
 
-       writel(PKUNITY_UNIGFX_MMAP_BASE, UDE_FSA);
+       writel(info->fix.smem_start, UDE_FSA);
        writel(info->var.yres, UDE_LS);
        writel(get_line_length(info->var.xres,
                        info->var.bits_per_pixel) >> 3, UDE_PS);
@@ -625,8 +624,8 @@ static int unifb_pan_display(struct fb_var_screeninfo *var,
                    || var->xoffset)
                        return -EINVAL;
        } else {
-               if (var->xoffset + var->xres > info->var.xres_virtual ||
-                   var->yoffset + var->yres > info->var.yres_virtual)
+               if (var->xoffset + info->var.xres > info->var.xres_virtual ||
+                   var->yoffset + info->var.yres > info->var.yres_virtual)
                        return -EINVAL;
        }
        info->var.xoffset = var->xoffset;
@@ -680,13 +679,27 @@ static int unifb_probe(struct platform_device *dev)
        struct fb_info *info;
        u32 unifb_regs[UNIFB_REGS_NUM];
        int retval = -ENOMEM;
-       struct resource *iomem, *mapmem;
+       struct resource *iomem;
+       void *videomemory;
+
+       videomemory = (void *)__get_free_pages(GFP_KERNEL | __GFP_COMP,
+                               get_order(UNIFB_MEMSIZE));
+       if (!videomemory)
+               goto err;
+
+       memset(videomemory, 0, UNIFB_MEMSIZE);
+
+       unifb_fix.smem_start = virt_to_phys(videomemory);
+       unifb_fix.smem_len = UNIFB_MEMSIZE;
+
+       iomem = platform_get_resource(dev, IORESOURCE_MEM, 0);
+       unifb_fix.mmio_start = iomem->start;
 
        info = framebuffer_alloc(sizeof(u32)*256, &dev->dev);
        if (!info)
                goto err;
 
-       info->screen_base = (char __iomem *)KUSER_UNIGFX_BASE;
+       info->screen_base = (char __iomem *)videomemory;
        info->fbops = &unifb_ops;
 
        retval = fb_find_mode(&info->var, info, NULL,
@@ -695,13 +708,6 @@ static int unifb_probe(struct platform_device *dev)
        if (!retval || (retval == 4))
                info->var = unifb_default;
 
-       iomem = platform_get_resource(dev, IORESOURCE_MEM, 0);
-       unifb_fix.mmio_start = iomem->start;
-
-       mapmem = platform_get_resource(dev, IORESOURCE_MEM, 1);
-       unifb_fix.smem_start = mapmem->start;
-       unifb_fix.smem_len = UNIFB_MEMSIZE;
-
        info->fix = unifb_fix;
        info->pseudo_palette = info->par;
        info->par = NULL;