[PATCH 49/57] media: atomisp: ov2680: Use devm_kzalloc() for sensor data struct

Hans de Goede
2023-01-23T12:55:27Z

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.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
---
.../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