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)
 {
        return io_read(sd, 0x0c) & 0x24;
 
 static const struct v4l2_ctrl_ops adv7842_ctrl_ops = {
        .s_ctrl = adv7842_s_ctrl,
+       .g_volatile_ctrl = adv7842_g_volatile_ctrl,
 };
 
 static const struct v4l2_subdev_core_ops adv7842_core_ops = {
                V4L2_DV_BT_CEA_640X480P59_94;
        struct adv7842_platform_data *pdata = client->dev.platform_data;
        struct v4l2_ctrl_handler *hdl;
+       struct v4l2_ctrl *ctrl;
        struct v4l2_subdev *sd;
        u16 rev;
        int err;
                          V4L2_CID_SATURATION, 0, 255, 1, 128);
        v4l2_ctrl_new_std(hdl, &adv7842_ctrl_ops,
                          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 */
        state->detect_tx_5v_ctrl = v4l2_ctrl_new_std(hdl, NULL,