summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Solomon <daniels@nvidia.com>2013-10-15 13:30:16 -0700
committerJon Mayo <jmayo@nvidia.com>2013-10-17 15:28:00 -0700
commit3525ee1d8c885ddb900a748c2e91be7455cbae45 (patch)
treec46db3dc0f2c4c6cbb8f353bb39d429abcbc80b0
parent29a510f87aaf6e2328f39552cfc0cb212ab6a2f9 (diff)
video: tegra: dp: Update DP MSA on modeset
Update SOR registers from which DP main stream attribute data is derived when a DC modeset has occurred. Change-Id: Ica53d4908eb56cbbce964342986164fc9b8d9543 Signed-off-by: Daniel Solomon <daniels@nvidia.com> Reviewed-on: http://git-master/r/300069 Reviewed-by: Jon Mayo <jmayo@nvidia.com>
-rw-r--r--drivers/video/tegra/dc/dp.c7
-rw-r--r--drivers/video/tegra/dc/sor.c10
-rw-r--r--drivers/video/tegra/dc/sor.h2
3 files changed, 18 insertions, 1 deletions
diff --git a/drivers/video/tegra/dc/dp.c b/drivers/video/tegra/dc/dp.c
index 02afd144d0f5..0c83f03b06ee 100644
--- a/drivers/video/tegra/dc/dp.c
+++ b/drivers/video/tegra/dc/dp.c
@@ -2168,6 +2168,12 @@ static void tegra_dc_dp_resume(struct tegra_dc *dc)
tegra_dc_dp_enable(dc);
}
+static void tegra_dc_dp_modeset_notifier(struct tegra_dc *dc)
+{
+ struct tegra_dc_dp_data *dp = tegra_dc_get_outdata(dc);
+ tegra_dc_sor_modeset_notifier(dp->sor, false);
+}
+
struct tegra_dc_out_ops tegra_dc_dp_ops = {
.init = tegra_dc_dp_init,
.destroy = tegra_dc_dp_destroy,
@@ -2176,6 +2182,7 @@ struct tegra_dc_out_ops tegra_dc_dp_ops = {
.suspend = tegra_dc_dp_suspend,
.resume = tegra_dc_dp_resume,
.setup_clk = tegra_dc_dp_setup_clk,
+ .modeset_notifier = tegra_dc_dp_modeset_notifier,
};
diff --git a/drivers/video/tegra/dc/sor.c b/drivers/video/tegra/dc/sor.c
index b9c4dc12fbda..2b48b3830d13 100644
--- a/drivers/video/tegra/dc/sor.c
+++ b/drivers/video/tegra/dc/sor.c
@@ -692,7 +692,7 @@ static void tegra_dc_sor_config_panel(struct tegra_dc_sor_data *sor,
bool is_lvds)
{
const struct tegra_dc_out_pin *pins = sor->dc->out->out_pins;
- const struct tegra_dc_mode *dc_mode = sor->dc->out->modes;
+ const struct tegra_dc_mode *dc_mode = &sor->dc->mode;
const int head_num = sor->dc->ndev->id;
u32 reg_val = NV_SOR_STATE1_ASY_OWNER_HEAD0 << head_num;
@@ -1219,3 +1219,11 @@ void tegra_dc_sor_set_lane_parm(struct tegra_dc_sor_data *sor,
0xf0, 0x0);
}
+void tegra_dc_sor_modeset_notifier(struct tegra_dc_sor_data *sor,
+ bool is_lvds)
+{
+ tegra_dc_sor_config_panel(sor, is_lvds);
+ tegra_dc_sor_update(sor);
+ tegra_dc_sor_super_update(sor);
+}
+
diff --git a/drivers/video/tegra/dc/sor.h b/drivers/video/tegra/dc/sor.h
index 0db1ce9567d3..9b9716cba285 100644
--- a/drivers/video/tegra/dc/sor.h
+++ b/drivers/video/tegra/dc/sor.h
@@ -126,6 +126,8 @@ void tegra_dc_sor_set_lane_parm(struct tegra_dc_sor_data *sor,
const struct tegra_dc_dp_link_config *cfg);
int tegra_dc_sor_set_power_state(struct tegra_dc_sor_data *sor,
int pu_pd);
+void tegra_dc_sor_modeset_notifier(struct tegra_dc_sor_data *sor,
+ bool is_lvds);
static inline u32 tegra_sor_readl(struct tegra_dc_sor_data *sor, u32 reg)
{