diff options
author | Daniel Solomon <daniels@nvidia.com> | 2013-10-15 13:30:16 -0700 |
---|---|---|
committer | Jon Mayo <jmayo@nvidia.com> | 2013-10-17 15:28:00 -0700 |
commit | 3525ee1d8c885ddb900a748c2e91be7455cbae45 (patch) | |
tree | c46db3dc0f2c4c6cbb8f353bb39d429abcbc80b0 | |
parent | 29a510f87aaf6e2328f39552cfc0cb212ab6a2f9 (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.c | 7 | ||||
-rw-r--r-- | drivers/video/tegra/dc/sor.c | 10 | ||||
-rw-r--r-- | drivers/video/tegra/dc/sor.h | 2 |
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) { |