Revert "rk3368 lcdc: support win mirror and update NO_DUAL mode"
authorHuang, Tao <huangtao@rock-chips.com>
Fri, 12 Dec 2014 06:11:55 +0000 (14:11 +0800)
committerHuang, Tao <huangtao@rock-chips.com>
Fri, 12 Dec 2014 06:11:55 +0000 (14:11 +0800)
This reverts commit fd18d428fa43fba8f42c6be7649cd857263c8c8e.

drivers/video/rockchip/lcdc/rk3368_lcdc.c
drivers/video/rockchip/lcdc/rk3368_lcdc.h
drivers/video/rockchip/rk_fb.c [changed mode: 0644->0755]
include/linux/rk_fb.h [changed mode: 0644->0755]

index ecd1a96f999532bd0a8ab387ebfef661451bda35..2340d65b5f224f8c8d4a688280a8db504e2f98ab 100644 (file)
@@ -40,7 +40,7 @@
 #if defined(CONFIG_HAS_EARLYSUSPEND)
 #include <linux/earlysuspend.h>
 #endif
-/*#define CONFIG_RK_FPGA 1*/
+#define CONFIG_RK_FPGA 1
 
 static int dbg_thresd;
 module_param(dbg_thresd, int, S_IRUGO | S_IWUSR);
