Lines Matching refs:pdev

150 int pwc_init_controls(struct pwc_device *pdev)
156 hdl = &pdev->ctrl_handler;
162 r = pwc_get_u8_ctrl(pdev, GET_LUM_CTL, BRIGHTNESS_FORMATTER, &def);
165 pdev->brightness = v4l2_ctrl_new_std(hdl, &pwc_ctrl_ops,
168 r = pwc_get_u8_ctrl(pdev, GET_LUM_CTL, CONTRAST_FORMATTER, &def);
171 pdev->contrast = v4l2_ctrl_new_std(hdl, &pwc_ctrl_ops,
174 if (pdev->type >= 675) {
175 if (pdev->type < 730)
176 pdev->saturation_fmt = SATURATION_MODE_FORMATTER2;
178 pdev->saturation_fmt = SATURATION_MODE_FORMATTER1;
179 r = pwc_get_s8_ctrl(pdev, GET_CHROM_CTL, pdev->saturation_fmt,
183 pdev->saturation = v4l2_ctrl_new_std(hdl, &pwc_ctrl_ops,
187 r = pwc_get_u8_ctrl(pdev, GET_LUM_CTL, GAMMA_FORMATTER, &def);
190 pdev->gamma = v4l2_ctrl_new_std(hdl, &pwc_ctrl_ops,
194 r = pwc_get_u8_ctrl(pdev, GET_CHROM_CTL, WB_MODE_FORMATTER, &def);
200 pdev->auto_white_balance = v4l2_ctrl_new_custom(hdl, &cfg, NULL);
202 if (!pdev->auto_white_balance)
205 r = pwc_get_u8_ctrl(pdev, GET_CHROM_CTL,
209 pdev->red_balance = v4l2_ctrl_new_std(hdl, &pwc_ctrl_ops,
212 r = pwc_get_u8_ctrl(pdev, GET_CHROM_CTL,
216 pdev->blue_balance = v4l2_ctrl_new_std(hdl, &pwc_ctrl_ops,
219 v4l2_ctrl_auto_cluster(3, &pdev->auto_white_balance, awb_manual, true);
222 r = pwc_get_u8_ctrl(pdev, GET_LUM_CTL, AGC_MODE_FORMATTER, &def);
226 pdev->autogain = v4l2_ctrl_new_std(hdl, &pwc_ctrl_ops,
228 if (!pdev->autogain)
231 r = pwc_get_u8_ctrl(pdev, GET_LUM_CTL, PRESET_AGC_FORMATTER, &def);
234 pdev->gain = v4l2_ctrl_new_std(hdl, &pwc_ctrl_ops,
238 if (DEVICE_USE_CODEC2(pdev->type)) {
239 r = pwc_get_u8_ctrl(pdev, GET_LUM_CTL, SHUTTER_MODE_FORMATTER,
247 pdev->exposure_auto = v4l2_ctrl_new_std_menu(hdl,
251 if (!pdev->exposure_auto)
255 r = pwc_get_u16_ctrl(pdev, GET_STATUS_CTL,
259 pdev->exposure = v4l2_ctrl_new_std(hdl, &pwc_ctrl_ops,
262 v4l2_ctrl_auto_cluster(2, &pdev->autogain, 0, true);
263 v4l2_ctrl_auto_cluster(2, &pdev->exposure_auto,
265 } else if (DEVICE_USE_CODEC3(pdev->type)) {
267 r = pwc_get_u16_ctrl(pdev, GET_STATUS_CTL,
271 pdev->exposure = v4l2_ctrl_new_std(hdl, &pwc_ctrl_ops,
274 pdev->autogain_expo_cluster[0] = pdev->autogain;
275 pdev->autogain_expo_cluster[1] = pdev->gain;
276 pdev->autogain_expo_cluster[2] = pdev->exposure;
277 v4l2_ctrl_auto_cluster(3, pdev->autogain_expo_cluster,
282 r = pwc_get_u8_ctrl(pdev, GET_CHROM_CTL, COLOUR_MODE_FORMATTER,
287 pdev->colorfx = v4l2_ctrl_new_std_menu(hdl, &pwc_ctrl_ops,
291 r = pwc_get_u8_ctrl(pdev, GET_LUM_CTL, AUTO_CONTOUR_FORMATTER, &def);
296 pdev->autocontour = v4l2_ctrl_new_custom(hdl, &cfg, NULL);
297 if (!pdev->autocontour)
300 r = pwc_get_u8_ctrl(pdev, GET_LUM_CTL, PRESET_CONTOUR_FORMATTER, &def);
305 pdev->contour = v4l2_ctrl_new_custom(hdl, &cfg, NULL);
307 v4l2_ctrl_auto_cluster(2, &pdev->autocontour, 0, false);
310 r = pwc_get_u8_ctrl(pdev, GET_LUM_CTL,
317 pdev->backlight = v4l2_ctrl_new_custom(hdl, &cfg, NULL);
320 r = pwc_get_u8_ctrl(pdev, GET_LUM_CTL,
327 pdev->flicker = v4l2_ctrl_new_custom(hdl, &cfg, NULL);
330 r = pwc_get_u8_ctrl(pdev, GET_LUM_CTL,
336 pdev->noise_reduction = v4l2_ctrl_new_custom(hdl, &cfg, NULL);
339 pdev->save_user = v4l2_ctrl_new_custom(hdl, &pwc_save_user_cfg, NULL);
340 pdev->restore_user = v4l2_ctrl_new_custom(hdl, &pwc_restore_user_cfg,
342 if (pdev->restore_user)
343 pdev->restore_user->flags |= V4L2_CTRL_FLAG_UPDATE;
344 pdev->restore_factory = v4l2_ctrl_new_custom(hdl,
347 if (pdev->restore_factory)
348 pdev->restore_factory->flags |= V4L2_CTRL_FLAG_UPDATE;
351 r = pwc_get_u8_ctrl(pdev, GET_CHROM_CTL,
357 pdev->awb_speed = v4l2_ctrl_new_custom(hdl, &cfg, NULL);
359 r = pwc_get_u8_ctrl(pdev, GET_CHROM_CTL,
365 pdev->awb_delay = v4l2_ctrl_new_custom(hdl, &cfg, NULL);
367 if (!(pdev->features & FEATURE_MOTOR_PANTILT))
371 pdev->motor_pan = v4l2_ctrl_new_std(hdl, &pwc_ctrl_ops,
373 if (!pdev->motor_pan)
375 pdev->motor_tilt = v4l2_ctrl_new_std(hdl, &pwc_ctrl_ops,
377 pdev->motor_pan_reset = v4l2_ctrl_new_std(hdl, &pwc_ctrl_ops,
379 pdev->motor_tilt_reset = v4l2_ctrl_new_std(hdl, &pwc_ctrl_ops,
381 v4l2_ctrl_cluster(4, &pdev->motor_pan);
409 static int pwc_vidioc_try_fmt(struct pwc_device *pdev, struct v4l2_format *f)
422 if (DEVICE_USE_CODEC23(pdev->type)) {
428 if (DEVICE_USE_CODEC1(pdev->type)) {
438 size = pwc_get_size(pdev, f->fmt.pix.width, f->fmt.pix.height);
451 struct pwc_device *pdev = video_drvdata(file);
454 ret = pwc_vidioc_try_fmt(pdev, f);
458 if (vb2_is_busy(&pdev->vb_queue))
464 f->fmt.pix.width, f->fmt.pix.height, pdev->vframes,
470 ret = pwc_set_video_mode(pdev, f->fmt.pix.width, f->fmt.pix.height,
475 pwc_vidioc_fill_fmt(f, pdev->width, pdev->height, pdev->pixfmt);
481 struct pwc_device *pdev = video_drvdata(file);
484 strscpy(cap->card, pdev->vdev.name, sizeof(cap->card));
485 usb_make_path(pdev->udev, cap->bus_info, sizeof(cap->bus_info));
512 struct pwc_device *pdev =
518 if (pdev->color_bal_valid &&
519 (pdev->auto_white_balance->val != awb_auto ||
521 pdev->last_color_bal_update + HZ / 4))) {
522 pdev->red_balance->val = pdev->last_red_balance;
523 pdev->blue_balance->val = pdev->last_blue_balance;
526 ret = pwc_get_u8_ctrl(pdev, GET_STATUS_CTL,
528 &pdev->red_balance->val);
531 ret = pwc_get_u8_ctrl(pdev, GET_STATUS_CTL,
533 &pdev->blue_balance->val);
536 pdev->last_red_balance = pdev->red_balance->val;
537 pdev->last_blue_balance = pdev->blue_balance->val;
538 pdev->last_color_bal_update = jiffies;
539 pdev->color_bal_valid = true;
542 if (pdev->gain_valid && time_before(jiffies,
543 pdev->last_gain_update + HZ / 4)) {
544 pdev->gain->val = pdev->last_gain;
547 ret = pwc_get_u8_ctrl(pdev, GET_STATUS_CTL,
548 READ_AGC_FORMATTER, &pdev->gain->val);
551 pdev->last_gain = pdev->gain->val;
552 pdev->last_gain_update = jiffies;
553 pdev->gain_valid = true;
554 if (!DEVICE_USE_CODEC3(pdev->type))
559 if (pdev->exposure_valid && time_before(jiffies,
560 pdev->last_exposure_update + HZ / 4)) {
561 pdev->exposure->val = pdev->last_exposure;
564 ret = pwc_get_u16_ctrl(pdev, GET_STATUS_CTL,
566 &pdev->exposure->val);
569 pdev->last_exposure = pdev->exposure->val;
570 pdev->last_exposure_update = jiffies;
571 pdev->exposure_valid = true;
583 static int pwc_set_awb(struct pwc_device *pdev)
587 if (pdev->auto_white_balance->is_new) {
588 ret = pwc_set_u8_ctrl(pdev, SET_CHROM_CTL,
590 pdev->auto_white_balance->val);
594 if (pdev->auto_white_balance->val != awb_manual)
595 pdev->color_bal_valid = false; /* Force cache update */
601 if (pdev->auto_white_balance->val == awb_indoor ||
602 pdev->auto_white_balance->val == awb_outdoor ||
603 pdev->auto_white_balance->val == awb_fl)
604 pwc_g_volatile_ctrl(pdev->auto_white_balance);
606 if (pdev->auto_white_balance->val != awb_manual)
609 if (pdev->red_balance->is_new) {
610 ret = pwc_set_u8_ctrl(pdev, SET_CHROM_CTL,
612 pdev->red_balance->val);
617 if (pdev->blue_balance->is_new) {
618 ret = pwc_set_u8_ctrl(pdev, SET_CHROM_CTL,
620 pdev->blue_balance->val);
628 static int pwc_set_autogain(struct pwc_device *pdev)
632 if (pdev->autogain->is_new) {
633 ret = pwc_set_u8_ctrl(pdev, SET_LUM_CTL,
635 pdev->autogain->val ? 0 : 0xff);
639 if (pdev->autogain->val)
640 pdev->gain_valid = false; /* Force cache update */
643 if (pdev->autogain->val)
646 if (pdev->gain->is_new) {
647 ret = pwc_set_u8_ctrl(pdev, SET_LUM_CTL,
649 pdev->gain->val);
657 static int pwc_set_exposure_auto(struct pwc_device *pdev)
660 int is_auto = pdev->exposure_auto->val == V4L2_EXPOSURE_AUTO;
662 if (pdev->exposure_auto->is_new) {
663 ret = pwc_set_u8_ctrl(pdev, SET_LUM_CTL,
670 pdev->exposure_valid = false; /* Force cache update */
676 if (pdev->exposure->is_new) {
677 ret = pwc_set_u16_ctrl(pdev, SET_LUM_CTL,
679 pdev->exposure->val);
687 static int pwc_set_autogain_expo(struct pwc_device *pdev)
691 if (pdev->autogain->is_new) {
692 ret = pwc_set_u8_ctrl(pdev, SET_LUM_CTL,
694 pdev->autogain->val ? 0 : 0xff);
698 if (pdev->autogain->val) {
699 pdev->gain_valid = false; /* Force cache update */
700 pdev->exposure_valid = false; /* Force cache update */
704 if (pdev->autogain->val)
707 if (pdev->gain->is_new) {
708 ret = pwc_set_u8_ctrl(pdev, SET_LUM_CTL,
710 pdev->gain->val);
715 if (pdev->exposure->is_new) {
716 ret = pwc_set_u16_ctrl(pdev, SET_LUM_CTL,
718 pdev->exposure->val);
725 static int pwc_set_motor(struct pwc_device *pdev)
729 pdev->ctrl_buf[0] = 0;
730 if (pdev->motor_pan_reset->is_new)
731 pdev->ctrl_buf[0] |= 0x01;
732 if (pdev->motor_tilt_reset->is_new)
733 pdev->ctrl_buf[0] |= 0x02;
734 if (pdev->motor_pan_reset->is_new || pdev->motor_tilt_reset->is_new) {
735 ret = send_control_msg(pdev, SET_MPT_CTL,
737 pdev->ctrl_buf, 1);
742 memset(pdev->ctrl_buf, 0, 4);
743 if (pdev->motor_pan->is_new) {
744 pdev->ctrl_buf[0] = pdev->motor_pan->val & 0xFF;
745 pdev->ctrl_buf[1] = (pdev->motor_pan->val >> 8);
747 if (pdev->motor_tilt->is_new) {
748 pdev->ctrl_buf[2] = pdev->motor_tilt->val & 0xFF;
749 pdev->ctrl_buf[3] = (pdev->motor_tilt->val >> 8);
751 if (pdev->motor_pan->is_new || pdev->motor_tilt->is_new) {
752 ret = send_control_msg(pdev, SET_MPT_CTL,
754 pdev->ctrl_buf, 4);
764 struct pwc_device *pdev =
770 ret = pwc_set_u8_ctrl(pdev, SET_LUM_CTL,
774 ret = pwc_set_u8_ctrl(pdev, SET_LUM_CTL,
778 ret = pwc_set_s8_ctrl(pdev, SET_CHROM_CTL,
779 pdev->saturation_fmt, ctrl->val);
782 ret = pwc_set_u8_ctrl(pdev, SET_LUM_CTL,
786 ret = pwc_set_awb(pdev);
789 if (DEVICE_USE_CODEC2(pdev->type))
790 ret = pwc_set_autogain(pdev);
791 else if (DEVICE_USE_CODEC3(pdev->type))
792 ret = pwc_set_autogain_expo(pdev);
797 if (DEVICE_USE_CODEC2(pdev->type))
798 ret = pwc_set_exposure_auto(pdev);
803 ret = pwc_set_u8_ctrl(pdev, SET_CHROM_CTL,
808 if (pdev->autocontour->is_new) {
809 ret = pwc_set_u8_ctrl(pdev, SET_LUM_CTL,
811 pdev->autocontour->val ? 0 : 0xff);
813 if (ret == 0 && pdev->contour->is_new) {
814 ret = pwc_set_u8_ctrl(pdev, SET_LUM_CTL,
816 pdev->contour->val);
820 ret = pwc_set_u8_ctrl(pdev, SET_LUM_CTL,
825 ret = pwc_set_u8_ctrl(pdev, SET_LUM_CTL,
830 ret = pwc_set_u8_ctrl(pdev, SET_LUM_CTL,
835 ret = pwc_button_ctrl(pdev, SAVE_USER_DEFAULTS_FORMATTER);
838 ret = pwc_button_ctrl(pdev, RESTORE_USER_DEFAULTS_FORMATTER);
841 ret = pwc_button_ctrl(pdev,
845 ret = pwc_set_u8_ctrl(pdev, SET_CHROM_CTL,
850 ret = pwc_set_u8_ctrl(pdev, SET_CHROM_CTL,
855 ret = pwc_set_motor(pdev);
869 struct pwc_device *pdev = video_drvdata(file);
875 f->pixelformat = pdev->type <= 646 ? V4L2_PIX_FMT_PWC1 : V4L2_PIX_FMT_PWC2;
888 struct pwc_device *pdev = video_drvdata(file);
894 pdev->width, pdev->height);
895 pwc_vidioc_fill_fmt(f, pdev->width, pdev->height, pdev->pixfmt);
901 struct pwc_device *pdev = video_drvdata(file);
903 return pwc_vidioc_try_fmt(pdev, f);
909 struct pwc_device *pdev = video_drvdata(file);
914 DEVICE_USE_CODEC1(pdev->type)) ||
916 DEVICE_USE_CODEC23(pdev->type))) {
918 if (!(pdev->image_mask & (1UL << i)))
934 struct pwc_device *pdev = video_drvdata(file);
950 i = pwc_get_fps(pdev, fival->index, size);
964 struct pwc_device *pdev = video_drvdata(file);
974 parm->parm.capture.timeperframe.denominator = pdev->vframes;
983 struct pwc_device *pdev = video_drvdata(file);
1000 if (vb2_is_busy(&pdev->vb_queue))
1003 ret = pwc_set_video_mode(pdev, pdev->width, pdev->height, pdev->pixfmt,