mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-14 06:24:53 +08:00
media: st-mipid02: add support of V4L2_CID_LINK_FREQ
Ask device connected on sink pad for link frequency in order to configure CLK_LANE_REG1 (ui_x4). If not available, ask for pixel rate information to compute it. This is needed to deal with compressed format such as JPEG where number of bits per pixel is unknown: computation of link frequency from pixel rate is not possible. Signed-off-by: Hugues Fruchet <hugues.fruchet@st.com> Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
This commit is contained in:
parent
81a409bfd5
commit
6a381d1072
@ -331,6 +331,25 @@ static int mipid02_detect(struct mipid02_dev *bridge)
|
||||
return mipid02_read_reg(bridge, MIPID02_CLK_LANE_WR_REG1, ®);
|
||||
}
|
||||
|
||||
static u32 mipid02_get_link_freq_from_cid_link_freq(struct mipid02_dev *bridge,
|
||||
struct v4l2_subdev *subdev)
|
||||
{
|
||||
struct v4l2_querymenu qm = {.id = V4L2_CID_LINK_FREQ, };
|
||||
struct v4l2_ctrl *ctrl;
|
||||
int ret;
|
||||
|
||||
ctrl = v4l2_ctrl_find(subdev->ctrl_handler, V4L2_CID_LINK_FREQ);
|
||||
if (!ctrl)
|
||||
return 0;
|
||||
qm.index = v4l2_ctrl_g_ctrl(ctrl);
|
||||
|
||||
ret = v4l2_querymenu(subdev->ctrl_handler, &qm);
|
||||
if (ret)
|
||||
return 0;
|
||||
|
||||
return qm.value;
|
||||
}
|
||||
|
||||
static u32 mipid02_get_link_freq_from_cid_pixel_rate(struct mipid02_dev *bridge,
|
||||
struct v4l2_subdev *subdev)
|
||||
{
|
||||
@ -358,10 +377,14 @@ static int mipid02_configure_from_rx_speed(struct mipid02_dev *bridge)
|
||||
struct v4l2_subdev *subdev = bridge->s_subdev;
|
||||
u32 link_freq;
|
||||
|
||||
link_freq = mipid02_get_link_freq_from_cid_pixel_rate(bridge, subdev);
|
||||
link_freq = mipid02_get_link_freq_from_cid_link_freq(bridge, subdev);
|
||||
if (!link_freq) {
|
||||
dev_err(&client->dev, "Failed to detect link frequency");
|
||||
return -EINVAL;
|
||||
link_freq = mipid02_get_link_freq_from_cid_pixel_rate(bridge,
|
||||
subdev);
|
||||
if (!link_freq) {
|
||||
dev_err(&client->dev, "Failed to get link frequency");
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
|
||||
dev_dbg(&client->dev, "detect link_freq = %d Hz", link_freq);
|
||||
|
Loading…
Reference in New Issue
Block a user