gc0308_probe() powers the sensor manually and takes a runtime PM reference with pm_runtime_get_noresume() before enabling runtime PM and autosuspend. The probe error path correctly drops this reference with pm_runtime_put_noidle(), but the successful probe path never releases it. As a result, the runtime PM usage count remains non-zero for the entire lifetime of the bound driver, preventing the sensor from runtime-suspending when idle. Drop the initial runtime PM reference with pm_runtime_put_autosuspend() after the V4L2 subdevice has been successfully registered. This allows the usage count to reach zero and the sensor to enter runtime suspend after the configured autosuspend delay. This issue was found by manual code inspection. Fixes: 3ae52083b533 ("media: i2c: gc0308: new driver") Cc: stable@vger.kernel.org Signed-off-by: Guangshuo Li --- drivers/media/i2c/gc0308.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/media/i2c/gc0308.c b/drivers/media/i2c/gc0308.c index 15900d5414cf..266f737f9c5d 100644 --- a/drivers/media/i2c/gc0308.c +++ b/drivers/media/i2c/gc0308.c @@ -1385,6 +1385,7 @@ static int gc0308_probe(struct i2c_client *client) dev_err_probe(dev, ret, "failed to register v4l subdev\n"); goto fail_rpm; } + pm_runtime_put_autosuspend(dev); return 0; -- 2.43.0