@@ -331,7 +331,7 @@ static void lcdc_read_reg_defalut_cfg(struct lcdc_device *lcdc_dev)
 
        spin_lock(&lcdc_dev->reg_lock);
        for (reg = 0; reg < FRC_LOWER11_1; reg += 4) {
-               val = lcdc_readl_backup(lcdc_dev, reg);
+               val = lcdc_readl(lcdc_dev, reg);
                switch (reg) {
                case WIN0_ACT_INFO:
                        win0->area[0].xact = (val & m_WIN0_ACT_WIDTH) + 1;
@@ -1396,6 +1396,7 @@ static int __maybe_unused rk3368_lcdc_mmu_en(struct rk_lcdc_driver *dev_drv)
                if (!lcdc_dev->iommu_status && dev_drv->mmu_dev) {
                        lcdc_dev->iommu_status = 1;
                        rockchip_iovmm_activate(dev_drv->dev);
+                       rk312x_lcdc_mmu_en(dev_drv);
                }
        }
 #endif
@@ -1605,8 +1606,7 @@ static void rk3368_lcdc_bcsh_path_sel(struct rk_lcdc_driver *dev_drv)
                /* bypass  --need check,if bcsh close? */
                if (dev_drv->output_color == COLOR_RGB) {
                        bcsh_ctrl = lcdc_readl(lcdc_dev, BCSH_CTRL);
-                       if (((bcsh_ctrl & m_BCSH_EN) == 1) ||
-                           (dev_drv->bcsh.enable == 1))/*bcsh enabled */
+                       if ((bcsh_ctrl & m_BCSH_EN) == 1)/*bcsh enabled */
                                lcdc_msk_reg(lcdc_dev, BCSH_CTRL,
                                             m_BCSH_R2Y_EN |
                                             m_BCSH_Y2R_EN,
@@ -1888,13 +1888,15 @@ static int rk3368_lcdc_open(struct rk_lcdc_driver *dev_drv, int win_id,
 {
        struct lcdc_device *lcdc_dev =
            container_of(dev_drv, struct lcdc_device, driver);
-#if 0/*ndef CONFIG_RK_FPGA*/
+#ifndef CONFIG_RK_FPGA
        int sys_status =
            (dev_drv->id == 0) ? SYS_STATUS_LCDC0 : SYS_STATUS_LCDC1;
 #endif
        /*enable clk,when first layer open */
        if ((open) && (!lcdc_dev->atv_layer_cnt)) {
-               /*rockchip_set_system_status(sys_status);*/
+#ifndef CONFIG_RK_FPGA
+               rockchip_set_system_status(sys_status);
+#endif
                rk3368_lcdc_pre_init(dev_drv);
                rk3368_lcdc_clk_enable(lcdc_dev);
 #if defined(CONFIG_ROCKCHIP_IOMMU)
@@ -2514,44 +2516,6 @@ static int rk3368_lcdc_cal_scl_fac(struct rk_lcdc_win *win)
        return 0;
 }
 
-static int dsp_x_pos(int mirror_en, struct rk_screen *screen,
-                    struct rk_lcdc_win_area *area)
-{
-       int pos;
-
-       if (screen->x_mirror && mirror_en)
-               pr_err("not support both win and global mirror\n");
-
-       if ((!mirror_en) && (!screen->x_mirror))
-               pos = area->xpos + screen->mode.left_margin +
-                       screen->mode.hsync_len;
-       else
-               pos = screen->mode.xres - area->xpos -
-                       area->xsize + screen->mode.left_margin +
-                       screen->mode.hsync_len;
-
-       return pos;
-}
-
-static int dsp_y_pos(int mirror_en, struct rk_screen *screen,
-                    struct rk_lcdc_win_area *area)
-{
-       int pos;
-
-       if (screen->y_mirror && mirror_en)
-               pr_err("not support both win and global mirror\n");
-
-       if ((!mirror_en) && (!screen->y_mirror))
-               pos = area->ypos + screen->mode.upper_margin +
-                       screen->mode.vsync_len;
-       else
-               pos = screen->mode.yres - area->ypos -
-                       area->ysize + screen->mode.upper_margin +
-                       screen->mode.vsync_len;
-
-       return pos;
-}
-
 static int win_0_1_set_par(struct lcdc_device *lcdc_dev,
                           struct rk_screen *screen, struct rk_lcdc_win *win)
 {
@@ -2559,9 +2523,19 @@ static int win_0_1_set_par(struct lcdc_device *lcdc_dev,
        u8 fmt_cfg = 0, swap_rb;
        char fmt[9] = "NULL";
 
-       xpos = dsp_x_pos(win->mirror_en, screen, &win->area[0]);
-       ypos = dsp_y_pos(win->mirror_en, screen, &win->area[0]);
-
+       if (!win->mirror_en) {
+               xpos = win->area[0].xpos + screen->mode.left_margin +
+                   screen->mode.hsync_len;
+               ypos = win->area[0].ypos + screen->mode.upper_margin +
+                   screen->mode.vsync_len;
+       } else {
+               xpos = screen->mode.xres - win->area[0].xpos -
+                       win->area[0].xsize +
+                       screen->mode.left_margin + screen->mode.hsync_len;
+               ypos = screen->mode.yres - win->area[0].ypos -
+                       win->area[0].ysize + screen->mode.upper_margin +
+                       screen->mode.vsync_len;
+       }
        spin_lock(&lcdc_dev->reg_lock);
        if (likely(lcdc_dev->clk_on)) {
                rk3368_lcdc_cal_scl_fac(win);   /*fac,lb,gt2,gt4 */
@@ -2653,8 +2627,6 @@ static int win_2_3_set_par(struct lcdc_device *lcdc_dev,
        u8 fmt_cfg, swap_rb;
        char fmt[9] = "NULL";
 
-       if (win->mirror_en)
-               pr_err("win[%d] not support y mirror\n", win->id);
        spin_lock(&lcdc_dev->reg_lock);
        if (likely(lcdc_dev->clk_on)) {
                DBG(2, "lcdc[%d]:win[%d]>>\n>\n", lcdc_dev->id, win->id);
@@ -2684,12 +2656,19 @@ static int win_2_3_set_par(struct lcdc_device *lcdc_dev,
                        }
                        win->area[i].fmt_cfg = fmt_cfg;
                        win->area[i].swap_rb = swap_rb;
-                       win->area[i].dsp_stx =
-                                       dsp_x_pos(win->mirror_en, screen,
-                                                 &win->area[i]);
-                       win->area[i].dsp_sty =
-                                       dsp_y_pos(win->mirror_en, screen,
-                                                 &win->area[i]);
+                       win->area[i].dsp_stx = win->area[i].xpos +
+                           screen->mode.left_margin + screen->mode.hsync_len;
+                       if (screen->y_mirror == 1) {
+                               win->area[i].dsp_sty = screen->mode.yres -
+                                   win->area[i].ypos -
+                                   win->area[i].ysize +
+                                   screen->mode.upper_margin +
+                                   screen->mode.vsync_len;
+                       } else {
+                               win->area[i].dsp_sty = win->area[i].ypos +
+                                   screen->mode.upper_margin +
+                                   screen->mode.vsync_len;
+                       }
 
                        DBG(2, "fmt:%s:xsize:%d>>ysize:%d>>xpos:%d>>ypos:%d\n",
                            get_format_string(win->area[i].format, fmt),
@@ -2865,7 +2844,7 @@ static int rk3368_lcdc_early_suspend(struct rk_lcdc_driver *dev_drv)
        flush_kthread_worker(&dev_drv->update_regs_worker);
 
        for (reg = MMU_DTE_ADDR; reg <= MMU_AUTO_GATING; reg += 4)
-               lcdc_readl_backup(lcdc_dev, reg);
+               lcdc_readl(lcdc_dev, reg);
        if (dev_drv->trsm_ops && dev_drv->trsm_ops->disable)
                dev_drv->trsm_ops->disable();
 
@@ -4014,18 +3993,16 @@ static int rk3368_lcdc_open_bcsh(struct rk_lcdc_driver *dev_drv, bool open)
 
        spin_lock(&lcdc_dev->reg_lock);
        if (lcdc_dev->clk_on) {
+               rk3368_lcdc_bcsh_path_sel(dev_drv);
                if (open) {
                        lcdc_writel(lcdc_dev, BCSH_COLOR_BAR, 0x1);
                        lcdc_writel(lcdc_dev, BCSH_BCS, 0xd0010000);
                        lcdc_writel(lcdc_dev, BCSH_H, 0x01000000);
-                       dev_drv->bcsh.enable = 1;
                } else {
                        mask = m_BCSH_EN;
                        val = v_BCSH_EN(0);
                        lcdc_msk_reg(lcdc_dev, BCSH_COLOR_BAR, mask, val);
-                       dev_drv->bcsh.enable = 0;
                }
-               rk3368_lcdc_bcsh_path_sel(dev_drv);
                lcdc_cfg_done(lcdc_dev);
        }
        spin_unlock(&lcdc_dev->reg_lock);
@@ -4067,7 +4044,15 @@ static int rk3368_lcdc_dsp_black(struct rk_lcdc_driver *dev_drv, int enable)
        struct lcdc_device *lcdc_dev =
            container_of(dev_drv, struct lcdc_device, driver);
 
+       rk3368_lcdc_get_backlight_device(dev_drv);
+
        if (enable) {
+               /* close the backlight */
+               if (lcdc_dev->backlight) {
+                       lcdc_dev->backlight->props.power = FB_BLANK_POWERDOWN;
+                       backlight_update_status(lcdc_dev->backlight);
+               }
+#if 1
                spin_lock(&lcdc_dev->reg_lock);
                if (likely(lcdc_dev->clk_on)) {
                        lcdc_msk_reg(lcdc_dev, DSP_CTRL0, m_DSP_BLACK_EN,
@@ -4075,7 +4060,11 @@ static int rk3368_lcdc_dsp_black(struct rk_lcdc_driver *dev_drv, int enable)
                        lcdc_cfg_done(lcdc_dev);
                }
                spin_unlock(&lcdc_dev->reg_lock);
+#endif
+               if (dev_drv->trsm_ops && dev_drv->trsm_ops->disable)
+                       dev_drv->trsm_ops->disable();
        } else {
+#if 1
                spin_lock(&lcdc_dev->reg_lock);
                if (likely(lcdc_dev->clk_on)) {
                        lcdc_msk_reg(lcdc_dev, DSP_CTRL0, m_DSP_BLACK_EN,
@@ -4084,29 +4073,7 @@ static int rk3368_lcdc_dsp_black(struct rk_lcdc_driver *dev_drv, int enable)
                        lcdc_cfg_done(lcdc_dev);
                }
                spin_unlock(&lcdc_dev->reg_lock);
-       }
-
-       return 0;
-}
-
-
-static int rk3368_lcdc_backlight_close(struct rk_lcdc_driver *dev_drv,
-                                      int enable)
-{
-       struct lcdc_device *lcdc_dev =
-           container_of(dev_drv, struct lcdc_device, driver);
-
-       rk3368_lcdc_get_backlight_device(dev_drv);
-
-       if (enable) {
-               /* close the backlight */
-               if (lcdc_dev->backlight) {
-                       lcdc_dev->backlight->props.power = FB_BLANK_POWERDOWN;
-                       backlight_update_status(lcdc_dev->backlight);
-               }
-               if (dev_drv->trsm_ops && dev_drv->trsm_ops->disable)
-                       dev_drv->trsm_ops->disable();
-       } else {
+#endif
                if (dev_drv->trsm_ops && dev_drv->trsm_ops->enable)
                        dev_drv->trsm_ops->enable();
                msleep(100);
@@ -4154,7 +4121,6 @@ static struct rk_lcdc_drv_ops lcdc_drv_ops = {
        .cfg_done = rk3368_lcdc_config_done,
        .set_irq_to_cpu = rk3368_lcdc_set_irq_to_cpu,
        .dsp_black = rk3368_lcdc_dsp_black,
-       .backlight_close = rk3368_lcdc_backlight_close,
        .mmu_en    = rk3368_lcdc_mmu_en,
 };
 
index 8acccacf19d9345a8855fe80be42f9efe6fb5b13..7008cf6c6113eb0bc6e8e343fa890dcc7bfa9eda 100644 (file)
@@ -1794,14 +1794,6 @@ static inline void lcdc_writel(struct lcdc_device *lcdc_dev, u32 offset, u32 v)
 }
 
 static inline u32 lcdc_readl(struct lcdc_device *lcdc_dev, u32 offset)
-{
-       u32 v;
-
-       v = readl_relaxed(lcdc_dev->regs + offset);
-       return v;
-}
-
-static inline u32 lcdc_readl_backup(struct lcdc_device *lcdc_dev, u32 offset)
 {
        u32 v;
        u32 *_pv = (u32 *)lcdc_dev->regsbak;
old mode 100644 (file)
new mode 100755 (executable)
index 2587ab9..cf41a16
@@ -3582,9 +3582,7 @@ int rk_fb_switch_screen(struct rk_screen *screen, int enable, int lcdc_id)
                        dev_drv->ops->dsp_black(dev_drv, 1);
                if (dev_drv->ops->set_screen_scaler)
                        dev_drv->ops->set_screen_scaler(dev_drv, dev_drv->screen0, 0);
-       } else if (rk_fb->disp_mode == NO_DUAL) {
-               if (dev_drv->ops->backlight_close)
-                       dev_drv->ops->backlight_close(dev_drv, 1);
+       } else if ((rk_fb->disp_mode == NO_DUAL) && (enable)) {
                if (dev_drv->ops->dsp_black)
                        dev_drv->ops->dsp_black(dev_drv, 1);
        }
@@ -3613,8 +3611,6 @@ int rk_fb_switch_screen(struct rk_screen *screen, int enable, int lcdc_id)
 
                        if (dev_drv->ops->dsp_black)
                                dev_drv->ops->dsp_black(dev_drv, 0);
-                       if (dev_drv->ops->backlight_close)
-                               dev_drv->ops->backlight_close(dev_drv, 0);
                } else if (rk_fb->num_lcdc > 1) {
                        /* If there is more than one lcdc device, we disable
                           the layer which attached to this device */
@@ -3679,7 +3675,7 @@ int rk_fb_switch_screen(struct rk_screen *screen, int enable, int lcdc_id)
                dev_drv->uboot_logo = 0;
        }
        hdmi_switch_complete = 1;
-       if ((rk_fb->disp_mode == ONE_DUAL) || (rk_fb->disp_mode == NO_DUAL)) {
+       if (rk_fb->disp_mode == ONE_DUAL) {
                if (dev_drv->ops->set_screen_scaler)
                        dev_drv->ops->set_screen_scaler(dev_drv, dev_drv->screen0, 1);
                if (dev_drv->ops->dsp_black)
old mode 100644 (file)
new mode 100755 (executable)
index c4da932..e6331e8
@@ -458,7 +458,6 @@ struct rk_lcdc_drv_ops {
        int (*set_overscan) (struct rk_lcdc_driver *dev_drv,
                             struct overscan *overscan);
        int (*dsp_black) (struct rk_lcdc_driver *dev_drv, int enable);
-       int (*backlight_close)(struct rk_lcdc_driver *dev_drv, int enable);
 };
 
 struct rk_fb_area_par {