summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2017-01-28 08:41:54 -0800
committerGerrit - the friendly Code Review server <code-review@localhost>2017-01-28 08:41:53 -0800
commitdecef4b1880a34fe215f8ef421a2a7c0748240f8 (patch)
tree3a5d7940084e104a3461b914b2e3f5d694a0d1ef
parent597b6c836d9215594698fa00c218960655d00921 (diff)
parentcc9f8d67095dc4ca933f86d638de91172e9b4497 (diff)
Merge "msm: mdss: disable dsi timing db once fps is updated"
-rw-r--r--drivers/video/fbdev/msm/mdss_dsi.c20
-rw-r--r--drivers/video/fbdev/msm/mdss_dsi.h1
-rw-r--r--drivers/video/fbdev/msm/mdss_mdp_intf_video.c7
-rw-r--r--drivers/video/fbdev/msm/mdss_panel.h1
4 files changed, 28 insertions, 1 deletions
diff --git a/drivers/video/fbdev/msm/mdss_dsi.c b/drivers/video/fbdev/msm/mdss_dsi.c
index 19e3eadfc1b2..51745a9a59ac 100644
--- a/drivers/video/fbdev/msm/mdss_dsi.c
+++ b/drivers/video/fbdev/msm/mdss_dsi.c
@@ -2507,6 +2507,23 @@ static struct device_node *mdss_dsi_get_fb_node_cb(struct platform_device *pdev)
return fb_node;
}
+static void mdss_dsi_timing_db_ctrl(struct mdss_dsi_ctrl_pdata *ctrl,
+ int enable)
+{
+ if (!ctrl || !ctrl->timing_db_mode ||
+ (ctrl->shared_data->hw_rev < MDSS_DSI_HW_REV_201))
+ return;
+
+ mdss_dsi_clk_ctrl(ctrl, ctrl->dsi_clk_handle,
+ MDSS_DSI_CORE_CLK, MDSS_DSI_CLK_ON);
+ MIPI_OUTP((ctrl->ctrl_base + 0x1e8), enable);
+ wmb(); /* ensure timing db is disabled */
+ MIPI_OUTP((ctrl->ctrl_base + 0x1e4), enable);
+ wmb(); /* ensure timing flush is disabled */
+ mdss_dsi_clk_ctrl(ctrl, ctrl->dsi_clk_handle,
+ MDSS_DSI_CORE_CLK, MDSS_DSI_CLK_OFF);
+}
+
static int mdss_dsi_event_handler(struct mdss_panel_data *pdata,
int event, void *arg)
{
@@ -2680,6 +2697,9 @@ static int mdss_dsi_event_handler(struct mdss_panel_data *pdata,
&ctrl_pdata->dba_work, HZ);
}
break;
+ case MDSS_EVENT_DSI_TIMING_DB_CTRL:
+ mdss_dsi_timing_db_ctrl(ctrl_pdata, (int)(unsigned long)arg);
+ break;
default:
pr_debug("%s: unhandled event=%d\n", __func__, event);
break;
diff --git a/drivers/video/fbdev/msm/mdss_dsi.h b/drivers/video/fbdev/msm/mdss_dsi.h
index 81d2723d0f2a..df24352ff87d 100644
--- a/drivers/video/fbdev/msm/mdss_dsi.h
+++ b/drivers/video/fbdev/msm/mdss_dsi.h
@@ -58,6 +58,7 @@
#define MDSS_DSI_HW_REV_104_1 0x10040001 /* 8996 */
#define MDSS_DSI_HW_REV_104_2 0x10040002 /* 8937 */
#define MDSS_DSI_HW_REV_200 0x20000000 /* cobalt */
+#define MDSS_DSI_HW_REV_201 0x20010000 /* 660 */
#define MDSS_DSI_HW_REV_STEP_0 0x0
#define MDSS_DSI_HW_REV_STEP_1 0x1
diff --git a/drivers/video/fbdev/msm/mdss_mdp_intf_video.c b/drivers/video/fbdev/msm/mdss_mdp_intf_video.c
index 5d5515a91572..4efa38093557 100644
--- a/drivers/video/fbdev/msm/mdss_mdp_intf_video.c
+++ b/drivers/video/fbdev/msm/mdss_mdp_intf_video.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2012-2016, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2012-2017, The Linux Foundation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
@@ -1521,6 +1521,11 @@ exit_dfps:
pr_err("Error in dfps_wait: %d\n", rc);
}
+ /* Disable interface timing double buffer */
+ rc = mdss_mdp_ctl_intf_event(ctl,
+ MDSS_EVENT_DSI_TIMING_DB_CTRL,
+ (void *) (unsigned long) 0,
+ CTL_INTF_EVENT_FLAG_DEFAULT);
} else {
pr_err("intf %d panel, unknown FPS mode\n",
ctl->intf_num);
diff --git a/drivers/video/fbdev/msm/mdss_panel.h b/drivers/video/fbdev/msm/mdss_panel.h
index e29f9e20c907..39380c63e6c6 100644
--- a/drivers/video/fbdev/msm/mdss_panel.h
+++ b/drivers/video/fbdev/msm/mdss_panel.h
@@ -298,6 +298,7 @@ enum mdss_intf_events {
MDSS_EVENT_DEEP_COLOR,
MDSS_EVENT_DISABLE_PANEL,
MDSS_EVENT_UPDATE_PANEL_PPM,
+ MDSS_EVENT_DSI_TIMING_DB_CTRL,
MDSS_EVENT_MAX,
};