struct rb070d30_panel *ctx;
        int ret;
 
-       ctx = devm_kzalloc(&dsi->dev, sizeof(*ctx), GFP_KERNEL);
-       if (!ctx)
-               return -ENOMEM;
+       ctx = devm_drm_panel_alloc(&dsi->dev, struct rb070d30_panel, panel,
+                                  &rb070d30_panel_funcs,
+                                  DRM_MODE_CONNECTOR_DSI);
+       if (IS_ERR(ctx))
+               return PTR_ERR(ctx);
 
        ctx->supply = devm_regulator_get(&dsi->dev, "vcc-lcd");
        if (IS_ERR(ctx->supply))
        mipi_dsi_set_drvdata(dsi, ctx);
        ctx->dsi = dsi;
 
-       drm_panel_init(&ctx->panel, &dsi->dev, &rb070d30_panel_funcs,
-                      DRM_MODE_CONNECTOR_DSI);
-
        ctx->gpios.reset = devm_gpiod_get(&dsi->dev, "reset", GPIOD_OUT_LOW);
        if (IS_ERR(ctx->gpios.reset)) {
                dev_err(&dsi->dev, "Couldn't get our reset GPIO\n");