[RFC PATCH 1/3] drm/panel: Support panel detection

Boris Brezillon boris.brezillon at bootlin.com
Mon Apr 30 14:43:21 UTC 2018


Some panels might be connected through extension boards and might not
be available when the system boots. Extend the panel interface to
support panel detection.

An optional ->detect() hook is added and, if implemented, will be called
every time the panel user wants to know if the panel is connected or
disconnected.

We also add a ->polled field which should encode the type of polling the
DRM core should do (DRM_CONNECTOR_POLL_HPD, DRM_CONNECTOR_POLL_CONNECT
and DRM_CONNECTOR_POLL_DISCONNECT flags).

Signed-off-by: Boris Brezillon <boris.brezillon at bootlin.com>
---
 include/drm/drm_panel.h | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/include/drm/drm_panel.h b/include/drm/drm_panel.h
index 14ac240a1f64..718cc1f746ab 100644
--- a/include/drm/drm_panel.h
+++ b/include/drm/drm_panel.h
@@ -24,6 +24,7 @@
 #ifndef __DRM_PANEL_H__
 #define __DRM_PANEL_H__
 
+#include <drm/drm_connector.h>
 #include <linux/errno.h>
 #include <linux/list.h>
 
@@ -68,6 +69,7 @@ struct display_timing;
  * the panel. This is the job of the .unprepare() function.
  */
 struct drm_panel_funcs {
+	int (*detect)(struct drm_panel *panel);
 	int (*disable)(struct drm_panel *panel);
 	int (*unprepare)(struct drm_panel *panel);
 	int (*prepare)(struct drm_panel *panel);
@@ -90,6 +92,7 @@ struct drm_panel {
 	struct drm_connector *connector;
 	struct device *dev;
 
+	u8 polled;
 	const struct drm_panel_funcs *funcs;
 
 	struct list_head list;
@@ -186,6 +189,15 @@ static inline int drm_panel_get_modes(struct drm_panel *panel)
 	return panel ? -ENOSYS : -EINVAL;
 }
 
+static inline int drm_panel_detect(struct drm_panel *panel)
+{
+	if (panel && panel->funcs && panel->funcs->detect)
+		return panel->funcs->detect(panel);
+
+	/* Consider the panel as connected by default. */
+	return panel ? connector_status_connected : -EINVAL;
+}
+
 void drm_panel_init(struct drm_panel *panel);
 
 int drm_panel_add(struct drm_panel *panel);
-- 
2.14.1



More information about the dri-devel mailing list