mirror of https://gitee.com/openkylin/linux.git
[media] pwc: Read new preset values when changing awb control to a preset
So that events get generated for the new red + blue bal values when switching to a preset. This allows apps to solely rely on events instead of needing to do a query + g_ctrl on all controls when a control with the update flag set is gets set or gets an event. Signed-off-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
parent
c20d78cde3
commit
6807cfcb9d
|
@ -575,18 +575,14 @@ static int pwc_s_input(struct file *file, void *fh, unsigned int i)
|
|||
return i ? -EINVAL : 0;
|
||||
}
|
||||
|
||||
static int pwc_g_volatile_ctrl(struct v4l2_ctrl *ctrl)
|
||||
static int pwc_g_volatile_ctrl_unlocked(struct v4l2_ctrl *ctrl)
|
||||
{
|
||||
struct pwc_device *pdev =
|
||||
container_of(ctrl->handler, struct pwc_device, ctrl_handler);
|
||||
int ret = 0;
|
||||
|
||||
mutex_lock(&pdev->udevlock);
|
||||
|
||||
if (!pdev->udev) {
|
||||
ret = -ENODEV;
|
||||
goto leave;
|
||||
}
|
||||
if (!pdev->udev)
|
||||
return -ENODEV;
|
||||
|
||||
switch (ctrl->id) {
|
||||
case V4L2_CID_AUTO_WHITE_BALANCE:
|
||||
|
@ -651,7 +647,17 @@ static int pwc_g_volatile_ctrl(struct v4l2_ctrl *ctrl)
|
|||
if (ret)
|
||||
PWC_ERROR("g_ctrl %s error %d\n", ctrl->name, ret);
|
||||
|
||||
leave:
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int pwc_g_volatile_ctrl(struct v4l2_ctrl *ctrl)
|
||||
{
|
||||
struct pwc_device *pdev =
|
||||
container_of(ctrl->handler, struct pwc_device, ctrl_handler);
|
||||
int ret;
|
||||
|
||||
mutex_lock(&pdev->udevlock);
|
||||
ret = pwc_g_volatile_ctrl_unlocked(ctrl);
|
||||
mutex_unlock(&pdev->udevlock);
|
||||
return ret;
|
||||
}
|
||||
|
@ -669,6 +675,15 @@ static int pwc_set_awb(struct pwc_device *pdev)
|
|||
|
||||
if (pdev->auto_white_balance->val != awb_manual)
|
||||
pdev->color_bal_valid = false; /* Force cache update */
|
||||
|
||||
/*
|
||||
* If this is a preset, update our red / blue balance values
|
||||
* so that events get generated for the new preset values
|
||||
*/
|
||||
if (pdev->auto_white_balance->val == awb_indoor ||
|
||||
pdev->auto_white_balance->val == awb_outdoor ||
|
||||
pdev->auto_white_balance->val == awb_fl)
|
||||
pwc_g_volatile_ctrl_unlocked(pdev->auto_white_balance);
|
||||
}
|
||||
if (pdev->auto_white_balance->val != awb_manual)
|
||||
return 0;
|
||||
|
|
Loading…
Reference in New Issue