return ret;
 }
 
-enum {
-       DSI_PORT_IN,
-       DSI_PORT_OUT
-};
-
 static int exynos_dsi_parse_dt(struct exynos_dsi *dsi)
 {
        struct device *dev = dsi->dev;
        struct exynos_dsi *dsi = dev_get_drvdata(dev);
        struct drm_encoder *encoder = &dsi->encoder;
        struct drm_device *drm_dev = data;
-       struct device_node *in_bridge_node;
-       struct drm_bridge *in_bridge;
        int ret;
 
        drm_simple_encoder_init(drm_dev, encoder, DRM_MODE_ENCODER_TMDS);
        if (ret < 0)
                return ret;
 
-       in_bridge_node = of_graph_get_remote_node(dev->of_node, DSI_PORT_IN, 0);
-       if (in_bridge_node) {
-               in_bridge = of_drm_find_bridge(in_bridge_node);
-               if (in_bridge)
-                       drm_bridge_attach(encoder, in_bridge, NULL, 0);
-               of_node_put(in_bridge_node);
-       }
-
        return mipi_dsi_host_register(&dsi->dsi_host);
 }
 
 
        struct videomode vm;
        struct drm_encoder *encoder;
        struct drm_bridge bridge;
+       struct drm_bridge *next_bridge;
 
        bool enabled;
 };
 
 static void mic_enable(struct drm_bridge *bridge) { }
 
+static int mic_attach(struct drm_bridge *bridge,
+                     enum drm_bridge_attach_flags flags)
+{
+       struct exynos_mic *mic = bridge->driver_private;
+
+       return drm_bridge_attach(bridge->encoder, mic->next_bridge,
+                                &mic->bridge, flags);
+}
+
 static const struct drm_bridge_funcs mic_bridge_funcs = {
        .disable = mic_disable,
        .post_disable = mic_post_disable,
        .mode_set = mic_mode_set,
        .pre_enable = mic_pre_enable,
        .enable = mic_enable,
+       .attach = mic_attach,
 };
 
 static int exynos_mic_bind(struct device *dev, struct device *master,
 {
        struct device *dev = &pdev->dev;
        struct exynos_mic *mic;
+       struct device_node *remote;
        struct resource res;
        int ret, i;
 
                }
        }
 
+       remote = of_graph_get_remote_node(dev->of_node, 1, 0);
+       mic->next_bridge = of_drm_find_bridge(remote);
+       if (IS_ERR(mic->next_bridge)) {
+               DRM_DEV_ERROR(dev, "mic: Failed to find next bridge\n");
+               ret = PTR_ERR(mic->next_bridge);
+               goto err;
+       }
+
+       of_node_put(remote);
+
        platform_set_drvdata(pdev, mic);
 
        mic->bridge.funcs = &mic_bridge_funcs;