]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
Merge remote-tracking branch 'fbdev/for-next'
authorThierry Reding <treding@nvidia.com>
Thu, 24 Oct 2013 12:36:54 +0000 (14:36 +0200)
committerThierry Reding <treding@nvidia.com>
Thu, 24 Oct 2013 12:36:54 +0000 (14:36 +0200)
1  2 
arch/arm/mach-at91/board-sam9263ek.c
drivers/video/Kconfig
drivers/video/amba-clcd.c
drivers/video/mmp/hw/mmp_ctrl.c
drivers/video/neofb.c
drivers/video/omap2/dss/dispc.c
drivers/video/s3fb.c

index 947e134ac4c3996700a6b075d24ab5afbeb2dc3f,8b4942cbb6d9a62ffdb1f88e9676670817b7a107..2f931915c80c8d2f9a6c9059cf2e6eb07d2093a7
@@@ -27,7 -27,7 +27,7 @@@
  #include <linux/platform_device.h>
  #include <linux/spi/spi.h>
  #include <linux/spi/ads7846.h>
 -#include <linux/i2c/at24.h>
 +#include <linux/platform_data/at24.h>
  #include <linux/fb.h>
  #include <linux/gpio_keys.h>
  #include <linux/input.h>
@@@ -275,13 -275,13 +275,13 @@@ static struct fb_monspecs at91fb_defaul
                                        | ATMEL_LCDC_DISTYPE_TFT \
                                        | ATMEL_LCDC_CLKMOD_ALWAYSACTIVE)
  
- static void at91_lcdc_power_control(int on)
+ static void at91_lcdc_power_control(struct atmel_lcdfb_pdata *pdata, int on)
  {
        at91_set_gpio_value(AT91_PIN_PA30, on);
  }
  
  /* Driver datas */
