drm/fsl-dcu: add support for drm bridge
authorMeng Yi <meng.yi@nxp.com>
Fri, 15 Jul 2016 06:53:38 +0000 (14:53 +0800)
committerStefan Agner <stefan@agner.ch>
Sat, 16 Jul 2016 01:06:28 +0000 (18:06 -0700)
The current output code only supports connection to drm panels.
Add code to support drm bridge, to support connections to
external connectors.

Signed-off-by: Meng Yi <meng.yi@nxp.com>
Signed-off-by: Stefan Agner <stefan@agner.ch>
drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_rgb.c

index 32eff990d1999225e3ca5e75c8d79c0054af7020..26edcc899712d16db8959cbb2a5b01c932431c0b 100644 (file)
@@ -180,16 +180,26 @@ err_cleanup:
 static int fsl_dcu_attach_endpoint(struct fsl_dcu_drm_device *fsl_dev,
                                   const struct of_endpoint *ep)
 {
+       struct drm_bridge *bridge;
        struct device_node *np;
 
        np = of_graph_get_remote_port_parent(ep->local_node);
 
        fsl_dev->connector.panel = of_drm_find_panel(np);
-       of_node_put(np);
-       if (fsl_dev->connector.panel)
+       if (fsl_dev->connector.panel) {
+               of_node_put(np);
                return fsl_dcu_attach_panel(fsl_dev, fsl_dev->connector.panel);
+       }
+
+       bridge = of_drm_find_bridge(np);
+       of_node_put(np);
+       if (!bridge)
+               return -ENODEV;
+
+       fsl_dev->encoder.bridge = bridge;
+       bridge->encoder = &fsl_dev->encoder;
 
-       return -ENODEV;
+       return drm_bridge_attach(fsl_dev->drm, bridge);
 }
 
 int fsl_dcu_create_outputs(struct fsl_dcu_drm_device *fsl_dev)