Merge "disp: msm: Use the new notifier function instead of msm_drm_notifier"

This commit is contained in:
qctecmdr
2019-07-26 17:45:18 -07:00
committed by Gerrit - the friendly Code Review server
5 changed files with 42 additions and 64 deletions

View File

@@ -5540,6 +5540,16 @@ static struct mipi_dsi_host_ops dsi_host_ext_ops = {
.transfer = dsi_host_transfer,
};
struct drm_panel *dsi_display_get_drm_panel(struct dsi_display * display)
{
if (!display || !display->panel) {
pr_err("invalid param(s)\n");
return NULL;
}
return &display->panel->drm_panel;
}
int dsi_display_drm_ext_bridge_init(struct dsi_display *display,
struct drm_encoder *encoder, struct drm_connector *connector)
{

View File

@@ -585,6 +585,15 @@ int dsi_display_set_tpg_state(struct dsi_display *display, bool enable);
int dsi_display_clock_gate(struct dsi_display *display, bool enable);
int dsi_dispaly_static_frame(struct dsi_display *display, bool enable);
/**
* dsi_display_get_drm_panel() - get drm_panel from display.
* @display: Handle to display.
* Get drm_panel which was inclued in dsi_display's dsi_panel.
*
* Return: drm_panel/NULL.
*/
struct drm_panel *dsi_display_get_drm_panel(struct dsi_display *display);
/**
* dsi_display_enable_event() - enable interrupt based connector event
* @connector: Pointer to drm connector structure

View File

@@ -15,9 +15,7 @@
* You should have received a copy of the GNU General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <linux/msm_drm_notify.h>
#include <linux/notifier.h>
#include <drm/drm_panel.h>
#include "msm_drv.h"
#include "msm_gem.h"
@@ -34,49 +32,6 @@ struct msm_commit {
struct kthread_work commit_work;
};
static BLOCKING_NOTIFIER_HEAD(msm_drm_notifier_list);
/**
* msm_drm_register_client - register a client notifier
* @nb: notifier block to callback on events
*
* This function registers a notifier callback function
* to msm_drm_notifier_list, which would be called when
* received unblank/power down event.
*/
int msm_drm_register_client(struct notifier_block *nb)
{
return blocking_notifier_chain_register(&msm_drm_notifier_list,
nb);
}
EXPORT_SYMBOL(msm_drm_register_client);
/**
* msm_drm_unregister_client - unregister a client notifier
* @nb: notifier block to callback on events
*
* This function unregisters the callback function from
* msm_drm_notifier_list.
*/
int msm_drm_unregister_client(struct notifier_block *nb)
{
return blocking_notifier_chain_unregister(&msm_drm_notifier_list,
nb);
}
EXPORT_SYMBOL(msm_drm_unregister_client);
/**
* msm_drm_notifier_call_chain - notify clients of drm_events
* @val: event MSM_DRM_EARLY_EVENT_BLANK or MSM_DRM_EVENT_BLANK
* @v: notifier data, inculde display id and display blank
* event(unblank or power down).
*/
static int msm_drm_notifier_call_chain(unsigned long val, void *v)
{
return blocking_notifier_call_chain(&msm_drm_notifier_list, val,
v);
}
static inline bool _msm_seamless_for_crtc(struct drm_atomic_state *state,
struct drm_crtc_state *crtc_state, bool enable)
{
@@ -186,7 +141,7 @@ msm_disable_outputs(struct drm_device *dev, struct drm_atomic_state *old_state)
struct drm_connector_state *old_conn_state;
struct drm_crtc *crtc;
struct drm_crtc_state *old_crtc_state;
struct msm_drm_notifier notifier_data;
struct drm_panel_notifier notifier_data;
int i, blank;
SDE_ATRACE_BEGIN("msm_disable");
@@ -195,7 +150,6 @@ msm_disable_outputs(struct drm_device *dev, struct drm_atomic_state *old_state)
const struct drm_encoder_helper_funcs *funcs;
struct drm_encoder *encoder;
struct drm_crtc_state *old_crtc_state;
unsigned int crtc_idx;
/*
* Shut down everything that's in the changeset and currently
@@ -204,7 +158,6 @@ msm_disable_outputs(struct drm_device *dev, struct drm_atomic_state *old_state)
if (!old_conn_state->crtc)
continue;
crtc_idx = drm_crtc_index(old_conn_state->crtc);
old_crtc_state = drm_atomic_get_old_crtc_state(old_state,
old_conn_state->crtc);
@@ -230,10 +183,11 @@ msm_disable_outputs(struct drm_device *dev, struct drm_atomic_state *old_state)
if (connector->state->crtc &&
connector->state->crtc->state->active_changed) {
blank = MSM_DRM_BLANK_POWERDOWN;
blank = DRM_PANEL_BLANK_POWERDOWN;
notifier_data.data = &blank;
notifier_data.id = crtc_idx;
msm_drm_notifier_call_chain(MSM_DRM_EARLY_EVENT_BLANK,
if (connector->panel)
drm_panel_notifier_call_chain(connector->panel,
DRM_PANEL_EARLY_EVENT_BLANK,
&notifier_data);
}
/*
@@ -254,7 +208,9 @@ msm_disable_outputs(struct drm_device *dev, struct drm_atomic_state *old_state)
if (connector->state->crtc &&
connector->state->crtc->state->active_changed) {
DRM_DEBUG_ATOMIC("Notify blank\n");
msm_drm_notifier_call_chain(MSM_DRM_EVENT_BLANK,
if (connector->panel)
drm_panel_notifier_call_chain(connector->panel,
DRM_PANEL_EVENT_BLANK,
&notifier_data);
}
}
@@ -398,7 +354,7 @@ static void msm_atomic_helper_commit_modeset_enables(struct drm_device *dev,
struct drm_crtc_state *new_crtc_state;
struct drm_connector *connector;
struct drm_connector_state *new_conn_state;
struct msm_drm_notifier notifier_data;
struct drm_panel_notifier notifier_data;
struct msm_drm_private *priv = dev->dev_private;
struct msm_kms *kms = priv->kms;
int bridge_enable_count = 0;
@@ -468,12 +424,12 @@ static void msm_atomic_helper_commit_modeset_enables(struct drm_device *dev,
if (splash || (connector->state->crtc &&
connector->state->crtc->state->active_changed)) {
blank = MSM_DRM_BLANK_UNBLANK;
blank = DRM_PANEL_BLANK_UNBLANK;
notifier_data.data = &blank;
notifier_data.id =
connector->state->crtc->index;
DRM_DEBUG_ATOMIC("Notify early unblank\n");
msm_drm_notifier_call_chain(MSM_DRM_EARLY_EVENT_BLANK,
if (connector->panel)
drm_panel_notifier_call_chain(connector->panel,
DRM_PANEL_EARLY_EVENT_BLANK,
&notifier_data);
}
/*
@@ -528,7 +484,9 @@ static void msm_atomic_helper_commit_modeset_enables(struct drm_device *dev,
if (splash || (connector->state->crtc &&
connector->state->crtc->state->active_changed)) {
DRM_DEBUG_ATOMIC("Notify unblank\n");
msm_drm_notifier_call_chain(MSM_DRM_EVENT_BLANK,
if (connector->panel)
drm_panel_notifier_call_chain(connector->panel,
DRM_PANEL_EVENT_BLANK,
&notifier_data);
}
}

View File

@@ -2449,6 +2449,7 @@ struct drm_connector *sde_connector_init(struct drm_device *dev,
spin_lock_init(&c_conn->event_lock);
c_conn->base.panel = panel;
c_conn->connector_type = connector_type;
c_conn->encoder = encoder;
c_conn->display = display;

View File

@@ -1280,7 +1280,7 @@ static int _sde_kms_setup_displays(struct drm_device *dev,
connector = sde_connector_init(dev,
encoder,
0,
dsi_display_get_drm_panel(display),
display,
&dsi_ops,
DRM_CONNECTOR_POLL_HPD,