media: ov2740: Enable runtime PM before registering the async subdev
authorSakari Ailus <sakari.ailus@linux.intel.com>
Fri, 8 Sep 2023 08:52:12 +0000 (11:52 +0300)
committerHans Verkuil <hverkuil-cisco@xs4all.nl>
Sat, 7 Oct 2023 08:55:48 +0000 (10:55 +0200)
Enable runtime PM before registering the async subdev as the driver UAPI
may become accessible immediately after the registration. Runtime PM needs
to be enabled by that time.

Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
drivers/media/i2c/ov2740.c

index 3a9700fbbe8cb3fb6273102520a0edd93b3b23d5..6d5fb2789dc6a00f4e712ced14b7edf1492e260e 100644 (file)
@@ -1130,6 +1130,12 @@ static int ov2740_probe(struct i2c_client *client)
                goto probe_error_v4l2_ctrl_handler_free;
        }
 
+       /* Set the device's state to active if it's in D0 state. */
+       if (full_power)
+               pm_runtime_set_active(&client->dev);
+       pm_runtime_enable(&client->dev);
+       pm_runtime_idle(&client->dev);
+
        ret = v4l2_async_register_subdev_sensor(&ov2740->sd);
        if (ret < 0) {
                dev_err_probe(dev, ret, "failed to register V4L2 subdev\n");
@@ -1140,16 +1146,12 @@ static int ov2740_probe(struct i2c_client *client)
        if (ret)
                dev_warn(&client->dev, "register nvmem failed, ret %d\n", ret);
 
-       /* Set the device's state to active if it's in D0 state. */
-       if (full_power)
-               pm_runtime_set_active(&client->dev);
-       pm_runtime_enable(&client->dev);
-       pm_runtime_idle(&client->dev);
-
        return 0;
 
 probe_error_media_entity_cleanup:
        media_entity_cleanup(&ov2740->sd.entity);
+       pm_runtime_disable(&client->dev);
+       pm_runtime_set_suspended(&client->dev);
 
 probe_error_v4l2_ctrl_handler_free:
        v4l2_ctrl_handler_free(ov2740->sd.ctrl_handler);