aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/drm_of.c
diff options
context:
space:
mode:
authorDaniel Vetter <daniel.vetter@ffwll.ch>2016-03-16 08:11:09 +0100
committerDaniel Vetter <daniel.vetter@ffwll.ch>2016-03-16 11:18:25 +0100
commit31fa684096601d8fe5ea11e1c4d473229fef7c70 (patch)
tree5e355028e1afb00483177796d60252c25ce9823d /drivers/gpu/drm/drm_of.c
parent359d2243117a79599435141fda0047d01ef324e8 (diff)
parent86d65b7e7a0c927d07d18605c276d0f142438ead (diff)
downloadkernel_replicant_linux-31fa684096601d8fe5ea11e1c4d473229fef7c70.tar.gz
kernel_replicant_linux-31fa684096601d8fe5ea11e1c4d473229fef7c70.tar.bz2
kernel_replicant_linux-31fa684096601d8fe5ea11e1c4d473229fef7c70.zip
Merge remote-tracking branch 'airlied/drm-next' into drm-intel-next-queued
Backmerge because: - Maarten needs latest atomic patches from drm-misc. - Lionel needs the color manager core patch from drm-misc. - Ander extracted intel_dpll_mgr.c, we need a backmerge to avoid git losing track of things too often (right now it seems ok due to cherry-picks). - Tvrtko needs a stable baseline to apply some large-scale renaming patches to i915 GEM code. Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
Diffstat (limited to 'drivers/gpu/drm/drm_of.c')
-rw-r--r--drivers/gpu/drm/drm_of.c34
1 files changed, 34 insertions, 0 deletions
diff --git a/drivers/gpu/drm/drm_of.c b/drivers/gpu/drm/drm_of.c
index 493c05c9ce4f..bc98bb94264d 100644
--- a/drivers/gpu/drm/drm_of.c
+++ b/drivers/gpu/drm/drm_of.c
@@ -149,3 +149,37 @@ int drm_of_component_probe(struct device *dev,
return component_master_add_with_match(dev, m_ops, match);
}
EXPORT_SYMBOL(drm_of_component_probe);
+
+/*
+ * drm_of_encoder_active_endpoint - return the active encoder endpoint
+ * @node: device tree node containing encoder input ports
+ * @encoder: drm_encoder
+ *
+ * Given an encoder device node and a drm_encoder with a connected crtc,
+ * parse the encoder endpoint connecting to the crtc port.
+ */
+int drm_of_encoder_active_endpoint(struct device_node *node,
+ struct drm_encoder *encoder,
+ struct of_endpoint *endpoint)
+{
+ struct device_node *ep;
+ struct drm_crtc *crtc = encoder->crtc;
+ struct device_node *port;
+ int ret;
+
+ if (!node || !crtc)
+ return -EINVAL;
+
+ for_each_endpoint_of_node(node, ep) {
+ port = of_graph_get_remote_port(ep);
+ of_node_put(port);
+ if (port == crtc->port) {
+ ret = of_graph_parse_endpoint(ep, endpoint);
+ of_node_put(ep);
+ return ret;
+ }
+ }
+
+ return -EINVAL;
+}
+EXPORT_SYMBOL_GPL(drm_of_encoder_active_endpoint);