static int solo_disp_s_ctrl(struct file *file, void *priv, struct v4l2_control *ctrl) { struct solo_filehandle *fh = priv; struct solo6010_dev *solo_dev = fh->solo_dev; switch (ctrl->id) { case V4L2_CID_MOTION_TRACE: if (ctrl->value) { solo_reg_write(solo_dev, SOLO_VI_MOTION_BORDER, SOLO_VI_MOTION_Y_ADD | SOLO_VI_MOTION_Y_VALUE(0x20) | SOLO_VI_MOTION_CB_VALUE(0x10) | SOLO_VI_MOTION_CR_VALUE(0x10)); solo_reg_write(solo_dev, SOLO_VI_MOTION_BAR, SOLO_VI_MOTION_CR_ADD | SOLO_VI_MOTION_Y_VALUE(0x10) | SOLO_VI_MOTION_CB_VALUE(0x80) | SOLO_VI_MOTION_CR_VALUE(0x10)); } else { solo_reg_write(solo_dev, SOLO_VI_MOTION_BORDER, 0); solo_reg_write(solo_dev, SOLO_VI_MOTION_BAR, 0); } return 0; } return -EINVAL; }
static int solo_s_ctrl(struct v4l2_ctrl *ctrl) { struct solo_dev *solo_dev = container_of(ctrl->handler, struct solo_dev, disp_hdl); switch (ctrl->id) { case V4L2_CID_MOTION_TRACE: if (ctrl->val) { solo_reg_write(solo_dev, SOLO_VI_MOTION_BORDER, SOLO_VI_MOTION_Y_ADD | SOLO_VI_MOTION_Y_VALUE(0x20) | SOLO_VI_MOTION_CB_VALUE(0x10) | SOLO_VI_MOTION_CR_VALUE(0x10)); solo_reg_write(solo_dev, SOLO_VI_MOTION_BAR, SOLO_VI_MOTION_CR_ADD | SOLO_VI_MOTION_Y_VALUE(0x10) | SOLO_VI_MOTION_CB_VALUE(0x80) | SOLO_VI_MOTION_CR_VALUE(0x10)); } else { solo_reg_write(solo_dev, SOLO_VI_MOTION_BORDER, 0); solo_reg_write(solo_dev, SOLO_VI_MOTION_BAR, 0); } return 0; default: break; } return -EINVAL; }