Hi Neil, > + > +static int khadas_ts050_panel_probe(struct mipi_dsi_device *dsi) > +{ > + struct khadas_ts050_panel *khadas_ts050; > + int err; > + > + dsi->lanes = 4; > + dsi->format = MIPI_DSI_FMT_RGB888; > + dsi->mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST | > + MIPI_DSI_MODE_LPM | MIPI_DSI_MODE_EOT_PACKET; > + > + khadas_ts050 = devm_kzalloc(&dsi->dev, sizeof(*khadas_ts050), > + GFP_KERNEL); > + if (!khadas_ts050) > + return -ENOMEM; > + > + mipi_dsi_set_drvdata(dsi, khadas_ts050); > + khadas_ts050->link = dsi; > + > + err = khadas_ts050_panel_add(khadas_ts050); > + if (err < 0) > + return err; > + > + return mipi_dsi_attach(dsi); > +} If mipi_dsi_attach() failes then da a drm_panel_remove() like this: ret = mipi_dsi_attach(dsi); if (ret) drm_panel_remove(&khadas_ts050->base); return ret; This is again something several panels gets wrong. With this fixed: Reviewed-by: Sam Ravnborg <sam@xxxxxxxxxxxx> I assume you will fix it while applying. Sam _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel