|
|
@@ -811,9 +811,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);
|
|
|
|
|
|
@@ -850,6 +857,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;
|
|
|
}
|
|
|
|
|
|
@@ -992,18 +1004,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;
|
|
|
}
|