Lines Matching refs:pdev
162 int pwc_init_controls(struct pwc_device *pdev) in pwc_init_controls() argument
168 hdl = &pdev->ctrl_handler; in pwc_init_controls()
174 r = pwc_get_u8_ctrl(pdev, GET_LUM_CTL, BRIGHTNESS_FORMATTER, &def); in pwc_init_controls()
177 pdev->brightness = v4l2_ctrl_new_std(hdl, &pwc_ctrl_ops, in pwc_init_controls()
180 r = pwc_get_u8_ctrl(pdev, GET_LUM_CTL, CONTRAST_FORMATTER, &def); in pwc_init_controls()
183 pdev->contrast = v4l2_ctrl_new_std(hdl, &pwc_ctrl_ops, in pwc_init_controls()
186 if (pdev->type >= 675) { in pwc_init_controls()
187 if (pdev->type < 730) in pwc_init_controls()
188 pdev->saturation_fmt = SATURATION_MODE_FORMATTER2; in pwc_init_controls()
190 pdev->saturation_fmt = SATURATION_MODE_FORMATTER1; in pwc_init_controls()
191 r = pwc_get_s8_ctrl(pdev, GET_CHROM_CTL, pdev->saturation_fmt, in pwc_init_controls()
195 pdev->saturation = v4l2_ctrl_new_std(hdl, &pwc_ctrl_ops, in pwc_init_controls()
199 r = pwc_get_u8_ctrl(pdev, GET_LUM_CTL, GAMMA_FORMATTER, &def); in pwc_init_controls()
202 pdev->gamma = v4l2_ctrl_new_std(hdl, &pwc_ctrl_ops, in pwc_init_controls()
206 r = pwc_get_u8_ctrl(pdev, GET_CHROM_CTL, WB_MODE_FORMATTER, &def); in pwc_init_controls()
212 pdev->auto_white_balance = v4l2_ctrl_new_custom(hdl, &cfg, NULL); in pwc_init_controls()
214 if (!pdev->auto_white_balance) in pwc_init_controls()
217 r = pwc_get_u8_ctrl(pdev, GET_CHROM_CTL, in pwc_init_controls()
221 pdev->red_balance = v4l2_ctrl_new_std(hdl, &pwc_ctrl_ops, in pwc_init_controls()
224 r = pwc_get_u8_ctrl(pdev, GET_CHROM_CTL, in pwc_init_controls()
228 pdev->blue_balance = v4l2_ctrl_new_std(hdl, &pwc_ctrl_ops, in pwc_init_controls()
231 v4l2_ctrl_auto_cluster(3, &pdev->auto_white_balance, awb_manual, true); in pwc_init_controls()
234 r = pwc_get_u8_ctrl(pdev, GET_LUM_CTL, AGC_MODE_FORMATTER, &def); in pwc_init_controls()
238 pdev->autogain = v4l2_ctrl_new_std(hdl, &pwc_ctrl_ops, in pwc_init_controls()
240 if (!pdev->autogain) in pwc_init_controls()
243 r = pwc_get_u8_ctrl(pdev, GET_LUM_CTL, PRESET_AGC_FORMATTER, &def); in pwc_init_controls()
246 pdev->gain = v4l2_ctrl_new_std(hdl, &pwc_ctrl_ops, in pwc_init_controls()
250 if (DEVICE_USE_CODEC2(pdev->type)) { in pwc_init_controls()
251 r = pwc_get_u8_ctrl(pdev, GET_LUM_CTL, SHUTTER_MODE_FORMATTER, in pwc_init_controls()
259 pdev->exposure_auto = v4l2_ctrl_new_std_menu(hdl, in pwc_init_controls()
263 if (!pdev->exposure_auto) in pwc_init_controls()
267 r = pwc_get_u16_ctrl(pdev, GET_STATUS_CTL, in pwc_init_controls()
271 pdev->exposure = v4l2_ctrl_new_std(hdl, &pwc_ctrl_ops, in pwc_init_controls()
274 v4l2_ctrl_auto_cluster(2, &pdev->autogain, 0, true); in pwc_init_controls()
275 v4l2_ctrl_auto_cluster(2, &pdev->exposure_auto, in pwc_init_controls()
277 } else if (DEVICE_USE_CODEC3(pdev->type)) { in pwc_init_controls()
279 r = pwc_get_u16_ctrl(pdev, GET_STATUS_CTL, in pwc_init_controls()
283 pdev->exposure = v4l2_ctrl_new_std(hdl, &pwc_ctrl_ops, in pwc_init_controls()
286 pdev->autogain_expo_cluster[0] = pdev->autogain; in pwc_init_controls()
287 pdev->autogain_expo_cluster[1] = pdev->gain; in pwc_init_controls()
288 pdev->autogain_expo_cluster[2] = pdev->exposure; in pwc_init_controls()
289 v4l2_ctrl_auto_cluster(3, pdev->autogain_expo_cluster, in pwc_init_controls()
294 r = pwc_get_u8_ctrl(pdev, GET_CHROM_CTL, COLOUR_MODE_FORMATTER, in pwc_init_controls()
299 pdev->colorfx = v4l2_ctrl_new_std_menu(hdl, &pwc_ctrl_ops, in pwc_init_controls()
303 r = pwc_get_u8_ctrl(pdev, GET_LUM_CTL, AUTO_CONTOUR_FORMATTER, &def); in pwc_init_controls()
308 pdev->autocontour = v4l2_ctrl_new_custom(hdl, &cfg, NULL); in pwc_init_controls()
309 if (!pdev->autocontour) in pwc_init_controls()
312 r = pwc_get_u8_ctrl(pdev, GET_LUM_CTL, PRESET_CONTOUR_FORMATTER, &def); in pwc_init_controls()
317 pdev->contour = v4l2_ctrl_new_custom(hdl, &cfg, NULL); in pwc_init_controls()
319 v4l2_ctrl_auto_cluster(2, &pdev->autocontour, 0, false); in pwc_init_controls()
322 r = pwc_get_u8_ctrl(pdev, GET_LUM_CTL, in pwc_init_controls()
329 pdev->backlight = v4l2_ctrl_new_custom(hdl, &cfg, NULL); in pwc_init_controls()
332 r = pwc_get_u8_ctrl(pdev, GET_LUM_CTL, in pwc_init_controls()
339 pdev->flicker = v4l2_ctrl_new_custom(hdl, &cfg, NULL); in pwc_init_controls()
342 r = pwc_get_u8_ctrl(pdev, GET_LUM_CTL, in pwc_init_controls()
348 pdev->noise_reduction = v4l2_ctrl_new_custom(hdl, &cfg, NULL); in pwc_init_controls()
351 pdev->save_user = v4l2_ctrl_new_custom(hdl, &pwc_save_user_cfg, NULL); in pwc_init_controls()
352 pdev->restore_user = v4l2_ctrl_new_custom(hdl, &pwc_restore_user_cfg, in pwc_init_controls()
354 if (pdev->restore_user) in pwc_init_controls()
355 pdev->restore_user->flags |= V4L2_CTRL_FLAG_UPDATE; in pwc_init_controls()
356 pdev->restore_factory = v4l2_ctrl_new_custom(hdl, in pwc_init_controls()
359 if (pdev->restore_factory) in pwc_init_controls()
360 pdev->restore_factory->flags |= V4L2_CTRL_FLAG_UPDATE; in pwc_init_controls()
363 r = pwc_get_u8_ctrl(pdev, GET_CHROM_CTL, in pwc_init_controls()
369 pdev->awb_speed = v4l2_ctrl_new_custom(hdl, &cfg, NULL); in pwc_init_controls()
371 r = pwc_get_u8_ctrl(pdev, GET_CHROM_CTL, in pwc_init_controls()
377 pdev->awb_delay = v4l2_ctrl_new_custom(hdl, &cfg, NULL); in pwc_init_controls()
379 if (!(pdev->features & FEATURE_MOTOR_PANTILT)) in pwc_init_controls()
383 pdev->motor_pan = v4l2_ctrl_new_std(hdl, &pwc_ctrl_ops, in pwc_init_controls()
385 if (!pdev->motor_pan) in pwc_init_controls()
387 pdev->motor_tilt = v4l2_ctrl_new_std(hdl, &pwc_ctrl_ops, in pwc_init_controls()
389 pdev->motor_pan_reset = v4l2_ctrl_new_std(hdl, &pwc_ctrl_ops, in pwc_init_controls()
391 pdev->motor_tilt_reset = v4l2_ctrl_new_std(hdl, &pwc_ctrl_ops, in pwc_init_controls()
393 v4l2_ctrl_cluster(4, &pdev->motor_pan); in pwc_init_controls()
422 static int pwc_vidioc_try_fmt(struct pwc_device *pdev, struct v4l2_format *f) in pwc_vidioc_try_fmt() argument
435 if (DEVICE_USE_CODEC23(pdev->type)) { in pwc_vidioc_try_fmt()
441 if (DEVICE_USE_CODEC1(pdev->type)) { in pwc_vidioc_try_fmt()
451 size = pwc_get_size(pdev, f->fmt.pix.width, f->fmt.pix.height); in pwc_vidioc_try_fmt()
464 struct pwc_device *pdev = video_drvdata(file); in pwc_s_fmt_vid_cap() local
467 ret = pwc_vidioc_try_fmt(pdev, f); in pwc_s_fmt_vid_cap()
471 if (vb2_is_busy(&pdev->vb_queue)) in pwc_s_fmt_vid_cap()
478 f->fmt.pix.width, f->fmt.pix.height, pdev->vframes, in pwc_s_fmt_vid_cap()
484 ret = pwc_set_video_mode(pdev, f->fmt.pix.width, f->fmt.pix.height, in pwc_s_fmt_vid_cap()
489 pwc_vidioc_fill_fmt(f, pdev->width, pdev->height, pdev->pixfmt); in pwc_s_fmt_vid_cap()
495 struct pwc_device *pdev = video_drvdata(file); in pwc_querycap() local
498 strlcpy(cap->card, pdev->vdev.name, sizeof(cap->card)); in pwc_querycap()
499 usb_make_path(pdev->udev, cap->bus_info, sizeof(cap->bus_info)); in pwc_querycap()
529 struct pwc_device *pdev = in pwc_g_volatile_ctrl() local
535 if (pdev->color_bal_valid && in pwc_g_volatile_ctrl()
536 (pdev->auto_white_balance->val != awb_auto || in pwc_g_volatile_ctrl()
538 pdev->last_color_bal_update + HZ / 4))) { in pwc_g_volatile_ctrl()
539 pdev->red_balance->val = pdev->last_red_balance; in pwc_g_volatile_ctrl()
540 pdev->blue_balance->val = pdev->last_blue_balance; in pwc_g_volatile_ctrl()
543 ret = pwc_get_u8_ctrl(pdev, GET_STATUS_CTL, in pwc_g_volatile_ctrl()
545 &pdev->red_balance->val); in pwc_g_volatile_ctrl()
548 ret = pwc_get_u8_ctrl(pdev, GET_STATUS_CTL, in pwc_g_volatile_ctrl()
550 &pdev->blue_balance->val); in pwc_g_volatile_ctrl()
553 pdev->last_red_balance = pdev->red_balance->val; in pwc_g_volatile_ctrl()
554 pdev->last_blue_balance = pdev->blue_balance->val; in pwc_g_volatile_ctrl()
555 pdev->last_color_bal_update = jiffies; in pwc_g_volatile_ctrl()
556 pdev->color_bal_valid = true; in pwc_g_volatile_ctrl()
559 if (pdev->gain_valid && time_before(jiffies, in pwc_g_volatile_ctrl()
560 pdev->last_gain_update + HZ / 4)) { in pwc_g_volatile_ctrl()
561 pdev->gain->val = pdev->last_gain; in pwc_g_volatile_ctrl()
564 ret = pwc_get_u8_ctrl(pdev, GET_STATUS_CTL, in pwc_g_volatile_ctrl()
565 READ_AGC_FORMATTER, &pdev->gain->val); in pwc_g_volatile_ctrl()
568 pdev->last_gain = pdev->gain->val; in pwc_g_volatile_ctrl()
569 pdev->last_gain_update = jiffies; in pwc_g_volatile_ctrl()
570 pdev->gain_valid = true; in pwc_g_volatile_ctrl()
571 if (!DEVICE_USE_CODEC3(pdev->type)) in pwc_g_volatile_ctrl()
575 if (pdev->exposure_valid && time_before(jiffies, in pwc_g_volatile_ctrl()
576 pdev->last_exposure_update + HZ / 4)) { in pwc_g_volatile_ctrl()
577 pdev->exposure->val = pdev->last_exposure; in pwc_g_volatile_ctrl()
580 ret = pwc_get_u16_ctrl(pdev, GET_STATUS_CTL, in pwc_g_volatile_ctrl()
582 &pdev->exposure->val); in pwc_g_volatile_ctrl()
585 pdev->last_exposure = pdev->exposure->val; in pwc_g_volatile_ctrl()
586 pdev->last_exposure_update = jiffies; in pwc_g_volatile_ctrl()
587 pdev->exposure_valid = true; in pwc_g_volatile_ctrl()
599 static int pwc_set_awb(struct pwc_device *pdev) in pwc_set_awb() argument
603 if (pdev->auto_white_balance->is_new) { in pwc_set_awb()
604 ret = pwc_set_u8_ctrl(pdev, SET_CHROM_CTL, in pwc_set_awb()
606 pdev->auto_white_balance->val); in pwc_set_awb()
610 if (pdev->auto_white_balance->val != awb_manual) in pwc_set_awb()
611 pdev->color_bal_valid = false; /* Force cache update */ in pwc_set_awb()
617 if (pdev->auto_white_balance->val == awb_indoor || in pwc_set_awb()
618 pdev->auto_white_balance->val == awb_outdoor || in pwc_set_awb()
619 pdev->auto_white_balance->val == awb_fl) in pwc_set_awb()
620 pwc_g_volatile_ctrl(pdev->auto_white_balance); in pwc_set_awb()
622 if (pdev->auto_white_balance->val != awb_manual) in pwc_set_awb()
625 if (pdev->red_balance->is_new) { in pwc_set_awb()
626 ret = pwc_set_u8_ctrl(pdev, SET_CHROM_CTL, in pwc_set_awb()
628 pdev->red_balance->val); in pwc_set_awb()
633 if (pdev->blue_balance->is_new) { in pwc_set_awb()
634 ret = pwc_set_u8_ctrl(pdev, SET_CHROM_CTL, in pwc_set_awb()
636 pdev->blue_balance->val); in pwc_set_awb()
644 static int pwc_set_autogain(struct pwc_device *pdev) in pwc_set_autogain() argument
648 if (pdev->autogain->is_new) { in pwc_set_autogain()
649 ret = pwc_set_u8_ctrl(pdev, SET_LUM_CTL, in pwc_set_autogain()
651 pdev->autogain->val ? 0 : 0xff); in pwc_set_autogain()
655 if (pdev->autogain->val) in pwc_set_autogain()
656 pdev->gain_valid = false; /* Force cache update */ in pwc_set_autogain()
659 if (pdev->autogain->val) in pwc_set_autogain()
662 if (pdev->gain->is_new) { in pwc_set_autogain()
663 ret = pwc_set_u8_ctrl(pdev, SET_LUM_CTL, in pwc_set_autogain()
665 pdev->gain->val); in pwc_set_autogain()
673 static int pwc_set_exposure_auto(struct pwc_device *pdev) in pwc_set_exposure_auto() argument
676 int is_auto = pdev->exposure_auto->val == V4L2_EXPOSURE_AUTO; in pwc_set_exposure_auto()
678 if (pdev->exposure_auto->is_new) { in pwc_set_exposure_auto()
679 ret = pwc_set_u8_ctrl(pdev, SET_LUM_CTL, in pwc_set_exposure_auto()
686 pdev->exposure_valid = false; /* Force cache update */ in pwc_set_exposure_auto()
692 if (pdev->exposure->is_new) { in pwc_set_exposure_auto()
693 ret = pwc_set_u16_ctrl(pdev, SET_LUM_CTL, in pwc_set_exposure_auto()
695 pdev->exposure->val); in pwc_set_exposure_auto()
703 static int pwc_set_autogain_expo(struct pwc_device *pdev) in pwc_set_autogain_expo() argument
707 if (pdev->autogain->is_new) { in pwc_set_autogain_expo()
708 ret = pwc_set_u8_ctrl(pdev, SET_LUM_CTL, in pwc_set_autogain_expo()
710 pdev->autogain->val ? 0 : 0xff); in pwc_set_autogain_expo()
714 if (pdev->autogain->val) { in pwc_set_autogain_expo()
715 pdev->gain_valid = false; /* Force cache update */ in pwc_set_autogain_expo()
716 pdev->exposure_valid = false; /* Force cache update */ in pwc_set_autogain_expo()
720 if (pdev->autogain->val) in pwc_set_autogain_expo()
723 if (pdev->gain->is_new) { in pwc_set_autogain_expo()
724 ret = pwc_set_u8_ctrl(pdev, SET_LUM_CTL, in pwc_set_autogain_expo()
726 pdev->gain->val); in pwc_set_autogain_expo()
731 if (pdev->exposure->is_new) { in pwc_set_autogain_expo()
732 ret = pwc_set_u16_ctrl(pdev, SET_LUM_CTL, in pwc_set_autogain_expo()
734 pdev->exposure->val); in pwc_set_autogain_expo()
741 static int pwc_set_motor(struct pwc_device *pdev) in pwc_set_motor() argument
745 pdev->ctrl_buf[0] = 0; in pwc_set_motor()
746 if (pdev->motor_pan_reset->is_new) in pwc_set_motor()
747 pdev->ctrl_buf[0] |= 0x01; in pwc_set_motor()
748 if (pdev->motor_tilt_reset->is_new) in pwc_set_motor()
749 pdev->ctrl_buf[0] |= 0x02; in pwc_set_motor()
750 if (pdev->motor_pan_reset->is_new || pdev->motor_tilt_reset->is_new) { in pwc_set_motor()
751 ret = send_control_msg(pdev, SET_MPT_CTL, in pwc_set_motor()
753 pdev->ctrl_buf, 1); in pwc_set_motor()
758 memset(pdev->ctrl_buf, 0, 4); in pwc_set_motor()
759 if (pdev->motor_pan->is_new) { in pwc_set_motor()
760 pdev->ctrl_buf[0] = pdev->motor_pan->val & 0xFF; in pwc_set_motor()
761 pdev->ctrl_buf[1] = (pdev->motor_pan->val >> 8); in pwc_set_motor()
763 if (pdev->motor_tilt->is_new) { in pwc_set_motor()
764 pdev->ctrl_buf[2] = pdev->motor_tilt->val & 0xFF; in pwc_set_motor()
765 pdev->ctrl_buf[3] = (pdev->motor_tilt->val >> 8); in pwc_set_motor()
767 if (pdev->motor_pan->is_new || pdev->motor_tilt->is_new) { in pwc_set_motor()
768 ret = send_control_msg(pdev, SET_MPT_CTL, in pwc_set_motor()
770 pdev->ctrl_buf, 4); in pwc_set_motor()
780 struct pwc_device *pdev = in pwc_s_ctrl() local
786 ret = pwc_set_u8_ctrl(pdev, SET_LUM_CTL, in pwc_s_ctrl()
790 ret = pwc_set_u8_ctrl(pdev, SET_LUM_CTL, in pwc_s_ctrl()
794 ret = pwc_set_s8_ctrl(pdev, SET_CHROM_CTL, in pwc_s_ctrl()
795 pdev->saturation_fmt, ctrl->val); in pwc_s_ctrl()
798 ret = pwc_set_u8_ctrl(pdev, SET_LUM_CTL, in pwc_s_ctrl()
802 ret = pwc_set_awb(pdev); in pwc_s_ctrl()
805 if (DEVICE_USE_CODEC2(pdev->type)) in pwc_s_ctrl()
806 ret = pwc_set_autogain(pdev); in pwc_s_ctrl()
807 else if (DEVICE_USE_CODEC3(pdev->type)) in pwc_s_ctrl()
808 ret = pwc_set_autogain_expo(pdev); in pwc_s_ctrl()
813 if (DEVICE_USE_CODEC2(pdev->type)) in pwc_s_ctrl()
814 ret = pwc_set_exposure_auto(pdev); in pwc_s_ctrl()
819 ret = pwc_set_u8_ctrl(pdev, SET_CHROM_CTL, in pwc_s_ctrl()
824 if (pdev->autocontour->is_new) { in pwc_s_ctrl()
825 ret = pwc_set_u8_ctrl(pdev, SET_LUM_CTL, in pwc_s_ctrl()
827 pdev->autocontour->val ? 0 : 0xff); in pwc_s_ctrl()
829 if (ret == 0 && pdev->contour->is_new) { in pwc_s_ctrl()
830 ret = pwc_set_u8_ctrl(pdev, SET_LUM_CTL, in pwc_s_ctrl()
832 pdev->contour->val); in pwc_s_ctrl()
836 ret = pwc_set_u8_ctrl(pdev, SET_LUM_CTL, in pwc_s_ctrl()
841 ret = pwc_set_u8_ctrl(pdev, SET_LUM_CTL, in pwc_s_ctrl()
846 ret = pwc_set_u8_ctrl(pdev, SET_LUM_CTL, in pwc_s_ctrl()
851 ret = pwc_button_ctrl(pdev, SAVE_USER_DEFAULTS_FORMATTER); in pwc_s_ctrl()
854 ret = pwc_button_ctrl(pdev, RESTORE_USER_DEFAULTS_FORMATTER); in pwc_s_ctrl()
857 ret = pwc_button_ctrl(pdev, in pwc_s_ctrl()
861 ret = pwc_set_u8_ctrl(pdev, SET_CHROM_CTL, in pwc_s_ctrl()
866 ret = pwc_set_u8_ctrl(pdev, SET_CHROM_CTL, in pwc_s_ctrl()
871 ret = pwc_set_motor(pdev); in pwc_s_ctrl()
885 struct pwc_device *pdev = video_drvdata(file); in pwc_enum_fmt_vid_cap() local
891 f->pixelformat = pdev->type <= 646 ? V4L2_PIX_FMT_PWC1 : V4L2_PIX_FMT_PWC2; in pwc_enum_fmt_vid_cap()
907 struct pwc_device *pdev = video_drvdata(file); in pwc_g_fmt_vid_cap() local
913 pdev->width, pdev->height); in pwc_g_fmt_vid_cap()
914 pwc_vidioc_fill_fmt(f, pdev->width, pdev->height, pdev->pixfmt); in pwc_g_fmt_vid_cap()
920 struct pwc_device *pdev = video_drvdata(file); in pwc_try_fmt_vid_cap() local
922 return pwc_vidioc_try_fmt(pdev, f); in pwc_try_fmt_vid_cap()
928 struct pwc_device *pdev = video_drvdata(file); in pwc_enum_framesizes() local
933 DEVICE_USE_CODEC1(pdev->type)) || in pwc_enum_framesizes()
935 DEVICE_USE_CODEC23(pdev->type))) { in pwc_enum_framesizes()
937 if (!(pdev->image_mask & (1UL << i))) in pwc_enum_framesizes()
953 struct pwc_device *pdev = video_drvdata(file); in pwc_enum_frameintervals() local
969 i = pwc_get_fps(pdev, fival->index, size); in pwc_enum_frameintervals()
983 struct pwc_device *pdev = video_drvdata(file); in pwc_g_parm() local
993 parm->parm.capture.timeperframe.denominator = pdev->vframes; in pwc_g_parm()
1002 struct pwc_device *pdev = video_drvdata(file); in pwc_s_parm() local
1019 if (vb2_is_busy(&pdev->vb_queue)) in pwc_s_parm()
1022 ret = pwc_set_video_mode(pdev, pdev->width, pdev->height, pdev->pixfmt, in pwc_s_parm()