media: atomisp: gc0310: Use devm_kzalloc() for data struct
authorHans de Goede <hdegoede@redhat.com>
Sun, 5 Feb 2023 21:53:25 +0000 (21:53 +0000)
committerMauro Carvalho Chehab <mchehab@kernel.org>
Sat, 15 Apr 2023 09:37:33 +0000 (10:37 +0100)
Use devm_kzalloc() to allocate the 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 gc0310
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 1 changed return
the device is not registered yet, so that always is a no-op and can
be dropped.

Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
drivers/staging/media/atomisp/i2c/atomisp-gc0310.c

index cc1dba4..1e6e536 100644 (file)
@@ -546,7 +546,7 @@ static int gc0310_probe(struct i2c_client *client)
        int ret;
        void *pdata;
 
-       dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+       dev = devm_kzalloc(&client->dev, sizeof(*dev), GFP_KERNEL);
        if (!dev)
                return -ENOMEM;
 
@@ -557,10 +557,8 @@ static int gc0310_probe(struct i2c_client *client)
        pdata = gmin_camera_platform_data(&dev->sd,
                                          ATOMISP_INPUT_FORMAT_RAW_8,
                                          atomisp_bayer_order_grbg);
-       if (!pdata) {
-               ret = -EINVAL;
-               goto out_free;
-       }
+       if (!pdata)
+               return -EINVAL;
 
        pm_runtime_set_suspended(&client->dev);
        pm_runtime_enable(&client->dev);
@@ -594,10 +592,6 @@ static int gc0310_probe(struct i2c_client *client)
                gc0310_remove(client);
 
        return ret;
-out_free:
-       v4l2_device_unregister_subdev(&dev->sd);
-       kfree(dev);
-       return ret;
 }
 
 static int gc0310_suspend(struct device *dev)