فهرست منبع

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

qctecmdr 6 سال پیش
والد
کامیت
6ad46f19c3
5فایلهای تغییر یافته به همراه42 افزوده شده و 64 حذف شده
  1. 10 0
      msm/dsi/dsi_display.c
  2. 9 0
      msm/dsi/dsi_display.h
  3. 21 63
      msm/msm_atomic.c
  4. 1 0
      msm/sde/sde_connector.c
  5. 1 1
      msm/sde/sde_kms.c

+ 10 - 0
msm/dsi/dsi_display.c

@@ -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)
 {

+ 9 - 0
msm/dsi/dsi_display.h

@@ -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

+ 21 - 63
msm/msm_atomic.c

@@ -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,11 +183,12 @@ 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,
-						     &notifier_data);
+			if (connector->panel)
+				drm_panel_notifier_call_chain(connector->panel,
+					DRM_PANEL_EARLY_EVENT_BLANK,
+					&notifier_data);
 		}
 		/*
 		 * Each encoder has at most one connector (since we always steal
@@ -254,8 +208,10 @@ 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,
-						&notifier_data);
+			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,13 +424,13 @@ 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,
-					    &notifier_data);
+			if (connector->panel)
+				drm_panel_notifier_call_chain(connector->panel,
+					DRM_PANEL_EARLY_EVENT_BLANK,
+					&notifier_data);
 		}
 		/*
 		 * Each encoder has at most one connector (since we always steal
@@ -528,8 +484,10 @@ 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,
-					    &notifier_data);
+			if (connector->panel)
+				drm_panel_notifier_call_chain(connector->panel,
+					DRM_PANEL_EVENT_BLANK,
+					&notifier_data);
 		}
 	}
 	SDE_ATRACE_END("msm_enable");

+ 1 - 0
msm/sde/sde_connector.c

@@ -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;

+ 1 - 1
msm/sde/sde_kms.c

@@ -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,