return ret;
 }
 
+static void sn65dsi83_detach(struct drm_bridge *bridge)
+{
+       struct sn65dsi83 *ctx = bridge_to_sn65dsi83(bridge);
+
+       if (!ctx->dsi)
+               return;
+
+       mipi_dsi_detach(ctx->dsi);
+       mipi_dsi_device_unregister(ctx->dsi);
+       drm_bridge_remove(&ctx->bridge);
+       ctx->dsi = NULL;
+}
+
 static void sn65dsi83_atomic_pre_enable(struct drm_bridge *bridge,
                                        struct drm_bridge_state *old_bridge_state)
 {
 
 static const struct drm_bridge_funcs sn65dsi83_funcs = {
        .attach                 = sn65dsi83_attach,
+       .detach                 = sn65dsi83_detach,
        .atomic_pre_enable      = sn65dsi83_atomic_pre_enable,
        .atomic_enable          = sn65dsi83_atomic_enable,
        .atomic_disable         = sn65dsi83_atomic_disable,
 {
        struct sn65dsi83 *ctx = i2c_get_clientdata(client);
 
-       mipi_dsi_detach(ctx->dsi);
-       mipi_dsi_device_unregister(ctx->dsi);
-       drm_bridge_remove(&ctx->bridge);
        of_node_put(ctx->host_node);
 
        return 0;