Commit e8979274 authored by Hans Verkuil's avatar Hans Verkuil Committed by Mauro Carvalho Chehab

[media] adv7842: add support to for the content type control

This receiver now supports reading the IT content type of the incoming
video.
Signed-off-by: default avatarHans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@osg.samsung.com>
parent 297a4144
...@@ -1359,6 +1359,19 @@ static int adv7842_s_ctrl(struct v4l2_ctrl *ctrl) ...@@ -1359,6 +1359,19 @@ static int adv7842_s_ctrl(struct v4l2_ctrl *ctrl)
return -EINVAL; return -EINVAL;
} }
static int adv7842_g_volatile_ctrl(struct v4l2_ctrl *ctrl)
{
struct v4l2_subdev *sd = to_sd(ctrl);
if (ctrl->id == V4L2_CID_DV_RX_IT_CONTENT_TYPE) {
ctrl->val = V4L2_DV_IT_CONTENT_TYPE_NO_ITC;
if ((io_read(sd, 0x60) & 1) && (infoframe_read(sd, 0x03) & 0x80))
ctrl->val = (infoframe_read(sd, 0x05) >> 4) & 3;
return 0;
}
return -EINVAL;
}
static inline bool no_power(struct v4l2_subdev *sd) static inline bool no_power(struct v4l2_subdev *sd)
{ {
return io_read(sd, 0x0c) & 0x24; return io_read(sd, 0x0c) & 0x24;
...@@ -3022,6 +3035,7 @@ static int adv7842_subscribe_event(struct v4l2_subdev *sd, ...@@ -3022,6 +3035,7 @@ static int adv7842_subscribe_event(struct v4l2_subdev *sd,
static const struct v4l2_ctrl_ops adv7842_ctrl_ops = { static const struct v4l2_ctrl_ops adv7842_ctrl_ops = {
.s_ctrl = adv7842_s_ctrl, .s_ctrl = adv7842_s_ctrl,
.g_volatile_ctrl = adv7842_g_volatile_ctrl,
}; };
static const struct v4l2_subdev_core_ops adv7842_core_ops = { static const struct v4l2_subdev_core_ops adv7842_core_ops = {
...@@ -3196,6 +3210,7 @@ static int adv7842_probe(struct i2c_client *client, ...@@ -3196,6 +3210,7 @@ static int adv7842_probe(struct i2c_client *client,
V4L2_DV_BT_CEA_640X480P59_94; V4L2_DV_BT_CEA_640X480P59_94;
struct adv7842_platform_data *pdata = client->dev.platform_data; struct adv7842_platform_data *pdata = client->dev.platform_data;
struct v4l2_ctrl_handler *hdl; struct v4l2_ctrl_handler *hdl;
struct v4l2_ctrl *ctrl;
struct v4l2_subdev *sd; struct v4l2_subdev *sd;
u16 rev; u16 rev;
int err; int err;
...@@ -3261,6 +3276,11 @@ static int adv7842_probe(struct i2c_client *client, ...@@ -3261,6 +3276,11 @@ static int adv7842_probe(struct i2c_client *client,
V4L2_CID_SATURATION, 0, 255, 1, 128); V4L2_CID_SATURATION, 0, 255, 1, 128);
v4l2_ctrl_new_std(hdl, &adv7842_ctrl_ops, v4l2_ctrl_new_std(hdl, &adv7842_ctrl_ops,
V4L2_CID_HUE, 0, 128, 1, 0); V4L2_CID_HUE, 0, 128, 1, 0);
ctrl = v4l2_ctrl_new_std_menu(hdl, &adv7842_ctrl_ops,
V4L2_CID_DV_RX_IT_CONTENT_TYPE, V4L2_DV_IT_CONTENT_TYPE_NO_ITC,
0, V4L2_DV_IT_CONTENT_TYPE_NO_ITC);
if (ctrl)
ctrl->flags |= V4L2_CTRL_FLAG_VOLATILE;
/* custom controls */ /* custom controls */
state->detect_tx_5v_ctrl = v4l2_ctrl_new_std(hdl, NULL, state->detect_tx_5v_ctrl = v4l2_ctrl_new_std(hdl, NULL,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment