Re: [PATCH 3/4] media: i2c: imx219: Rectify runtime PM handling in probe and remove

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Reviewed-by: Bingbu Cao <bingbu.cao@xxxxxxxxx>

On 1/16/25 8:41 PM, Sakari Ailus wrote:
> Set the device's runtime PM status and enable runtime PM before
> registering the async sub-device. This is needed to avoid the case where
> the device is runtime PM resumed while runtime PM has not been enabled
> yet.
> 
> Also set the device's runtime PM status to suspended in remove only if it
> wasn't so already.
> 
> Fixes: 1283b3b8f82b ("media: i2c: Add driver for Sony IMX219 sensor")
> Cc: stable@xxxxxxxxxxxxxxx # for >= v6.6
> Signed-off-by: Sakari Ailus <sakari.ailus@xxxxxxxxxxxxxxx>
> ---
>  drivers/media/i2c/imx219.c | 13 ++++++++-----
>  1 file changed, 8 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/media/i2c/imx219.c b/drivers/media/i2c/imx219.c
> index 2d54cea113e1..c6c30109225c 100644
> --- a/drivers/media/i2c/imx219.c
> +++ b/drivers/media/i2c/imx219.c
> @@ -1178,6 +1178,9 @@ static int imx219_probe(struct i2c_client *client)
>  		goto error_media_entity;
>  	}
>  
> +	pm_runtime_set_active(dev);
> +	pm_runtime_enable(dev);
> +
>  	ret = v4l2_async_register_subdev_sensor(&imx219->sd);
>  	if (ret < 0) {
>  		dev_err_probe(dev, ret,
> @@ -1185,15 +1188,14 @@ static int imx219_probe(struct i2c_client *client)
>  		goto error_subdev_cleanup;
>  	}
>  
> -	/* Enable runtime PM and turn off the device */
> -	pm_runtime_set_active(dev);
> -	pm_runtime_enable(dev);
>  	pm_runtime_idle(dev);
>  
>  	return 0;
>  
>  error_subdev_cleanup:
>  	v4l2_subdev_cleanup(&imx219->sd);
> +	pm_runtime_disable(dev);
> +	pm_runtime_set_suspended(dev);
>  
>  error_media_entity:
>  	media_entity_cleanup(&imx219->sd.entity);
> @@ -1218,9 +1220,10 @@ static void imx219_remove(struct i2c_client *client)
>  	imx219_free_controls(imx219);
>  
>  	pm_runtime_disable(&client->dev);
> -	if (!pm_runtime_status_suspended(&client->dev))
> +	if (!pm_runtime_status_suspended(&client->dev)) {
>  		imx219_power_off(&client->dev);
> -	pm_runtime_set_suspended(&client->dev);
> +		pm_runtime_set_suspended(&client->dev);
> +	}
>  }
>  
>  static const struct of_device_id imx219_dt_ids[] = {
> 

-- 
Best regards,
Bingbu Cao




[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux