diff mbox series

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

Message ID 20230123125205.622152-50-hdegoede@redhat.com (mailing list archive)
State New, archived
Headers show
Series media: atomisp: Big power-management changes + lots of fixes | expand

Commit Message

Hans de Goede Jan. 23, 2023, 12:51 p.m. UTC
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(-)

Comments

Andy Shevchenko Jan. 24, 2023, 10:55 a.m. UTC | #1
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@kernel.org>

> 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
>
diff mbox series

Patch

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)