return PTR_ERR(src);
        }
 
-       r = omapdss_device_connect(src, dssdev);
+       r = omapdss_device_connect(dssdev->dss, src, dssdev);
        if (r) {
                omapdss_device_put(src);
                return r;
 
                return PTR_ERR(src);
        }
 
-       r = omapdss_device_connect(src, dssdev);
+       r = omapdss_device_connect(dssdev->dss, src, dssdev);
        if (r) {
                omapdss_device_put(src);
                return r;
 
                return PTR_ERR(src);
        }
 
-       r = omapdss_device_connect(src, dssdev);
+       r = omapdss_device_connect(dssdev->dss, src, dssdev);
        if (r) {
                omapdss_device_put(src);
                return r;
 
                return PTR_ERR(src);
        }
 
-       r = omapdss_device_connect(src, dssdev);
+       r = omapdss_device_connect(dssdev->dss, src, dssdev);
        if (r) {
                omapdss_device_put(src);
                return r;
 
                return PTR_ERR(src);
        }
 
-       r = omapdss_device_connect(src, dssdev);
+       r = omapdss_device_connect(dssdev->dss, src, dssdev);
        if (r) {
                omapdss_device_put(src);
                return r;
 
                return PTR_ERR(src);
        }
 
-       r = omapdss_device_connect(src, dssdev);
+       r = omapdss_device_connect(dssdev->dss, src, dssdev);
        if (r) {
                omapdss_device_put(src);
                return r;
 
                return PTR_ERR(src);
        }
 
-       r = omapdss_device_connect(src, dssdev);
+       r = omapdss_device_connect(dssdev->dss, src, dssdev);
        if (r) {
                omapdss_device_put(src);
                return r;
 
                return PTR_ERR(src);
        }
 
-       r = omapdss_device_connect(src, dssdev);
+       r = omapdss_device_connect(dssdev->dss, src, dssdev);
        if (r) {
                dev_err(dev, "Failed to connect to video source\n");
                goto err_connect;
 
                return PTR_ERR(src);
        }
 
-       r = omapdss_device_connect(src, dssdev);
+       r = omapdss_device_connect(dssdev->dss, src, dssdev);
        if (r) {
                omapdss_device_put(src);
                return r;
 
                return PTR_ERR(src);
        }
 
-       r = omapdss_device_connect(src, dssdev);
+       r = omapdss_device_connect(dssdev->dss, src, dssdev);
        if (r) {
                omapdss_device_put(src);
                return r;
 
                return PTR_ERR(src);
        }
 
-       r = omapdss_device_connect(src, dssdev);
+       r = omapdss_device_connect(dssdev->dss, src, dssdev);
        if (r) {
                omapdss_device_put(src);
                return r;
 
                return PTR_ERR(src);
        }
 
-       r = omapdss_device_connect(src, dssdev);
+       r = omapdss_device_connect(dssdev->dss, src, dssdev);
        if (r) {
                omapdss_device_put(src);
                return r;
 
                return PTR_ERR(src);
        }
 
-       r = omapdss_device_connect(src, dssdev);
+       r = omapdss_device_connect(dssdev->dss, src, dssdev);
        if (r) {
                omapdss_device_put(src);
                return r;
 
                return PTR_ERR(src);
        }
 
-       r = omapdss_device_connect(src, dssdev);
+       r = omapdss_device_connect(dssdev->dss, src, dssdev);
        if (r) {
                omapdss_device_put(src);
                return r;
 
 }
 EXPORT_SYMBOL(omapdss_device_get_next);
 
-int omapdss_device_connect(struct omap_dss_device *src,
+int omapdss_device_connect(struct dss_device *dss,
+                          struct omap_dss_device *src,
                           struct omap_dss_device *dst)
 {
        int ret;
        if (omapdss_device_is_connected(src))
                return -EBUSY;
 
+       src->dss = dss;
+
        if (src->driver)
                ret = src->driver->connect(src);
        else
                ret = src->ops->connect(src, dst);
 
-       if (ret < 0)
+       if (ret < 0) {
+               src->dss = NULL;
                return ret;
+       }
 
        if (dst) {
                dst->src = src;
                src->driver->disconnect(src);
        else
                src->ops->disconnect(src, dst);
+
+       src->dss = NULL;
 }
 EXPORT_SYMBOL_GPL(omapdss_device_disconnect);
 
 
 
        struct module *owner;
 
+       struct dss_device *dss;
        struct omap_dss_device *src;
        struct omap_dss_device *dst;
 
                                                    unsigned int port);
 struct omap_dss_device *omapdss_device_get_next(struct omap_dss_device *from,
                                                bool display_only);
-int omapdss_device_connect(struct omap_dss_device *src,
+int omapdss_device_connect(struct dss_device *dss,
+                          struct omap_dss_device *src,
                           struct omap_dss_device *dst);
 void omapdss_device_disconnect(struct omap_dss_device *src,
                               struct omap_dss_device *dst);
 
                return -EPROBE_DEFER;
 
        for_each_dss_display(dssdev) {
-               r = omapdss_device_connect(dssdev, NULL);
+               r = omapdss_device_connect(priv->dss, dssdev, NULL);
                if (r == -EPROBE_DEFER) {
                        omapdss_device_put(dssdev);
                        goto cleanup;