struct omap_dss_device *src;
        int r;
 
-       src = omapdss_of_find_source_for_first_ep(ddata->dev->of_node);
-       if (IS_ERR(src)) {
+       src = omapdss_of_find_connected_device(ddata->dev->of_node, 0);
+       if (IS_ERR_OR_NULL(src)) {
                dev_err(ddata->dev, "failed to find video source\n");
-               return PTR_ERR(src);
+               return src ? PTR_ERR(src) : -EINVAL;
        }
 
        r = omapdss_device_connect(dssdev->dss, src, dssdev);
 
        struct omap_dss_device *src;
        int r;
 
-       src = omapdss_of_find_source_for_first_ep(dssdev->dev->of_node);
-       if (IS_ERR(src)) {
+       src = omapdss_of_find_connected_device(dssdev->dev->of_node, 0);
+       if (IS_ERR_OR_NULL(src)) {
                dev_err(dssdev->dev, "failed to find video source\n");
-               return PTR_ERR(src);
+               return src ? PTR_ERR(src) : -EINVAL;
        }
 
        r = omapdss_device_connect(dssdev->dss, src, dssdev);
 
        struct omap_dss_device *src;
        int r;
 
-       src = omapdss_of_find_source_for_first_ep(ddata->dev->of_node);
-       if (IS_ERR(src)) {
+       src = omapdss_of_find_connected_device(ddata->dev->of_node, 0);
+       if (IS_ERR_OR_NULL(src)) {
                dev_err(ddata->dev, "failed to find video source\n");
-               return PTR_ERR(src);
+               return src ? PTR_ERR(src) : -EINVAL;
        }
 
        r = omapdss_device_connect(dssdev->dss, src, dssdev);
 
        struct omap_dss_device *src;
        int r;
 
-       src = omapdss_of_find_source_for_first_ep(dssdev->dev->of_node);
+       src = omapdss_of_find_connected_device(dssdev->dev->of_node, 0);
        if (IS_ERR(src)) {
                dev_err(dssdev->dev, "failed to find video source\n");
                return PTR_ERR(src);
 
        struct omap_dss_device *src;
        int r;
 
-       src = omapdss_of_find_source_for_first_ep(dssdev->dev->of_node);
+       src = omapdss_of_find_connected_device(dssdev->dev->of_node, 0);
        if (IS_ERR(src)) {
                dev_err(dssdev->dev, "failed to find video source\n");
                return PTR_ERR(src);
 
        struct omap_dss_device *src;
        int r;
 
-       src = omapdss_of_find_source_for_first_ep(dssdev->dev->of_node);
+       src = omapdss_of_find_connected_device(dssdev->dev->of_node, 0);
        if (IS_ERR(src)) {
                dev_err(dssdev->dev, "failed to find video source\n");
                return PTR_ERR(src);
 
        struct omap_dss_device *src;
        int r;
 
-       src = omapdss_of_find_source_for_first_ep(dssdev->dev->of_node);
-       if (IS_ERR(src)) {
+       src = omapdss_of_find_connected_device(dssdev->dev->of_node, 0);
+       if (IS_ERR_OR_NULL(src)) {
                dev_err(dssdev->dev, "failed to find video source\n");
-               return PTR_ERR(src);
+               return src ? PTR_ERR(src) : -EINVAL;
        }
 
        r = omapdss_device_connect(dssdev->dss, src, dssdev);
 
        struct omap_dss_device *src;
        int r;
 
-       src = omapdss_of_find_source_for_first_ep(dssdev->dev->of_node);
-       if (IS_ERR(src)) {
+       src = omapdss_of_find_connected_device(dssdev->dev->of_node, 0);
+       if (IS_ERR_OR_NULL(src)) {
                dev_err(dssdev->dev, "failed to find video source\n");
-               return PTR_ERR(src);
+               return src ? PTR_ERR(src) : -EINVAL;
        }
 
        r = omapdss_device_connect(dssdev->dss, src, dssdev);
 
        struct omap_dss_device *src;
        int r;
 
-       src = omapdss_of_find_source_for_first_ep(dssdev->dev->of_node);
-       if (IS_ERR(src)) {
+       src = omapdss_of_find_connected_device(dssdev->dev->of_node, 0);
+       if (IS_ERR_OR_NULL(src)) {
                dev_err(dssdev->dev, "failed to find video source\n");
-               return PTR_ERR(src);
+               return src ? PTR_ERR(src) : -EINVAL;
        }
 
        r = omapdss_device_connect(dssdev->dss, src, dssdev);
 
        struct omap_dss_device *src;
        int r;
 
-       src = omapdss_of_find_source_for_first_ep(dssdev->dev->of_node);
-       if (IS_ERR(src)) {
+       src = omapdss_of_find_connected_device(dssdev->dev->of_node, 0);
+       if (IS_ERR_OR_NULL(src)) {
                dev_err(dssdev->dev, "failed to find video source\n");
-               return PTR_ERR(src);
+               return src ? PTR_ERR(src) : -EINVAL;
        }
 
        r = omapdss_device_connect(dssdev->dss, src, dssdev);
 
        struct omap_dss_device *src;
        int r;
 
-       src = omapdss_of_find_source_for_first_ep(dssdev->dev->of_node);
-       if (IS_ERR(src)) {
+       src = omapdss_of_find_connected_device(dssdev->dev->of_node, 0);
+       if (IS_ERR_OR_NULL(src)) {
                dev_err(dssdev->dev, "failed to find video source\n");
-               return PTR_ERR(src);
+               return src ? PTR_ERR(src) : -EINVAL;
        }
 
        r = omapdss_device_connect(dssdev->dss, src, dssdev);
 
        struct omap_dss_device *src;
        int r;
 
-       src = omapdss_of_find_source_for_first_ep(dssdev->dev->of_node);
-       if (IS_ERR(src)) {
+       src = omapdss_of_find_connected_device(dssdev->dev->of_node, 0);
+       if (IS_ERR_OR_NULL(src)) {
                dev_err(dssdev->dev, "failed to find video source\n");
-               return PTR_ERR(src);
+               return src ? PTR_ERR(src) : -EINVAL;
        }
 
        r = omapdss_device_connect(dssdev->dss, src, dssdev);
 
        struct omap_dss_device *src;
        int r;
 
-       src = omapdss_of_find_source_for_first_ep(dssdev->dev->of_node);
-       if (IS_ERR(src)) {
+       src = omapdss_of_find_connected_device(dssdev->dev->of_node, 0);
+       if (IS_ERR_OR_NULL(src)) {
                dev_err(dssdev->dev, "failed to find video source\n");
-               return PTR_ERR(src);
+               return src ? PTR_ERR(src) : -EINVAL;
        }
 
        r = omapdss_device_connect(dssdev->dss, src, dssdev);
 
        struct omap_dss_device *src;
        int r;
 
-       src = omapdss_of_find_source_for_first_ep(dssdev->dev->of_node);
-       if (IS_ERR(src)) {
+       src = omapdss_of_find_connected_device(dssdev->dev->of_node, 0);
+       if (IS_ERR_OR_NULL(src)) {
                dev_err(dssdev->dev, "failed to find video source\n");
-               return PTR_ERR(src);
+               return src ? PTR_ERR(src) : -EINVAL;
        }
 
        r = omapdss_device_connect(dssdev->dss, src, dssdev);
 
 }
 
 struct omap_dss_device *
-omapdss_of_find_source_for_first_ep(struct device_node *node)
+omapdss_of_find_connected_device(struct device_node *node, unsigned int port)
 {
        struct device_node *src_node;
        struct device_node *src_port;
        u32 port_number = 0;
 
        /* Get the endpoint... */
-       ep = of_graph_get_endpoint_by_regs(node, 0, 0);
+       ep = of_graph_get_endpoint_by_regs(node, port, 0);
        if (!ep)
-               return ERR_PTR(-EINVAL);
+               return NULL;
 
        /* ... and its remote port... */
        src_port = of_graph_get_remote_port(ep);
        of_node_put(ep);
        if (!src_port)
-               return ERR_PTR(-EINVAL);
+               return NULL;
 
        /* ... and the remote port's number and parent... */
        of_property_read_u32(src_port, "reg", &port_number);
        src_node = dss_of_port_get_parent_device(src_port);
        of_node_put(src_port);
        if (!src_node)
-               return NULL;
+               return ERR_PTR(-EINVAL);
 
-       /* ... and finally the source. */
+       /* ... and finally the connected device. */
        src = omapdss_find_device_by_port(src_node, port_number);
        of_node_put(src_node);
 
        return src ? src : ERR_PTR(-EPROBE_DEFER);
 }
-EXPORT_SYMBOL_GPL(omapdss_of_find_source_for_first_ep);
+EXPORT_SYMBOL_GPL(omapdss_of_find_connected_device);
 
 }
 
 struct omap_dss_device *
-omapdss_of_find_source_for_first_ep(struct device_node *node);
+omapdss_of_find_connected_device(struct device_node *node, unsigned int port);
 
 enum dss_writeback_channel {
        DSS_WB_LCD1_MGR =       0,