Re: [PATCH 2/3] media: i2c: imx412: Switch to using the sub-device state lock
From: Tarang Raval
Date: Mon Mar 16 2026 - 02:35:10 EST
Hi Elgin,
> Switch to using the sub-device state lock and properly call
> v4l2_subdev_init_finalize() / v4l2_subdev_cleanup() on probe() /
> remove().
>
> Signed-off-by: Elgin Perumbilly <elgin.perumbilly@xxxxxxxxxxxxxxxxx>
> ---
...
> +
> + ret = v4l2_async_register_subdev_sensor(&imx412->sd);
> + if (ret < 0) {
> + dev_err_probe(imx412->dev, ret,
> + "failed to register os05b10 sub-device\n");
Hmm, os05b10?
Please remove os05b10 from the error message.
> + goto error_subdev_cleanup;
> + }
> +
> pm_runtime_idle(imx412->dev);
>
> return 0;
>
> +error_subdev_cleanup:
> + v4l2_subdev_cleanup(&imx412->sd);
> + pm_runtime_disable(imx412->dev);
> + pm_runtime_set_suspended(imx412->dev);
> error_media_entity:
> media_entity_cleanup(&imx412->sd.entity);
> error_handler_free:
> v4l2_ctrl_handler_free(imx412->sd.ctrl_handler);
> error_power_off:
> imx412_power_off(imx412->dev);
> -error_mutex_destroy:
> - mutex_destroy(&imx412->mutex);
>
> return ret;
> }
> @@ -1168,9 +1163,9 @@ static int imx412_probe(struct i2c_client *client)
> static void imx412_remove(struct i2c_client *client)
> {
> struct v4l2_subdev *sd = i2c_get_clientdata(client);
> - struct imx412 *imx412 = to_imx412(sd);
>
> v4l2_async_unregister_subdev(sd);
> + v4l2_subdev_cleanup(sd);
> media_entity_cleanup(&sd->entity);
> v4l2_ctrl_handler_free(sd->ctrl_handler);
>
> @@ -1178,8 +1173,6 @@ static void imx412_remove(struct i2c_client *client)
> if (!pm_runtime_status_suspended(&client->dev))
> imx412_power_off(&client->dev);
> pm_runtime_set_suspended(&client->dev);
> -
> - mutex_destroy(&imx412->mutex);
> }
>
> static const struct dev_pm_ops imx412_pm_ops = {
> --
> 2.34.1
Reviewed-by: Tarang Raval <tarang.raval@xxxxxxxxxxxxxxxxx>
Best Regards,
Tarang