dsi->format = MIPI_DSI_FMT_RGB888;
        dsi->lanes = 4;
 
-       return mipi_dsi_attach(dsi);
+       ret = mipi_dsi_attach(dsi);
+       if (ret < 0) {
+               drm_panel_remove(&ctx->panel);
+               return ret;
+       }
+
+       return 0;
 }
 
 static int feiyang_dsi_remove(struct mipi_dsi_device *dsi)
 
        if (ret < 0)
                return ret;
 
-       return mipi_dsi_attach(dsi);
+       ret = mipi_dsi_attach(dsi);
+       if (ret < 0) {
+               jdi_panel_del(jdi);
+               return ret;
+       }
+
+       return 0;
 }
 
 static int jdi_panel_remove(struct mipi_dsi_device *dsi)
 
        if (err < 0)
                return err;
 
-       return mipi_dsi_attach(dsi);
+       err = mipi_dsi_attach(dsi);
+       if (err < 0) {
+               drm_panel_remove(&pinfo->base);
+               return err;
+       }
+
+       return 0;
 }
 
 static int nt36672a_panel_remove(struct mipi_dsi_device *dsi)
 
        if (ret < 0)
                return ret;
 
-       return mipi_dsi_attach(dsi);
+       ret = mipi_dsi_attach(dsi);
+       if (ret < 0) {
+               wuxga_nt_panel_del(wuxga_nt);
+               return ret;
+       }
+
+       return 0;
 }
 
 static int wuxga_nt_panel_remove(struct mipi_dsi_device *dsi)
 
        dsi->format = MIPI_DSI_FMT_RGB888;
        dsi->lanes = 4;
 
-       return mipi_dsi_attach(dsi);
+       ret = mipi_dsi_attach(dsi);
+       if (ret < 0) {
+               drm_panel_remove(&ctx->panel);
+               return ret;
+       }
+
+       return 0;
 }
 
 static int rb070d30_panel_dsi_remove(struct mipi_dsi_device *dsi)
 
        ret = mipi_dsi_attach(dsi);
        if (ret < 0) {
                dev_err(dev, "Failed to attach to DSI host: %d\n", ret);
+               drm_panel_remove(&ctx->panel);
                return ret;
        }
 
 
        ret = mipi_dsi_attach(dsi);
        if (ret < 0) {
                dev_err(dev, "Failed to attach to DSI host: %d\n", ret);
+               drm_panel_remove(&ctx->panel);
                return ret;
        }
 
 
        if (ret < 0)
                return ret;
 
-       return mipi_dsi_attach(dsi);
+       ret = mipi_dsi_attach(dsi);
+       if (ret < 0) {
+               sharp_nt_panel_del(sharp_nt);
+               return ret;
+       }
+
+       return 0;
 }
 
 static int sharp_nt_panel_remove(struct mipi_dsi_device *dsi)