Hi,

thanks for re-spinning!

One more comment inline.

On Wed, Mar 11, 2020 at 02:28:07PM +0530, Harigovindan P wrote:

> diff --git a/drivers/gpu/drm/panel/panel-visionox-rm69299.c 
> b/drivers/gpu/drm/panel/panel-visionox-rm69299.c
> new file mode 100644
> index 000000000000..b226723a7543
> --- /dev/null
> +++ b/drivers/gpu/drm/panel/panel-visionox-rm69299.c
>
> ...
>
> +static int visionox_rm69299_probe(struct mipi_dsi_device *dsi)
> +{
> +     struct device *dev = &dsi->dev;
> +     struct visionox_rm69299 *ctx;
> +     int ret;
> +
> +     ctx = devm_kzalloc(dev, sizeof(*ctx), GFP_KERNEL);
> +     if (!ctx)
> +             return -ENOMEM;
> +
> +     mipi_dsi_set_drvdata(dsi, ctx);
> +
> +     ctx->supplies[0].supply = "vdda";
> +     ctx->supplies[1].supply = "vdd3p3";
> +
> +     ret = devm_regulator_bulk_get(ctx->panel.dev, ARRAY_SIZE(ctx->supplies),
> +                                   ctx->supplies);
> +     if (ret < 0)
> +             return ret;
> +
> +     ctx->reset_gpio = devm_gpiod_get(ctx->panel.dev, "reset", 
> GPIOD_OUT_LOW);
> +     if (IS_ERR(ctx->reset_gpio)) {
> +             DRM_DEV_ERROR(dev, "cannot get reset gpio %ld\n",
> +                     PTR_ERR(ctx->reset_gpio));
> +             return PTR_ERR(ctx->reset_gpio);
> +     }
> +
> +     drm_panel_init(&ctx->panel, dev, &visionox_rm69299_drm_funcs,
> +                    DRM_MODE_CONNECTOR_DSI);
> +     ctx->panel.dev = dev;
> +     ctx->panel.funcs = &visionox_rm69299_drm_funcs;
> +     drm_panel_add(&ctx->panel);
> +
> +     dsi->lanes = 4;
> +     dsi->format = MIPI_DSI_FMT_RGB888;
> +     dsi->mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_LPM |
> +             MIPI_DSI_CLOCK_NON_CONTINUOUS;
> +     ret = mipi_dsi_attach(dsi);
> +     if (ret < 0) {
> +             DRM_DEV_ERROR(dev, "dsi attach failed ret = %d\n", ret);
> +             goto err_dsi_attach;
> +     }
> +
> +     ret = regulator_set_load(ctx->supplies[0].consumer, 32000);
> +     if (ret) {
> +             mipi_dsi_detach(dsi);
> +             goto err_dsi_attach;
> +     }

the common way to do this kind of unwinding in the kernel would be to add
something like this before 'err_dsi_attach':

err_set_load:
        mipi_dsi_detach(dsi);


and then just do 'goto err_set_load' in the error paths.

> +
> +     ret = regulator_set_load(ctx->supplies[1].consumer, 13200);
> +     if (ret) {
> +             mipi_dsi_detach(dsi);
> +             goto err_dsi_attach;
> +     }
> +
> +     return 0;
> +
> +err_dsi_attach:
> +     drm_panel_remove(&ctx->panel);
> +     return ret;
> +}

Reviewed-by: Matthias Kaehlcke <m...@chromium.org>
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to