On Mon, Jan 23, 2023 at 01:51:57PM +0100, Hans de Goede wrote: > Use devm_kzalloc() to allocate the sensor data struct. It is always free-ed > as the last step of probe-error-exit or remove, so it can be devm-managed. > > This will make unwinding things easier when support is added to the ov2680 > code to use standard GPIO APIs instead of the custom atomisp_gmin code. > > This also allows dropping the out_free label and use direct return > on errors. > > This may seem like a functional change since the out_free label also > did a v4l2_device_unregister_subdev() but at the 2 changed returns > the device is not registered yet, so that always is a no-op and can > be dropped. Reviewed-by: Andy Shevchenko <andy@xxxxxxxxxx> > Signed-off-by: Hans de Goede <hdegoede@xxxxxxxxxx> > --- > .../staging/media/atomisp/i2c/atomisp-ov2680.c | 16 ++++------------ > 1 file changed, 4 insertions(+), 12 deletions(-) > > diff --git a/drivers/staging/media/atomisp/i2c/atomisp-ov2680.c b/drivers/staging/media/atomisp/i2c/atomisp-ov2680.c > index 5f26508a1e5a..2b4673092b6a 100644 > --- a/drivers/staging/media/atomisp/i2c/atomisp-ov2680.c > +++ b/drivers/staging/media/atomisp/i2c/atomisp-ov2680.c > @@ -780,7 +780,6 @@ static void ov2680_remove(struct i2c_client *client) > media_entity_cleanup(&sensor->sd.entity); > v4l2_ctrl_handler_free(&sensor->ctrls.handler); > pm_runtime_disable(&client->dev); > - kfree(sensor); > } > > static int ov2680_probe(struct i2c_client *client) > @@ -789,7 +788,7 @@ static int ov2680_probe(struct i2c_client *client) > int ret; > void *pdata; > > - sensor = kzalloc(sizeof(*sensor), GFP_KERNEL); > + sensor = devm_kzalloc(&client->dev, sizeof(*sensor), GFP_KERNEL); > if (!sensor) > return -ENOMEM; > > @@ -801,10 +800,8 @@ static int ov2680_probe(struct i2c_client *client) > pdata = gmin_camera_platform_data(&sensor->sd, > ATOMISP_INPUT_FORMAT_RAW_10, > atomisp_bayer_order_bggr); > - if (!pdata) { > - ret = -EINVAL; > - goto out_free; > - } > + if (!pdata) > + return -EINVAL; > > pm_runtime_set_suspended(&client->dev); > pm_runtime_enable(&client->dev); > @@ -813,7 +810,7 @@ static int ov2680_probe(struct i2c_client *client) > > ret = ov2680_s_config(&sensor->sd, client->irq, pdata); > if (ret) > - goto out_free; > + return ret; > > sensor->sd.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE; > sensor->pad.flags = MEDIA_PAD_FL_SOURCE; > @@ -840,11 +837,6 @@ static int ov2680_probe(struct i2c_client *client) > } > > return 0; > -out_free: > - dev_dbg(&client->dev, "+++ out free\n"); > - v4l2_device_unregister_subdev(&sensor->sd); > - kfree(sensor); > - return ret; > } > > static int ov2680_suspend(struct device *dev) > -- > 2.39.0 > -- With Best Regards, Andy Shevchenko