In preparation for adding asynchronous subdevice support to the driver,
don't acquire v4l2_clk from the driver .probe() callback as that may
fail if the clock is provided by a bridge driver which may be not yet
initialized.  Move the v4l2_clk_get() to ov6650_video_probe() helper
which is going to be converted to v4l2_subdev_internal_ops.registered()
callback, executed only when the bridge driver is ready.

Signed-off-by: Janusz Krzysztofik <jmkrzy...@gmail.com>
---
 drivers/media/i2c/ov6650.c | 25 ++++++++++++++-----------
 1 file changed, 14 insertions(+), 11 deletions(-)

diff --git a/drivers/media/i2c/ov6650.c b/drivers/media/i2c/ov6650.c
index f9359b11fa5c..de7d9790f054 100644
--- a/drivers/media/i2c/ov6650.c
+++ b/drivers/media/i2c/ov6650.c
@@ -810,9 +810,16 @@ static int ov6650_video_probe(struct i2c_client *client)
        u8              pidh, pidl, midh, midl;
        int             ret;
 
+       priv->clk = v4l2_clk_get(&client->dev, NULL);
+       if (IS_ERR(priv->clk)) {
+               ret = PTR_ERR(priv->clk);
+               dev_err(&client->dev, "v4l2_clk request err: %d\n", ret);
+               return ret;
+       }
+
        ret = ov6650_s_power(&priv->subdev, 1);
        if (ret < 0)
-               return ret;
+               goto eclkput;
 
        msleep(20);
 
@@ -849,6 +856,11 @@ static int ov6650_video_probe(struct i2c_client *client)
 
 done:
        ov6650_s_power(&priv->subdev, 0);
+       if (!ret)
+               return 0;
+eclkput:
+       v4l2_clk_put(priv->clk);
+
        return ret;
 }
 
@@ -991,18 +1003,9 @@ static int ov6650_probe(struct i2c_client *client,
        priv->code        = MEDIA_BUS_FMT_YUYV8_2X8;
        priv->colorspace  = V4L2_COLORSPACE_JPEG;
 
-       priv->clk = v4l2_clk_get(&client->dev, NULL);
-       if (IS_ERR(priv->clk)) {
-               ret = PTR_ERR(priv->clk);
-               goto eclkget;
-       }
-
        ret = ov6650_video_probe(client);
-       if (ret) {
-               v4l2_clk_put(priv->clk);
-eclkget:
+       if (ret)
                v4l2_ctrl_handler_free(&priv->hdl);
-       }
 
        return ret;
 }
-- 
2.19.2

Reply via email to