lkml.org 
[lkml]   [2020]   [Jan]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v4 3/6] ov5670: Support probe whilst the device is in a low power state
    Date
    Tell ACPI device PM code that the driver supports the device being in a
    low power state when the driver's probe function is entered.

    Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
    ---
    drivers/media/i2c/ov5670.c | 23 ++++++++++++++---------
    1 file changed, 14 insertions(+), 9 deletions(-)

    diff --git a/drivers/media/i2c/ov5670.c b/drivers/media/i2c/ov5670.c
    index 041fcbb4eebdf..47c7241de15c2 100644
    --- a/drivers/media/i2c/ov5670.c
    +++ b/drivers/media/i2c/ov5670.c
    @@ -2444,6 +2444,7 @@ static int ov5670_probe(struct i2c_client *client)
    struct ov5670 *ov5670;
    const char *err_msg;
    u32 input_clk = 0;
    + bool low_power;
    int ret;

    device_property_read_u32(&client->dev, "clock-frequency", &input_clk);
    @@ -2460,11 +2461,14 @@ static int ov5670_probe(struct i2c_client *client)
    /* Initialize subdev */
    v4l2_i2c_subdev_init(&ov5670->sd, client, &ov5670_subdev_ops);

    - /* Check module identity */
    - ret = ov5670_identify_module(ov5670);
    - if (ret) {
    - err_msg = "ov5670_identify_module() error";
    - goto error_print;
    + low_power = acpi_dev_state_low_power(&client->dev);
    + if (!low_power) {
    + /* Check module identity */
    + ret = ov5670_identify_module(ov5670);
    + if (ret) {
    + err_msg = "ov5670_identify_module() error";
    + goto error_print;
    + }
    }

    mutex_init(&ov5670->mutex);
    @@ -2501,10 +2505,10 @@ static int ov5670_probe(struct i2c_client *client)
    ov5670->streaming = false;

    /*
    - * Device is already turned on by i2c-core with ACPI domain PM.
    - * Enable runtime PM and turn off the device.
    + * Don't set the device's state to active if it's in a low power state.
    */
    - pm_runtime_set_active(&client->dev);
    + if (!low_power)
    + pm_runtime_set_active(&client->dev);
    pm_runtime_enable(&client->dev);
    pm_runtime_idle(&client->dev);

    @@ -2546,7 +2550,7 @@ static const struct dev_pm_ops ov5670_pm_ops = {

    #ifdef CONFIG_ACPI
    static const struct acpi_device_id ov5670_acpi_ids[] = {
    - {"INT3479"},
    + { "INT3479" },
    { /* sentinel */ }
    };

    @@ -2561,6 +2565,7 @@ static struct i2c_driver ov5670_i2c_driver = {
    },
    .probe_new = ov5670_probe,
    .remove = ov5670_remove,
    + .probe_low_power = true,
    };

    module_i2c_driver(ov5670_i2c_driver);
    --
    2.20.1
    \
     
     \ /
      Last update: 2020-01-21 14:43    [W:4.083 / U:0.204 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site