- static struct atmel_lcdfb_info __initdata ek_lcdc_data = {
+ static struct atmel_lcdfb_pdata __initdata ek_lcdc_data = {
        .lcdcon_is_backlight            = true,
        .default_bpp                    = 16,
        .default_dmacon                 = ATMEL_LCDC_DMAEN,
  };
  
  #else
- static struct atmel_lcdfb_info __initdata ek_lcdc_data;
+ static struct atmel_lcdfb_pdata __initdata ek_lcdc_data;
  #endif
  
  
diff --combined drivers/video/Kconfig
index a312f048656f76f017c2a730836762cadd1e8553,14317b70b4139081c24093638364b29efc86ca4a..4f2e1b35eb385046af6343290aca9870258922c0
@@@ -19,10 -19,10 +19,10 @@@ source "drivers/char/agp/Kconfig
  
  source "drivers/gpu/vga/Kconfig"
  
 -source "drivers/gpu/drm/Kconfig"
 -
  source "drivers/gpu/host1x/Kconfig"
  
 +source "drivers/gpu/drm/Kconfig"
 +
  config VGASTATE
         tristate
         default n
@@@ -996,6 -996,8 +996,8 @@@ config FB_ATME
        select FB_CFB_FILLRECT
        select FB_CFB_COPYAREA
        select FB_CFB_IMAGEBLIT
+       select FB_MODE_HELPERS
+       select VIDEOMODE_HELPERS
        help
          This enables support for the AT91/AT32 LCD Controller.
  
index afe4702a5528a0ea9675cdabfce8ee4243e3799a,0f6c61491f741e23448ac7d6ec9db4a973bccda7..14d6b3793e0a7a22e81ac3e6cbe1a60e5861d2d4
@@@ -10,7 -10,6 +10,7 @@@
   *
   *  ARM PrimeCell PL110 Color LCD Controller
   */
 +#include <linux/dma-mapping.h>
  #include <linux/module.h>
  #include <linux/kernel.h>
  #include <linux/errno.h>
@@@ -545,17 -544,13 +545,17 @@@ static int clcdfb_register(struct clcd_
  
  static int clcdfb_probe(struct amba_device *dev, const struct amba_id *id)
  {
-       struct clcd_board *board = dev->dev.platform_data;
+       struct clcd_board *board = dev_get_platdata(&dev->dev);
        struct clcd_fb *fb;
        int ret;
  
        if (!board)
                return -EINVAL;
  
 +      ret = dma_set_mask_and_coherent(&dev->dev, DMA_BIT_MASK(32));
 +      if (ret)
 +              goto out;
 +
        ret = amba_request_regions(dev, NULL);
        if (ret) {
                printk(KERN_ERR "CLCD: unable to reserve regs region\n");
@@@ -599,8 -594,6 +599,6 @@@ static int clcdfb_remove(struct amba_de
  {
        struct clcd_fb *fb = amba_get_drvdata(dev);
  
-       amba_set_drvdata(dev, NULL);
        clcdfb_disable(fb);
        unregister_framebuffer(&fb->fb);
        if (fb->fb.cmap.len)
index 6ac755270ab46d1a3ef830c89338c0daab519664,ae724aaaad47ca8c803fad6f03cac2916b5ca1f1..8621a9f2bdcc63b96da033e29e69da099a74c19c
@@@ -53,15 -53,14 +53,14 @@@ static irqreturn_t ctrl_handle_irq(int 
                tmp = readl_relaxed(ctrl->reg_base + SPU_IRQ_ISR);
                if (tmp & isr)
                        writel_relaxed(~isr, ctrl->reg_base + SPU_IRQ_ISR);
-       } while ((isr = readl(ctrl->reg_base + SPU_IRQ_ISR)) & imask);
+       } while ((isr = readl_relaxed(ctrl->reg_base + SPU_IRQ_ISR)) & imask);
  
        return IRQ_HANDLED;
  }
  
  static u32 fmt_to_reg(struct mmp_overlay *overlay, int pix_fmt)
  {
-       u32 link_config = path_to_path_plat(overlay->path)->link_config;
-       u32 rbswap, uvswap = 0, yuvswap = 0,
+       u32 rbswap = 0, uvswap = 0, yuvswap = 0,
                csc_en = 0, val = 0,
                vid = overlay_is_vid(overlay);
  
        case PIXFMT_RGB888PACK:
        case PIXFMT_RGB888UNPACK:
        case PIXFMT_RGBA888:
-               rbswap = !(link_config & 0x1);
+               rbswap = 1;
                break;
        case PIXFMT_VYUY:
        case PIXFMT_YVU422P:
        case PIXFMT_YVU420P:
-               rbswap = link_config & 0x1;
                uvswap = 1;
                break;
        case PIXFMT_YUYV:
-               rbswap = link_config & 0x1;
                yuvswap = 1;
                break;
        default:
-               rbswap = link_config & 0x1;
                break;
        }
  
        switch (pix_fmt) {
        case PIXFMT_RGB565:
        case PIXFMT_BGR565:
-               val = 0;
                break;
        case PIXFMT_RGB1555:
        case PIXFMT_BGR1555:
@@@ -147,17 -142,27 +142,27 @@@ static void dmafetch_set_fmt(struct mmp
  static void overlay_set_win(struct mmp_overlay *overlay, struct mmp_win *win)
  {
        struct lcd_regs *regs = path_regs(overlay->path);
-       u32 pitch;
  
        /* assert win supported */
        memcpy(&overlay->win, win, sizeof(struct mmp_win));
  
        mutex_lock(&overlay->access_ok);
-       pitch = win->xsrc * pixfmt_to_stride(win->pix_fmt);
-       writel_relaxed(pitch, &regs->g_pitch);
-       writel_relaxed((win->ysrc << 16) | win->xsrc, &regs->g_size);
-       writel_relaxed((win->ydst << 16) | win->xdst, &regs->g_size_z);
-       writel_relaxed(0, &regs->g_start);
+       if (overlay_is_vid(overlay)) {
+               writel_relaxed(win->pitch[0], &regs->v_pitch_yc);
+               writel_relaxed(win->pitch[2] << 16 |
+                               win->pitch[1], &regs->v_pitch_uv);
+               writel_relaxed((win->ysrc << 16) | win->xsrc, &regs->v_size);
+               writel_relaxed((win->ydst << 16) | win->xdst, &regs->v_size_z);
+               writel_relaxed(win->ypos << 16 | win->xpos, &regs->v_start);
+       } else {
+               writel_relaxed(win->pitch[0], &regs->g_pitch);
+               writel_relaxed((win->ysrc << 16) | win->xsrc, &regs->g_size);
+               writel_relaxed((win->ydst << 16) | win->xdst, &regs->g_size_z);
+               writel_relaxed(win->ypos << 16 | win->xpos, &regs->g_start);
+       }
  
        dmafetch_set_fmt(overlay);
        mutex_unlock(&overlay->access_ok);
@@@ -239,7 -244,13 +244,13 @@@ static int overlay_set_addr(struct mmp_
  
        /* FIXME: assert addr supported */
        memcpy(&overlay->addr, addr, sizeof(struct mmp_addr));
-       writel(addr->phys[0], &regs->g_0);
+       if (overlay_is_vid(overlay)) {
+               writel_relaxed(addr->phys[0], &regs->v_y0);
+               writel_relaxed(addr->phys[1], &regs->v_u0);
+               writel_relaxed(addr->phys[2], &regs->v_v0);
+       } else
+               writel_relaxed(addr->phys[0], &regs->g_0);
  
        return overlay->addr.phys[0];
  }
@@@ -248,7 -259,8 +259,8 @@@ static void path_set_mode(struct mmp_pa
  {
        struct lcd_regs *regs = path_regs(path);
        u32 total_x, total_y, vsync_ctrl, tmp, sclk_src, sclk_div,
-               link_config = path_to_path_plat(path)->link_config;
+               link_config = path_to_path_plat(path)->link_config,
+               dsi_rbswap = path_to_path_plat(path)->link_config;
  
        /* FIXME: assert videomode supported */
        memcpy(&path->mode, mode, sizeof(struct mmp_mode));
        tmp |= CFG_DUMB_ENA(1);
        writel_relaxed(tmp, ctrl_regs(path) + intf_ctrl(path->id));
  
+       /* interface rb_swap setting */
+       tmp = readl_relaxed(ctrl_regs(path) + intf_rbswap_ctrl(path->id)) &
+               (~(CFG_INTFRBSWAP_MASK));
+       tmp |= dsi_rbswap & CFG_INTFRBSWAP_MASK;
+       writel_relaxed(tmp, ctrl_regs(path) + intf_rbswap_ctrl(path->id));
        writel_relaxed((mode->yres << 16) | mode->xres, &regs->screen_active);
        writel_relaxed((mode->left_margin << 16) | mode->right_margin,
                &regs->screen_h_porch);
@@@ -370,20 -388,12 +388,12 @@@ static void path_set_default(struct mmp
         * bus arbiter for faster read if not tv path;
         * 2.enable horizontal smooth filter;
         */
-       if (PATH_PN == path->id) {
-               mask = CFG_GRA_HSMOOTH_MASK | CFG_DMA_HSMOOTH_MASK
-                       | CFG_ARBFAST_ENA(1);
-               tmp = readl_relaxed(ctrl_regs(path) + dma_ctrl(0, path->id));
-               tmp |= mask;
-               writel_relaxed(tmp, ctrl_regs(path) + dma_ctrl(0, path->id));
-       } else if (PATH_TV == path->id) {
-               mask = CFG_GRA_HSMOOTH_MASK | CFG_DMA_HSMOOTH_MASK
-                       | CFG_ARBFAST_ENA(1);
-               tmp = readl_relaxed(ctrl_regs(path) + dma_ctrl(0, path->id));
-               tmp &= ~mask;
-               tmp |= CFG_GRA_HSMOOTH_MASK | CFG_DMA_HSMOOTH_MASK;
-               writel_relaxed(tmp, ctrl_regs(path) + dma_ctrl(0, path->id));
-       }
+       mask = CFG_GRA_HSMOOTH_MASK | CFG_DMA_HSMOOTH_MASK | CFG_ARBFAST_ENA(1);
+       tmp = readl_relaxed(ctrl_regs(path) + dma_ctrl(0, path->id));
+       tmp |= mask;
+       if (PATH_TV == path->id)
+               tmp &= ~CFG_ARBFAST_ENA(1);
+       writel_relaxed(tmp, ctrl_regs(path) + dma_ctrl(0, path->id));
  }
  
  static int path_init(struct mmphw_path_plat *path_plat,
        path_plat->path = path;
        path_plat->path_config = config->path_config;
        path_plat->link_config = config->link_config;
+       path_plat->dsi_rbswap = config->dsi_rbswap;
        path_set_default(path);
  
        kfree(path_info);
@@@ -514,7 -525,7 +525,7 @@@ static int mmphw_probe(struct platform_
        if (IS_ERR(ctrl->clk)) {
                dev_err(ctrl->dev, "unable to get clk %s\n", mi->clk_name);
                ret = -ENOENT;
 -              goto failed_get_clk;
 +              goto failed;
        }
        clk_prepare_enable(ctrl->clk);
  
@@@ -551,8 -562,21 +562,8 @@@ failed_path_init
                path_deinit(path_plat);
        }
  
 -      if (ctrl->clk) {
 -              devm_clk_put(ctrl->dev, ctrl->clk);
 -              clk_disable_unprepare(ctrl->clk);
 -      }
 -failed_get_clk:
 -      devm_free_irq(ctrl->dev, ctrl->irq, ctrl);
 +      clk_disable_unprepare(ctrl->clk);
  failed:
 -      if (ctrl) {
 -              if (ctrl->reg_base)
 -                      devm_iounmap(ctrl->dev, ctrl->reg_base);
 -              devm_release_mem_region(ctrl->dev, res->start,
 -                              resource_size(res));
 -              devm_kfree(ctrl->dev, ctrl);
 -      }
 -
        dev_err(&pdev->dev, "device init failed\n");
  
        return ret;
diff --combined drivers/video/neofb.c
index c172a5281f9e6c9369b0cec236e3bbf2abb875ac,891b0bf841e3b67bf76a33e7a54caf89f6e19002..2a3e5bd17d48f1d4dc66cb71373a5f4c363c0e45
@@@ -2075,7 -2075,6 +2075,7 @@@ static int neofb_probe(struct pci_dev *
        if (!fb_find_mode(&info->var, info, mode_option, NULL, 0,
                        info->monspecs.modedb, 16)) {
                printk(KERN_ERR "neofb: Unable to find usable video mode.\n");
 +              err = -EINVAL;
                goto err_map_video;
        }
  
               info->fix.smem_len >> 10, info->var.xres,
               info->var.yres, h_sync / 1000, h_sync % 1000, v_sync);
  
 -      if (fb_alloc_cmap(&info->cmap, 256, 0) < 0)
 +      err = fb_alloc_cmap(&info->cmap, 256, 0);
 +      if (err < 0)
                goto err_map_video;
  
        err = register_framebuffer(info);
@@@ -2148,12 -2146,6 +2148,6 @@@ static void neofb_remove(struct pci_de
                fb_destroy_modedb(info->monspecs.modedb);
                neo_unmap_mmio(info);
                neo_free_fb_info(info);
-               /*
-                * Ensure that the driver data is no longer
-                * valid.
-                */
-               pci_set_drvdata(dev, NULL);
        }
  }
  
index 477975009eee87e89c34cc773e2d5a8818f918d6,8fbeb299fac391604b0077e325b3f09c234bd290..df4639c4d514c429fd9fb4a838293000a74865e4
@@@ -2352,7 -2352,7 +2352,7 @@@ int dispc_ovl_check(enum omap_plane pla
  {
        enum omap_overlay_caps caps = dss_feat_get_overlay_caps(plane);
        bool five_taps = true;
-       bool fieldmode = 0;
+       bool fieldmode = false;
        u16 in_height = oi->height;
        u16 in_width = oi->width;
        bool ilace = timings->interlace;
        out_height = oi->out_height == 0 ? oi->height : oi->out_height;
  
        if (ilace && oi->height == out_height)
-               fieldmode = 1;
+               fieldmode = true;
  
        if (ilace) {
                if (fieldmode)
@@@ -2396,7 -2396,7 +2396,7 @@@ static int dispc_ovl_setup_common(enum 
                bool mem_to_mem)
  {
        bool five_taps = true;
-       bool fieldmode = 0;
+       bool fieldmode = false;
        int r, cconv = 0;
        unsigned offset0, offset1;
        s32 row_inc;
        out_height = out_height == 0 ? height : out_height;
  
        if (ilace && height == out_height)
-               fieldmode = 1;
+               fieldmode = true;
  
        if (ilace) {
                if (fieldmode)
@@@ -3691,7 -3691,6 +3691,7 @@@ static int __init omap_dispchw_probe(st
        }
  
        pm_runtime_enable(&pdev->dev);
 +      pm_runtime_irq_safe(&pdev->dev);
  
        r = dispc_runtime_get();
        if (r)
diff --combined drivers/video/s3fb.c
index d838ba829459400acc86388cbeda1bab77f57b24,d158d2c0460f517d9a9a8b865bae2dec5f05c24f..fef655d8fca4320eddc5f05cf2c8026f2c989793
@@@ -1336,7 -1336,14 +1336,7 @@@ static int s3_pci_probe(struct pci_dev 
                        (info->var.bits_per_pixel * info->var.xres_virtual);
        if (info->var.yres_virtual < info->var.yres) {
                dev_err(info->device, "virtual vertical size smaller than real\n");
 -              goto err_find_mode;
 -      }
 -
 -      /* maximize virtual vertical size for fast scrolling */
 -      info->var.yres_virtual = info->fix.smem_len * 8 /
 -                      (info->var.bits_per_pixel * info->var.xres_virtual);
 -      if (info->var.yres_virtual < info->var.yres) {
 -              dev_err(info->device, "virtual vertical size smaller than real\n");
 +              rc = -EINVAL;
                goto err_find_mode;
        }
  
@@@ -1424,7 -1431,6 +1424,6 @@@ static void s3_pci_remove(struct pci_de
                pci_release_regions(dev);
  /*            pci_disable_device(dev); */
  
-               pci_set_drvdata(dev, NULL);
                framebuffer_release(info);
        }
  }