drm/msm: dsi-staging: Trigger drm notifier

Change-Id: I225b36292f96eafb0703e3f0701f924f20b186d5
Signed-off-by: Richard Raya <rdxzv.dev@gmail.com>
This commit is contained in:
Demon000 2020-06-08 17:18:11 +02:00 committed by Richard Raya
parent 6bf93f236a
commit 5dc122ca75

View File

@ -14,6 +14,8 @@
#define pr_fmt(fmt) "dsi-drm:[%s] " fmt, __func__
#include <linux/msm_drm_notify.h>
#include <drm/drm_atomic_helper.h>
#include <drm/drm_atomic.h>
#include <drm/drm_bridge.h>
@ -180,6 +182,8 @@ static void dsi_bridge_pre_enable(struct drm_bridge *bridge)
{
int rc = 0;
struct dsi_bridge *c_bridge = to_dsi_bridge(bridge);
struct msm_drm_notifier notify_data;
int power_mode;
if (!bridge) {
pr_err("Invalid params\n");
@ -193,6 +197,11 @@ static void dsi_bridge_pre_enable(struct drm_bridge *bridge)
atomic_set(&c_bridge->display->panel->esd_recovery_pending, 0);
power_mode = sde_connector_get_lp(c_bridge->display->drm_conn);
notify_data.data = &power_mode;
notify_data.id = MSM_DRM_PRIMARY_DISPLAY;
msm_drm_notifier_call_chain(MSM_DRM_EARLY_EVENT_BLANK, &notify_data);
/* By this point mode should have been validated through mode_fixup */
rc = dsi_display_set_mode(c_bridge->display,
&(c_bridge->dsi_mode), 0x0);
@ -241,6 +250,8 @@ static void dsi_bridge_pre_enable(struct drm_bridge *bridge)
}
SDE_ATRACE_END("dsi_display_enable");
msm_drm_notifier_call_chain(MSM_DRM_EVENT_BLANK, &notify_data);
rc = dsi_display_splash_res_cleanup(c_bridge->display);
if (rc)
pr_err("Continuous splash pipeline cleanup failed, rc=%d\n",
@ -358,12 +369,19 @@ static void dsi_bridge_post_disable(struct drm_bridge *bridge)
{
int rc = 0;
struct dsi_bridge *c_bridge = to_dsi_bridge(bridge);
struct msm_drm_notifier notify_data;
int power_mode;
if (!bridge) {
pr_err("Invalid params\n");
return;
}
power_mode = sde_connector_get_lp(c_bridge->display->drm_conn);
notify_data.data = &power_mode;
notify_data.id = MSM_DRM_PRIMARY_DISPLAY;
msm_drm_notifier_call_chain(MSM_DRM_EARLY_EVENT_BLANK, &notify_data);
SDE_ATRACE_BEGIN("dsi_bridge_post_disable");
SDE_ATRACE_BEGIN("dsi_display_disable");
rc = dsi_display_disable(c_bridge->display);
@ -384,6 +402,8 @@ static void dsi_bridge_post_disable(struct drm_bridge *bridge)
}
SDE_ATRACE_END("dsi_bridge_post_disable");
msm_drm_notifier_call_chain(MSM_DRM_EVENT_BLANK, &notify_data);
if (c_bridge->display->is_prim_display)
atomic_set(&prim_panel_is_on, false);
}