mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-07 19:30:30 +09:00
media: ov6650: Move v4l2_clk_get() to ov6650_video_probe() helper
[ Upstream commit ccdd85d518 ]
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 <jmkrzyszt@gmail.com>
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
81a0b6ff02
commit
3ccd89123b
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user