Lines Matching +full:sdtv +full:- +full:standards
1 // SPDX-License-Identifier: GPL-2.0-only
3 * vivid-ctrls.c - control support functions.
11 #include <media/v4l2-event.h>
12 #include <media/v4l2-common.h>
14 #include "vivid-core.h"
15 #include "vivid-vid-cap.h"
16 #include "vivid-vid-out.h"
17 #include "vivid-vid-common.h"
18 #include "vivid-radio-common.h"
19 #include "vivid-osd.h"
20 #include "vivid-ctrls.h"
21 #include "vivid-cec.h"
108 clear_bit(V4L2_FL_REGISTERED, &vdev->flags); in vivid_unregister_dev()
114 struct vivid_dev *dev = container_of(ctrl->handler, struct vivid_dev, ctrl_hdl_user_gen); in vivid_user_gen_s_ctrl()
116 switch (ctrl->id) { in vivid_user_gen_s_ctrl()
118 v4l2_info(&dev->v4l2_dev, "disconnect\n"); in vivid_user_gen_s_ctrl()
119 dev->disconnect_error = true; in vivid_user_gen_s_ctrl()
120 vivid_unregister_dev(dev->has_vid_cap, &dev->vid_cap_dev); in vivid_user_gen_s_ctrl()
121 vivid_unregister_dev(dev->has_vid_out, &dev->vid_out_dev); in vivid_user_gen_s_ctrl()
122 vivid_unregister_dev(dev->has_vbi_cap, &dev->vbi_cap_dev); in vivid_user_gen_s_ctrl()
123 vivid_unregister_dev(dev->has_vbi_out, &dev->vbi_out_dev); in vivid_user_gen_s_ctrl()
124 vivid_unregister_dev(dev->has_radio_rx, &dev->radio_rx_dev); in vivid_user_gen_s_ctrl()
125 vivid_unregister_dev(dev->has_radio_tx, &dev->radio_tx_dev); in vivid_user_gen_s_ctrl()
126 vivid_unregister_dev(dev->has_sdr_cap, &dev->sdr_cap_dev); in vivid_user_gen_s_ctrl()
127 vivid_unregister_dev(dev->has_meta_cap, &dev->meta_cap_dev); in vivid_user_gen_s_ctrl()
128 vivid_unregister_dev(dev->has_meta_out, &dev->meta_out_dev); in vivid_user_gen_s_ctrl()
129 vivid_unregister_dev(dev->has_touch_cap, &dev->touch_cap_dev); in vivid_user_gen_s_ctrl()
132 dev->button_pressed = 30; in vivid_user_gen_s_ctrl()
298 .name = "Read-Only Integer 32 Bits",
310 struct vivid_dev *dev = container_of(ctrl->handler, in vivid_fb_s_ctrl()
313 switch (ctrl->id) { in vivid_fb_s_ctrl()
337 struct vivid_dev *dev = container_of(ctrl->handler, struct vivid_dev, ctrl_hdl_user_vid); in vivid_user_vid_g_volatile_ctrl()
339 switch (ctrl->id) { in vivid_user_vid_g_volatile_ctrl()
341 dev->gain->val = (jiffies_to_msecs(jiffies) / 1000) & 0xff; in vivid_user_vid_g_volatile_ctrl()
349 struct vivid_dev *dev = container_of(ctrl->handler, struct vivid_dev, ctrl_hdl_user_vid); in vivid_user_vid_s_ctrl()
351 switch (ctrl->id) { in vivid_user_vid_s_ctrl()
353 dev->input_brightness[dev->input] = ctrl->val - dev->input * 128; in vivid_user_vid_s_ctrl()
354 tpg_s_brightness(&dev->tpg, dev->input_brightness[dev->input]); in vivid_user_vid_s_ctrl()
357 tpg_s_contrast(&dev->tpg, ctrl->val); in vivid_user_vid_s_ctrl()
360 tpg_s_saturation(&dev->tpg, ctrl->val); in vivid_user_vid_s_ctrl()
363 tpg_s_hue(&dev->tpg, ctrl->val); in vivid_user_vid_s_ctrl()
366 dev->hflip = ctrl->val; in vivid_user_vid_s_ctrl()
367 tpg_s_hflip(&dev->tpg, dev->sensor_hflip ^ dev->hflip); in vivid_user_vid_s_ctrl()
370 dev->vflip = ctrl->val; in vivid_user_vid_s_ctrl()
371 tpg_s_vflip(&dev->tpg, dev->sensor_vflip ^ dev->vflip); in vivid_user_vid_s_ctrl()
374 tpg_s_alpha_component(&dev->tpg, ctrl->val); in vivid_user_vid_s_ctrl()
401 struct vivid_dev *dev = container_of(ctrl->handler, struct vivid_dev, ctrl_hdl_vid_cap); in vivid_vid_cap_s_ctrl()
404 switch (ctrl->id) { in vivid_vid_cap_s_ctrl()
407 tpg_s_pattern(&dev->tpg, ctrl->val); in vivid_vid_cap_s_ctrl()
410 tpg_s_colorspace(&dev->tpg, colorspaces[ctrl->val]); in vivid_vid_cap_s_ctrl()
417 tpg_s_xfer_func(&dev->tpg, ctrl->val); in vivid_vid_cap_s_ctrl()
424 tpg_s_ycbcr_enc(&dev->tpg, ctrl->val); in vivid_vid_cap_s_ctrl()
431 tpg_s_hsv_enc(&dev->tpg, ctrl->val ? V4L2_HSV_ENC_256 : in vivid_vid_cap_s_ctrl()
439 tpg_s_quantization(&dev->tpg, ctrl->val); in vivid_vid_cap_s_ctrl()
448 tpg_s_rgb_range(&dev->tpg, ctrl->val); in vivid_vid_cap_s_ctrl()
451 tpg_s_real_rgb_range(&dev->tpg, ctrl->val ? in vivid_vid_cap_s_ctrl()
455 tpg_s_alpha_mode(&dev->tpg, ctrl->val); in vivid_vid_cap_s_ctrl()
458 tpg_s_mv_hor_mode(&dev->tpg, ctrl->val); in vivid_vid_cap_s_ctrl()
461 tpg_s_mv_vert_mode(&dev->tpg, ctrl->val); in vivid_vid_cap_s_ctrl()
464 dev->osd_mode = ctrl->val; in vivid_vid_cap_s_ctrl()
467 tpg_s_perc_fill(&dev->tpg, ctrl->val); in vivid_vid_cap_s_ctrl()
469 dev->must_blank[i] = ctrl->val < 100; in vivid_vid_cap_s_ctrl()
472 tpg_s_insert_sav(&dev->tpg, ctrl->val); in vivid_vid_cap_s_ctrl()
475 tpg_s_insert_eav(&dev->tpg, ctrl->val); in vivid_vid_cap_s_ctrl()
478 dev->sensor_hflip = ctrl->val; in vivid_vid_cap_s_ctrl()
479 tpg_s_hflip(&dev->tpg, dev->sensor_hflip ^ dev->hflip); in vivid_vid_cap_s_ctrl()
482 dev->sensor_vflip = ctrl->val; in vivid_vid_cap_s_ctrl()
483 tpg_s_vflip(&dev->tpg, dev->sensor_vflip ^ dev->vflip); in vivid_vid_cap_s_ctrl()
486 dev->reduced_fps = ctrl->val; in vivid_vid_cap_s_ctrl()
490 dev->has_crop_cap = ctrl->val; in vivid_vid_cap_s_ctrl()
494 dev->has_compose_cap = ctrl->val; in vivid_vid_cap_s_ctrl()
498 dev->has_scaler_cap = ctrl->val; in vivid_vid_cap_s_ctrl()
502 tpg_s_show_border(&dev->tpg, ctrl->val); in vivid_vid_cap_s_ctrl()
505 tpg_s_show_square(&dev->tpg, ctrl->val); in vivid_vid_cap_s_ctrl()
508 dev->std_aspect_ratio[dev->input] = ctrl->val; in vivid_vid_cap_s_ctrl()
509 tpg_s_video_aspect(&dev->tpg, vivid_get_video_aspect(dev)); in vivid_vid_cap_s_ctrl()
512 dev->dv_timings_signal_mode[dev->input] = in vivid_vid_cap_s_ctrl()
513 dev->ctrl_dv_timings_signal_mode->val; in vivid_vid_cap_s_ctrl()
514 dev->query_dv_timings[dev->input] = dev->ctrl_dv_timings->val; in vivid_vid_cap_s_ctrl()
516 dev->power_present = 0; in vivid_vid_cap_s_ctrl()
518 i < ARRAY_SIZE(dev->dv_timings_signal_mode); in vivid_vid_cap_s_ctrl()
520 if (dev->input_type[i] == HDMI) { in vivid_vid_cap_s_ctrl()
521 if (dev->dv_timings_signal_mode[i] != NO_SIGNAL) in vivid_vid_cap_s_ctrl()
522 dev->power_present |= (1 << j); in vivid_vid_cap_s_ctrl()
525 __v4l2_ctrl_s_ctrl(dev->ctrl_rx_power_present, in vivid_vid_cap_s_ctrl()
526 dev->power_present); in vivid_vid_cap_s_ctrl()
528 v4l2_ctrl_activate(dev->ctrl_dv_timings, in vivid_vid_cap_s_ctrl()
529 dev->dv_timings_signal_mode[dev->input] == in vivid_vid_cap_s_ctrl()
536 dev->dv_timings_aspect_ratio[dev->input] = ctrl->val; in vivid_vid_cap_s_ctrl()
537 tpg_s_video_aspect(&dev->tpg, vivid_get_video_aspect(dev)); in vivid_vid_cap_s_ctrl()
540 dev->tstamp_src_is_soe = ctrl->val; in vivid_vid_cap_s_ctrl()
541 dev->vb_vid_cap_q.timestamp_flags &= ~V4L2_BUF_FLAG_TSTAMP_SRC_MASK; in vivid_vid_cap_s_ctrl()
542 if (dev->tstamp_src_is_soe) in vivid_vid_cap_s_ctrl()
543 dev->vb_vid_cap_q.timestamp_flags |= V4L2_BUF_FLAG_TSTAMP_SRC_SOE; in vivid_vid_cap_s_ctrl()
546 dev->edid_max_blocks = ctrl->val; in vivid_vid_cap_s_ctrl()
547 if (dev->edid_blocks > dev->edid_max_blocks) in vivid_vid_cap_s_ctrl()
548 dev->edid_blocks = dev->edid_max_blocks; in vivid_vid_cap_s_ctrl()
630 .max = ARRAY_SIZE(vivid_ctrl_osd_mode_strings) - 2,
731 .max = ARRAY_SIZE(vivid_ctrl_tstamp_src_strings) - 2,
792 "DCI-P3",
804 .max = ARRAY_SIZE(vivid_ctrl_colorspace_strings) - 2,
816 "DCI-P3",
826 .max = ARRAY_SIZE(vivid_ctrl_xfer_func_strings) - 2,
832 "ITU-R 601",
849 .max = ARRAY_SIZE(vivid_ctrl_ycbcr_enc_strings) - 2,
854 "Hue 0-179",
855 "Hue 0-256",
864 .max = ARRAY_SIZE(vivid_ctrl_hsv_enc_strings) - 2,
880 .max = ARRAY_SIZE(vivid_ctrl_quantization_strings) - 2,
896 .name = "Limited RGB Range (16-235)",
907 struct vivid_dev *dev = container_of(ctrl->handler, struct vivid_dev, ctrl_hdl_loop_cap); in vivid_loop_cap_s_ctrl()
909 switch (ctrl->id) { in vivid_loop_cap_s_ctrl()
911 dev->loop_video = ctrl->val; in vivid_loop_cap_s_ctrl()
938 struct vivid_dev *dev = container_of(ctrl->handler, struct vivid_dev, ctrl_hdl_vbi_cap); in vivid_vbi_cap_s_ctrl()
940 switch (ctrl->id) { in vivid_vbi_cap_s_ctrl()
942 dev->vbi_cap_interlaced = ctrl->val; in vivid_vbi_cap_s_ctrl()
966 struct vivid_dev *dev = container_of(ctrl->handler, struct vivid_dev, ctrl_hdl_vid_out); in vivid_vid_out_s_ctrl()
967 struct v4l2_bt_timings *bt = &dev->dv_timings_out.bt; in vivid_vid_out_s_ctrl()
971 switch (ctrl->id) { in vivid_vid_out_s_ctrl()
973 dev->has_crop_out = ctrl->val; in vivid_vid_out_s_ctrl()
977 dev->has_compose_out = ctrl->val; in vivid_vid_out_s_ctrl()
981 dev->has_scaler_out = ctrl->val; in vivid_vid_out_s_ctrl()
985 dev->dvi_d_out = ctrl->val == V4L2_DV_TX_MODE_DVI_D; in vivid_vid_out_s_ctrl()
988 if (!dev->dvi_d_out && (bt->flags & V4L2_DV_FL_IS_CE_VIDEO)) { in vivid_vid_out_s_ctrl()
989 if (bt->width == 720 && bt->height <= 576) in vivid_vid_out_s_ctrl()
990 dev->colorspace_out = V4L2_COLORSPACE_SMPTE170M; in vivid_vid_out_s_ctrl()
992 dev->colorspace_out = V4L2_COLORSPACE_REC709; in vivid_vid_out_s_ctrl()
993 dev->quantization_out = V4L2_QUANTIZATION_DEFAULT; in vivid_vid_out_s_ctrl()
995 dev->colorspace_out = V4L2_COLORSPACE_SRGB; in vivid_vid_out_s_ctrl()
996 dev->quantization_out = dev->dvi_d_out ? in vivid_vid_out_s_ctrl()
1000 if (dev->loop_video) in vivid_vid_out_s_ctrl()
1004 if (dev->output_type[dev->output] != HDMI) in vivid_vid_out_s_ctrl()
1007 dev->display_present[dev->output] = ctrl->val; in vivid_vid_out_s_ctrl()
1008 for (i = 0, j = 0; i < dev->num_outputs; i++) in vivid_vid_out_s_ctrl()
1009 if (dev->output_type[i] == HDMI) in vivid_vid_out_s_ctrl()
1011 dev->display_present[i] << j++; in vivid_vid_out_s_ctrl()
1013 __v4l2_ctrl_s_ctrl(dev->ctrl_tx_rxsense, display_present); in vivid_vid_out_s_ctrl()
1015 if (dev->edid_blocks) { in vivid_vid_out_s_ctrl()
1016 __v4l2_ctrl_s_ctrl(dev->ctrl_tx_edid_present, in vivid_vid_out_s_ctrl()
1018 __v4l2_ctrl_s_ctrl(dev->ctrl_tx_hotplug, in vivid_vid_out_s_ctrl()
1022 bus_idx = dev->cec_output2bus_map[dev->output]; in vivid_vid_out_s_ctrl()
1023 if (!dev->cec_tx_adap[bus_idx]) in vivid_vid_out_s_ctrl()
1026 if (ctrl->val && dev->edid_blocks) in vivid_vid_out_s_ctrl()
1027 cec_s_phys_addr(dev->cec_tx_adap[bus_idx], in vivid_vid_out_s_ctrl()
1028 dev->cec_tx_adap[bus_idx]->phys_addr, in vivid_vid_out_s_ctrl()
1031 cec_phys_addr_invalidate(dev->cec_tx_adap[bus_idx]); in vivid_vid_out_s_ctrl()
1086 struct vivid_dev *dev = container_of(ctrl->handler, struct vivid_dev, ctrl_hdl_streaming); in vivid_streaming_s_ctrl()
1089 switch (ctrl->id) { in vivid_streaming_s_ctrl()
1091 dev->dqbuf_error = true; in vivid_streaming_s_ctrl()
1094 dev->perc_dropped_buffers = ctrl->val; in vivid_streaming_s_ctrl()
1097 dev->queue_setup_error = true; in vivid_streaming_s_ctrl()
1100 dev->buf_prepare_error = true; in vivid_streaming_s_ctrl()
1103 dev->start_streaming_error = true; in vivid_streaming_s_ctrl()
1106 dev->req_validate_error = true; in vivid_streaming_s_ctrl()
1109 if (vb2_start_streaming_called(&dev->vb_vid_cap_q)) in vivid_streaming_s_ctrl()
1110 vb2_queue_error(&dev->vb_vid_cap_q); in vivid_streaming_s_ctrl()
1111 if (vb2_start_streaming_called(&dev->vb_vbi_cap_q)) in vivid_streaming_s_ctrl()
1112 vb2_queue_error(&dev->vb_vbi_cap_q); in vivid_streaming_s_ctrl()
1113 if (vb2_start_streaming_called(&dev->vb_vid_out_q)) in vivid_streaming_s_ctrl()
1114 vb2_queue_error(&dev->vb_vid_out_q); in vivid_streaming_s_ctrl()
1115 if (vb2_start_streaming_called(&dev->vb_vbi_out_q)) in vivid_streaming_s_ctrl()
1116 vb2_queue_error(&dev->vb_vbi_out_q); in vivid_streaming_s_ctrl()
1117 if (vb2_start_streaming_called(&dev->vb_sdr_cap_q)) in vivid_streaming_s_ctrl()
1118 vb2_queue_error(&dev->vb_sdr_cap_q); in vivid_streaming_s_ctrl()
1121 dev->seq_wrap = ctrl->val; in vivid_streaming_s_ctrl()
1124 dev->time_wrap = ctrl->val; in vivid_streaming_s_ctrl()
1125 if (ctrl->val == 0) { in vivid_streaming_s_ctrl()
1126 dev->time_wrap_offset = 0; in vivid_streaming_s_ctrl()
1133 * then we set the offset to ((1 << 32) - 16) * NSEC_PER_SEC). in vivid_streaming_s_ctrl()
1137 dev->time_wrap_offset = in vivid_streaming_s_ctrl()
1138 (0x100000000ULL - 16) * NSEC_PER_SEC - rem; in vivid_streaming_s_ctrl()
1221 /* SDTV Capture Controls */
1225 struct vivid_dev *dev = container_of(ctrl->handler, struct vivid_dev, ctrl_hdl_sdtv_cap); in vivid_sdtv_cap_s_ctrl()
1227 switch (ctrl->id) { in vivid_sdtv_cap_s_ctrl()
1229 dev->std_signal_mode[dev->input] = in vivid_sdtv_cap_s_ctrl()
1230 dev->ctrl_std_signal_mode->val; in vivid_sdtv_cap_s_ctrl()
1231 if (dev->std_signal_mode[dev->input] == SELECTED_STD) in vivid_sdtv_cap_s_ctrl()
1232 dev->query_std[dev->input] = in vivid_sdtv_cap_s_ctrl()
1233 vivid_standard[dev->ctrl_standard->val]; in vivid_sdtv_cap_s_ctrl()
1234 v4l2_ctrl_activate(dev->ctrl_standard, in vivid_sdtv_cap_s_ctrl()
1235 dev->std_signal_mode[dev->input] == in vivid_sdtv_cap_s_ctrl()
1255 "Cycle Through All Standards",
1264 .max = ARRAY_SIZE(vivid_ctrl_std_signal_mode_strings) - 2,
1284 struct vivid_dev *dev = container_of(ctrl->handler, struct vivid_dev, ctrl_hdl_radio_rx); in vivid_radio_rx_s_ctrl()
1286 switch (ctrl->id) { in vivid_radio_rx_s_ctrl()
1288 dev->radio_rx_hw_seek_mode = ctrl->val; in vivid_radio_rx_s_ctrl()
1291 dev->radio_rx_hw_seek_prog_lim = ctrl->val; in vivid_radio_rx_s_ctrl()
1294 dev->rds_gen.use_rbds = ctrl->val; in vivid_radio_rx_s_ctrl()
1297 dev->radio_rx_rds_controls = ctrl->val; in vivid_radio_rx_s_ctrl()
1298 dev->radio_rx_caps &= ~V4L2_CAP_READWRITE; in vivid_radio_rx_s_ctrl()
1299 dev->radio_rx_rds_use_alternates = false; in vivid_radio_rx_s_ctrl()
1300 if (!dev->radio_rx_rds_controls) { in vivid_radio_rx_s_ctrl()
1301 dev->radio_rx_caps |= V4L2_CAP_READWRITE; in vivid_radio_rx_s_ctrl()
1302 __v4l2_ctrl_s_ctrl(dev->radio_rx_rds_pty, 0); in vivid_radio_rx_s_ctrl()
1303 __v4l2_ctrl_s_ctrl(dev->radio_rx_rds_ta, 0); in vivid_radio_rx_s_ctrl()
1304 __v4l2_ctrl_s_ctrl(dev->radio_rx_rds_tp, 0); in vivid_radio_rx_s_ctrl()
1305 __v4l2_ctrl_s_ctrl(dev->radio_rx_rds_ms, 0); in vivid_radio_rx_s_ctrl()
1306 __v4l2_ctrl_s_ctrl_string(dev->radio_rx_rds_psname, ""); in vivid_radio_rx_s_ctrl()
1307 __v4l2_ctrl_s_ctrl_string(dev->radio_rx_rds_radiotext, ""); in vivid_radio_rx_s_ctrl()
1309 v4l2_ctrl_activate(dev->radio_rx_rds_pty, dev->radio_rx_rds_controls); in vivid_radio_rx_s_ctrl()
1310 v4l2_ctrl_activate(dev->radio_rx_rds_psname, dev->radio_rx_rds_controls); in vivid_radio_rx_s_ctrl()
1311 v4l2_ctrl_activate(dev->radio_rx_rds_radiotext, dev->radio_rx_rds_controls); in vivid_radio_rx_s_ctrl()
1312 v4l2_ctrl_activate(dev->radio_rx_rds_ta, dev->radio_rx_rds_controls); in vivid_radio_rx_s_ctrl()
1313 v4l2_ctrl_activate(dev->radio_rx_rds_tp, dev->radio_rx_rds_controls); in vivid_radio_rx_s_ctrl()
1314 v4l2_ctrl_activate(dev->radio_rx_rds_ms, dev->radio_rx_rds_controls); in vivid_radio_rx_s_ctrl()
1315 dev->radio_rx_dev.device_caps = dev->radio_rx_caps; in vivid_radio_rx_s_ctrl()
1318 dev->radio_rx_rds_enabled = ctrl->val; in vivid_radio_rx_s_ctrl()
1382 struct vivid_dev *dev = container_of(ctrl->handler, struct vivid_dev, ctrl_hdl_radio_tx); in vivid_radio_tx_s_ctrl()
1384 switch (ctrl->id) { in vivid_radio_tx_s_ctrl()
1386 dev->radio_tx_rds_controls = ctrl->val; in vivid_radio_tx_s_ctrl()
1387 dev->radio_tx_caps &= ~V4L2_CAP_READWRITE; in vivid_radio_tx_s_ctrl()
1388 if (!dev->radio_tx_rds_controls) in vivid_radio_tx_s_ctrl()
1389 dev->radio_tx_caps |= V4L2_CAP_READWRITE; in vivid_radio_tx_s_ctrl()
1390 dev->radio_tx_dev.device_caps = dev->radio_tx_caps; in vivid_radio_tx_s_ctrl()
1393 if (dev->radio_rx_rds_controls) in vivid_radio_tx_s_ctrl()
1394 v4l2_ctrl_s_ctrl(dev->radio_rx_rds_pty, ctrl->val); in vivid_radio_tx_s_ctrl()
1397 if (dev->radio_rx_rds_controls) in vivid_radio_tx_s_ctrl()
1398 v4l2_ctrl_s_ctrl_string(dev->radio_rx_rds_psname, ctrl->p_new.p_char); in vivid_radio_tx_s_ctrl()
1401 if (dev->radio_rx_rds_controls) in vivid_radio_tx_s_ctrl()
1402 v4l2_ctrl_s_ctrl_string(dev->radio_rx_rds_radiotext, ctrl->p_new.p_char); in vivid_radio_tx_s_ctrl()
1405 if (dev->radio_rx_rds_controls) in vivid_radio_tx_s_ctrl()
1406 v4l2_ctrl_s_ctrl(dev->radio_rx_rds_ta, ctrl->val); in vivid_radio_tx_s_ctrl()
1409 if (dev->radio_rx_rds_controls) in vivid_radio_tx_s_ctrl()
1410 v4l2_ctrl_s_ctrl(dev->radio_rx_rds_tp, ctrl->val); in vivid_radio_tx_s_ctrl()
1413 if (dev->radio_rx_rds_controls) in vivid_radio_tx_s_ctrl()
1414 v4l2_ctrl_s_ctrl(dev->radio_rx_rds_ms, ctrl->val); in vivid_radio_tx_s_ctrl()
1439 struct vivid_dev *dev = container_of(ctrl->handler, struct vivid_dev, ctrl_hdl_sdr_cap); in vivid_sdr_cap_s_ctrl()
1441 switch (ctrl->id) { in vivid_sdr_cap_s_ctrl()
1443 dev->sdr_fm_deviation = ctrl->val; in vivid_sdr_cap_s_ctrl()
1468 struct vivid_dev *dev = container_of(ctrl->handler, struct vivid_dev, in vivid_meta_cap_s_ctrl()
1471 switch (ctrl->id) { in vivid_meta_cap_s_ctrl()
1473 dev->meta_pts = ctrl->val; in vivid_meta_cap_s_ctrl()
1476 dev->meta_scr = ctrl->val; in vivid_meta_cap_s_ctrl()
1518 struct v4l2_ctrl_handler *hdl_user_gen = &dev->ctrl_hdl_user_gen; in vivid_create_controls()
1519 struct v4l2_ctrl_handler *hdl_user_vid = &dev->ctrl_hdl_user_vid; in vivid_create_controls()
1520 struct v4l2_ctrl_handler *hdl_user_aud = &dev->ctrl_hdl_user_aud; in vivid_create_controls()
1521 struct v4l2_ctrl_handler *hdl_streaming = &dev->ctrl_hdl_streaming; in vivid_create_controls()
1522 struct v4l2_ctrl_handler *hdl_sdtv_cap = &dev->ctrl_hdl_sdtv_cap; in vivid_create_controls()
1523 struct v4l2_ctrl_handler *hdl_loop_cap = &dev->ctrl_hdl_loop_cap; in vivid_create_controls()
1524 struct v4l2_ctrl_handler *hdl_fb = &dev->ctrl_hdl_fb; in vivid_create_controls()
1525 struct v4l2_ctrl_handler *hdl_vid_cap = &dev->ctrl_hdl_vid_cap; in vivid_create_controls()
1526 struct v4l2_ctrl_handler *hdl_vid_out = &dev->ctrl_hdl_vid_out; in vivid_create_controls()
1527 struct v4l2_ctrl_handler *hdl_vbi_cap = &dev->ctrl_hdl_vbi_cap; in vivid_create_controls()
1528 struct v4l2_ctrl_handler *hdl_vbi_out = &dev->ctrl_hdl_vbi_out; in vivid_create_controls()
1529 struct v4l2_ctrl_handler *hdl_radio_rx = &dev->ctrl_hdl_radio_rx; in vivid_create_controls()
1530 struct v4l2_ctrl_handler *hdl_radio_tx = &dev->ctrl_hdl_radio_tx; in vivid_create_controls()
1531 struct v4l2_ctrl_handler *hdl_sdr_cap = &dev->ctrl_hdl_sdr_cap; in vivid_create_controls()
1532 struct v4l2_ctrl_handler *hdl_meta_cap = &dev->ctrl_hdl_meta_cap; in vivid_create_controls()
1533 struct v4l2_ctrl_handler *hdl_meta_out = &dev->ctrl_hdl_meta_out; in vivid_create_controls()
1534 struct v4l2_ctrl_handler *hdl_tch_cap = &dev->ctrl_hdl_touch_cap; in vivid_create_controls()
1561 if (!no_error_inj || dev->has_fb || dev->num_hdmi_outputs) in vivid_create_controls()
1582 dev->volume = v4l2_ctrl_new_std(hdl_user_aud, NULL, in vivid_create_controls()
1584 dev->mute = v4l2_ctrl_new_std(hdl_user_aud, NULL, in vivid_create_controls()
1586 if (dev->has_vid_cap) { in vivid_create_controls()
1587 dev->brightness = v4l2_ctrl_new_std(hdl_user_vid, &vivid_user_vid_ctrl_ops, in vivid_create_controls()
1590 dev->input_brightness[i] = 128; in vivid_create_controls()
1591 dev->contrast = v4l2_ctrl_new_std(hdl_user_vid, &vivid_user_vid_ctrl_ops, in vivid_create_controls()
1593 dev->saturation = v4l2_ctrl_new_std(hdl_user_vid, &vivid_user_vid_ctrl_ops, in vivid_create_controls()
1595 dev->hue = v4l2_ctrl_new_std(hdl_user_vid, &vivid_user_vid_ctrl_ops, in vivid_create_controls()
1596 V4L2_CID_HUE, -128, 128, 1, 0); in vivid_create_controls()
1601 dev->autogain = v4l2_ctrl_new_std(hdl_user_vid, &vivid_user_vid_ctrl_ops, in vivid_create_controls()
1603 dev->gain = v4l2_ctrl_new_std(hdl_user_vid, &vivid_user_vid_ctrl_ops, in vivid_create_controls()
1605 dev->alpha = v4l2_ctrl_new_std(hdl_user_vid, &vivid_user_vid_ctrl_ops, in vivid_create_controls()
1608 dev->button = v4l2_ctrl_new_custom(hdl_user_gen, &vivid_ctrl_button, NULL); in vivid_create_controls()
1609 dev->int32 = v4l2_ctrl_new_custom(hdl_user_gen, &vivid_ctrl_int32, NULL); in vivid_create_controls()
1610 dev->int64 = v4l2_ctrl_new_custom(hdl_user_gen, &vivid_ctrl_int64, NULL); in vivid_create_controls()
1611 dev->boolean = v4l2_ctrl_new_custom(hdl_user_gen, &vivid_ctrl_boolean, NULL); in vivid_create_controls()
1612 dev->menu = v4l2_ctrl_new_custom(hdl_user_gen, &vivid_ctrl_menu, NULL); in vivid_create_controls()
1613 dev->string = v4l2_ctrl_new_custom(hdl_user_gen, &vivid_ctrl_string, NULL); in vivid_create_controls()
1614 dev->bitmask = v4l2_ctrl_new_custom(hdl_user_gen, &vivid_ctrl_bitmask, NULL); in vivid_create_controls()
1615 dev->int_menu = v4l2_ctrl_new_custom(hdl_user_gen, &vivid_ctrl_int_menu, NULL); in vivid_create_controls()
1616 dev->ro_int32 = v4l2_ctrl_new_custom(hdl_user_gen, &vivid_ctrl_ro_int32, NULL); in vivid_create_controls()
1622 if (dev->has_vid_cap) { in vivid_create_controls()
1633 dev->test_pattern = v4l2_ctrl_new_custom(hdl_vid_cap, in vivid_create_controls()
1647 dev->ctrl_has_crop_cap = v4l2_ctrl_new_custom(hdl_vid_cap, in vivid_create_controls()
1649 dev->ctrl_has_compose_cap = v4l2_ctrl_new_custom(hdl_vid_cap, in vivid_create_controls()
1651 dev->ctrl_has_scaler_cap = v4l2_ctrl_new_custom(hdl_vid_cap, in vivid_create_controls()
1656 dev->colorspace = v4l2_ctrl_new_custom(hdl_vid_cap, in vivid_create_controls()
1665 if (dev->has_vid_out && show_ccs_out) { in vivid_create_controls()
1666 dev->ctrl_has_crop_out = v4l2_ctrl_new_custom(hdl_vid_out, in vivid_create_controls()
1668 dev->ctrl_has_compose_out = v4l2_ctrl_new_custom(hdl_vid_out, in vivid_create_controls()
1670 dev->ctrl_has_scaler_out = v4l2_ctrl_new_custom(hdl_vid_out, in vivid_create_controls()
1675 * Testing this driver with v4l2-compliance will trigger the error in vivid_create_controls()
1695 if (has_sdtv && (dev->has_vid_cap || dev->has_vbi_cap)) { in vivid_create_controls()
1696 if (dev->has_vid_cap) in vivid_create_controls()
1698 dev->ctrl_std_signal_mode = v4l2_ctrl_new_custom(hdl_sdtv_cap, in vivid_create_controls()
1700 dev->ctrl_standard = v4l2_ctrl_new_custom(hdl_sdtv_cap, in vivid_create_controls()
1702 if (dev->ctrl_std_signal_mode) in vivid_create_controls()
1703 v4l2_ctrl_cluster(2, &dev->ctrl_std_signal_mode); in vivid_create_controls()
1704 if (dev->has_raw_vbi_cap) in vivid_create_controls()
1708 if (dev->num_hdmi_inputs) { in vivid_create_controls()
1709 s64 hdmi_input_mask = GENMASK(dev->num_hdmi_inputs - 1, 0); in vivid_create_controls()
1711 dev->ctrl_dv_timings_signal_mode = v4l2_ctrl_new_custom(hdl_vid_cap, in vivid_create_controls()
1714 vivid_ctrl_dv_timings.max = dev->query_dv_timings_size - 1; in vivid_create_controls()
1716 (const char * const *)dev->query_dv_timings_qmenu; in vivid_create_controls()
1717 dev->ctrl_dv_timings = v4l2_ctrl_new_custom(hdl_vid_cap, in vivid_create_controls()
1719 if (dev->ctrl_dv_timings_signal_mode) in vivid_create_controls()
1720 v4l2_ctrl_cluster(2, &dev->ctrl_dv_timings_signal_mode); in vivid_create_controls()
1724 dev->real_rgb_range_cap = v4l2_ctrl_new_custom(hdl_vid_cap, in vivid_create_controls()
1726 dev->rgb_range_cap = v4l2_ctrl_new_std_menu(hdl_vid_cap, in vivid_create_controls()
1730 dev->ctrl_rx_power_present = v4l2_ctrl_new_std(hdl_vid_cap, in vivid_create_controls()
1735 if (dev->num_hdmi_outputs) { in vivid_create_controls()
1736 s64 hdmi_output_mask = GENMASK(dev->num_hdmi_outputs - 1, 0); in vivid_create_controls()
1742 dev->ctrl_tx_rgb_range = v4l2_ctrl_new_std_menu(hdl_vid_out, NULL, in vivid_create_controls()
1745 dev->ctrl_tx_mode = v4l2_ctrl_new_std_menu(hdl_vid_out, NULL, in vivid_create_controls()
1748 dev->ctrl_display_present = v4l2_ctrl_new_custom(hdl_vid_out, in vivid_create_controls()
1750 dev->ctrl_tx_hotplug = v4l2_ctrl_new_std(hdl_vid_out, in vivid_create_controls()
1753 dev->ctrl_tx_rxsense = v4l2_ctrl_new_std(hdl_vid_out, in vivid_create_controls()
1756 dev->ctrl_tx_edid_present = v4l2_ctrl_new_std(hdl_vid_out, in vivid_create_controls()
1760 if ((dev->has_vid_cap && dev->has_vid_out) || in vivid_create_controls()
1761 (dev->has_vbi_cap && dev->has_vbi_out)) in vivid_create_controls()
1764 if (dev->has_fb) in vivid_create_controls()
1767 if (dev->has_radio_rx) { in vivid_create_controls()
1774 dev->radio_rx_rds_pty = v4l2_ctrl_new_std(hdl_radio_rx, in vivid_create_controls()
1777 dev->radio_rx_rds_psname = v4l2_ctrl_new_std(hdl_radio_rx, in vivid_create_controls()
1780 dev->radio_rx_rds_radiotext = v4l2_ctrl_new_std(hdl_radio_rx, in vivid_create_controls()
1783 dev->radio_rx_rds_ta = v4l2_ctrl_new_std(hdl_radio_rx, in vivid_create_controls()
1786 dev->radio_rx_rds_tp = v4l2_ctrl_new_std(hdl_radio_rx, in vivid_create_controls()
1789 dev->radio_rx_rds_ms = v4l2_ctrl_new_std(hdl_radio_rx, in vivid_create_controls()
1793 if (dev->has_radio_tx) { in vivid_create_controls()
1796 dev->radio_tx_rds_pi = v4l2_ctrl_new_std(hdl_radio_tx, in vivid_create_controls()
1799 dev->radio_tx_rds_pty = v4l2_ctrl_new_std(hdl_radio_tx, in vivid_create_controls()
1802 dev->radio_tx_rds_psname = v4l2_ctrl_new_std(hdl_radio_tx, in vivid_create_controls()
1805 if (dev->radio_tx_rds_psname) in vivid_create_controls()
1806 v4l2_ctrl_s_ctrl_string(dev->radio_tx_rds_psname, "VIVID-TX"); in vivid_create_controls()
1807 dev->radio_tx_rds_radiotext = v4l2_ctrl_new_std(hdl_radio_tx, in vivid_create_controls()
1810 if (dev->radio_tx_rds_radiotext) in vivid_create_controls()
1811 v4l2_ctrl_s_ctrl_string(dev->radio_tx_rds_radiotext, in vivid_create_controls()
1813 dev->radio_tx_rds_mono_stereo = v4l2_ctrl_new_std(hdl_radio_tx, in vivid_create_controls()
1816 dev->radio_tx_rds_art_head = v4l2_ctrl_new_std(hdl_radio_tx, in vivid_create_controls()
1819 dev->radio_tx_rds_compressed = v4l2_ctrl_new_std(hdl_radio_tx, in vivid_create_controls()
1822 dev->radio_tx_rds_dyn_pty = v4l2_ctrl_new_std(hdl_radio_tx, in vivid_create_controls()
1825 dev->radio_tx_rds_ta = v4l2_ctrl_new_std(hdl_radio_tx, in vivid_create_controls()
1828 dev->radio_tx_rds_tp = v4l2_ctrl_new_std(hdl_radio_tx, in vivid_create_controls()
1831 dev->radio_tx_rds_ms = v4l2_ctrl_new_std(hdl_radio_tx, in vivid_create_controls()
1835 if (dev->has_sdr_cap) { in vivid_create_controls()
1839 if (dev->has_meta_cap) { in vivid_create_controls()
1846 if (hdl_user_gen->error) in vivid_create_controls()
1847 return hdl_user_gen->error; in vivid_create_controls()
1848 if (hdl_user_vid->error) in vivid_create_controls()
1849 return hdl_user_vid->error; in vivid_create_controls()
1850 if (hdl_user_aud->error) in vivid_create_controls()
1851 return hdl_user_aud->error; in vivid_create_controls()
1852 if (hdl_streaming->error) in vivid_create_controls()
1853 return hdl_streaming->error; in vivid_create_controls()
1854 if (hdl_sdr_cap->error) in vivid_create_controls()
1855 return hdl_sdr_cap->error; in vivid_create_controls()
1856 if (hdl_loop_cap->error) in vivid_create_controls()
1857 return hdl_loop_cap->error; in vivid_create_controls()
1859 if (dev->autogain) in vivid_create_controls()
1860 v4l2_ctrl_auto_cluster(2, &dev->autogain, 0, true); in vivid_create_controls()
1862 if (dev->has_vid_cap) { in vivid_create_controls()
1870 if (hdl_vid_cap->error) in vivid_create_controls()
1871 return hdl_vid_cap->error; in vivid_create_controls()
1872 dev->vid_cap_dev.ctrl_handler = hdl_vid_cap; in vivid_create_controls()
1874 if (dev->has_vid_out) { in vivid_create_controls()
1879 if (hdl_vid_out->error) in vivid_create_controls()
1880 return hdl_vid_out->error; in vivid_create_controls()
1881 dev->vid_out_dev.ctrl_handler = hdl_vid_out; in vivid_create_controls()
1883 if (dev->has_vbi_cap) { in vivid_create_controls()
1888 if (hdl_vbi_cap->error) in vivid_create_controls()
1889 return hdl_vbi_cap->error; in vivid_create_controls()
1890 dev->vbi_cap_dev.ctrl_handler = hdl_vbi_cap; in vivid_create_controls()
1892 if (dev->has_vbi_out) { in vivid_create_controls()
1895 if (hdl_vbi_out->error) in vivid_create_controls()
1896 return hdl_vbi_out->error; in vivid_create_controls()
1897 dev->vbi_out_dev.ctrl_handler = hdl_vbi_out; in vivid_create_controls()
1899 if (dev->has_radio_rx) { in vivid_create_controls()
1902 if (hdl_radio_rx->error) in vivid_create_controls()
1903 return hdl_radio_rx->error; in vivid_create_controls()
1904 dev->radio_rx_dev.ctrl_handler = hdl_radio_rx; in vivid_create_controls()
1906 if (dev->has_radio_tx) { in vivid_create_controls()
1909 if (hdl_radio_tx->error) in vivid_create_controls()
1910 return hdl_radio_tx->error; in vivid_create_controls()
1911 dev->radio_tx_dev.ctrl_handler = hdl_radio_tx; in vivid_create_controls()
1913 if (dev->has_sdr_cap) { in vivid_create_controls()
1916 if (hdl_sdr_cap->error) in vivid_create_controls()
1917 return hdl_sdr_cap->error; in vivid_create_controls()
1918 dev->sdr_cap_dev.ctrl_handler = hdl_sdr_cap; in vivid_create_controls()
1920 if (dev->has_meta_cap) { in vivid_create_controls()
1923 if (hdl_meta_cap->error) in vivid_create_controls()
1924 return hdl_meta_cap->error; in vivid_create_controls()
1925 dev->meta_cap_dev.ctrl_handler = hdl_meta_cap; in vivid_create_controls()
1927 if (dev->has_meta_out) { in vivid_create_controls()
1930 if (hdl_meta_out->error) in vivid_create_controls()
1931 return hdl_meta_out->error; in vivid_create_controls()
1932 dev->meta_out_dev.ctrl_handler = hdl_meta_out; in vivid_create_controls()
1934 if (dev->has_touch_cap) { in vivid_create_controls()
1937 if (hdl_tch_cap->error) in vivid_create_controls()
1938 return hdl_tch_cap->error; in vivid_create_controls()
1939 dev->touch_cap_dev.ctrl_handler = hdl_tch_cap; in vivid_create_controls()
1946 v4l2_ctrl_handler_free(&dev->ctrl_hdl_vid_cap); in vivid_free_controls()
1947 v4l2_ctrl_handler_free(&dev->ctrl_hdl_vid_out); in vivid_free_controls()
1948 v4l2_ctrl_handler_free(&dev->ctrl_hdl_vbi_cap); in vivid_free_controls()
1949 v4l2_ctrl_handler_free(&dev->ctrl_hdl_vbi_out); in vivid_free_controls()
1950 v4l2_ctrl_handler_free(&dev->ctrl_hdl_radio_rx); in vivid_free_controls()
1951 v4l2_ctrl_handler_free(&dev->ctrl_hdl_radio_tx); in vivid_free_controls()
1952 v4l2_ctrl_handler_free(&dev->ctrl_hdl_sdr_cap); in vivid_free_controls()
1953 v4l2_ctrl_handler_free(&dev->ctrl_hdl_user_gen); in vivid_free_controls()
1954 v4l2_ctrl_handler_free(&dev->ctrl_hdl_user_vid); in vivid_free_controls()
1955 v4l2_ctrl_handler_free(&dev->ctrl_hdl_user_aud); in vivid_free_controls()
1956 v4l2_ctrl_handler_free(&dev->ctrl_hdl_streaming); in vivid_free_controls()
1957 v4l2_ctrl_handler_free(&dev->ctrl_hdl_sdtv_cap); in vivid_free_controls()
1958 v4l2_ctrl_handler_free(&dev->ctrl_hdl_loop_cap); in vivid_free_controls()
1959 v4l2_ctrl_handler_free(&dev->ctrl_hdl_fb); in vivid_free_controls()
1960 v4l2_ctrl_handler_free(&dev->ctrl_hdl_meta_cap); in vivid_free_controls()
1961 v4l2_ctrl_handler_free(&dev->ctrl_hdl_meta_out); in vivid_free_controls()
1962 v4l2_ctrl_handler_free(&dev->ctrl_hdl_touch_cap); in vivid_free_controls()