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"
105 struct vivid_dev *dev = container_of(ctrl->handler, struct vivid_dev, ctrl_hdl_user_gen); in vivid_user_gen_s_ctrl()
107 switch (ctrl->id) { in vivid_user_gen_s_ctrl()
109 v4l2_info(&dev->v4l2_dev, "disconnect\n"); in vivid_user_gen_s_ctrl()
110 clear_bit(V4L2_FL_REGISTERED, &dev->vid_cap_dev.flags); in vivid_user_gen_s_ctrl()
111 clear_bit(V4L2_FL_REGISTERED, &dev->vid_out_dev.flags); in vivid_user_gen_s_ctrl()
112 clear_bit(V4L2_FL_REGISTERED, &dev->vbi_cap_dev.flags); in vivid_user_gen_s_ctrl()
113 clear_bit(V4L2_FL_REGISTERED, &dev->vbi_out_dev.flags); in vivid_user_gen_s_ctrl()
114 clear_bit(V4L2_FL_REGISTERED, &dev->sdr_cap_dev.flags); in vivid_user_gen_s_ctrl()
115 clear_bit(V4L2_FL_REGISTERED, &dev->radio_rx_dev.flags); in vivid_user_gen_s_ctrl()
116 clear_bit(V4L2_FL_REGISTERED, &dev->radio_tx_dev.flags); in vivid_user_gen_s_ctrl()
117 clear_bit(V4L2_FL_REGISTERED, &dev->meta_cap_dev.flags); in vivid_user_gen_s_ctrl()
120 dev->button_pressed = 30; in vivid_user_gen_s_ctrl()
287 struct vivid_dev *dev = container_of(ctrl->handler, in vivid_fb_s_ctrl()
290 switch (ctrl->id) { in vivid_fb_s_ctrl()
314 struct vivid_dev *dev = container_of(ctrl->handler, struct vivid_dev, ctrl_hdl_user_vid); in vivid_user_vid_g_volatile_ctrl()
316 switch (ctrl->id) { in vivid_user_vid_g_volatile_ctrl()
318 dev->gain->val = (jiffies_to_msecs(jiffies) / 1000) & 0xff; in vivid_user_vid_g_volatile_ctrl()
326 struct vivid_dev *dev = container_of(ctrl->handler, struct vivid_dev, ctrl_hdl_user_vid); in vivid_user_vid_s_ctrl()
328 switch (ctrl->id) { in vivid_user_vid_s_ctrl()
330 dev->input_brightness[dev->input] = ctrl->val - dev->input * 128; in vivid_user_vid_s_ctrl()
331 tpg_s_brightness(&dev->tpg, dev->input_brightness[dev->input]); in vivid_user_vid_s_ctrl()
334 tpg_s_contrast(&dev->tpg, ctrl->val); in vivid_user_vid_s_ctrl()
337 tpg_s_saturation(&dev->tpg, ctrl->val); in vivid_user_vid_s_ctrl()
340 tpg_s_hue(&dev->tpg, ctrl->val); in vivid_user_vid_s_ctrl()
343 dev->hflip = ctrl->val; in vivid_user_vid_s_ctrl()
344 tpg_s_hflip(&dev->tpg, dev->sensor_hflip ^ dev->hflip); in vivid_user_vid_s_ctrl()
347 dev->vflip = ctrl->val; in vivid_user_vid_s_ctrl()
348 tpg_s_vflip(&dev->tpg, dev->sensor_vflip ^ dev->vflip); in vivid_user_vid_s_ctrl()
351 tpg_s_alpha_component(&dev->tpg, ctrl->val); in vivid_user_vid_s_ctrl()
378 struct vivid_dev *dev = container_of(ctrl->handler, struct vivid_dev, ctrl_hdl_vid_cap); in vivid_vid_cap_s_ctrl()
381 switch (ctrl->id) { in vivid_vid_cap_s_ctrl()
384 tpg_s_pattern(&dev->tpg, ctrl->val); in vivid_vid_cap_s_ctrl()
387 tpg_s_colorspace(&dev->tpg, colorspaces[ctrl->val]); in vivid_vid_cap_s_ctrl()
394 tpg_s_xfer_func(&dev->tpg, ctrl->val); in vivid_vid_cap_s_ctrl()
401 tpg_s_ycbcr_enc(&dev->tpg, ctrl->val); in vivid_vid_cap_s_ctrl()
408 tpg_s_hsv_enc(&dev->tpg, ctrl->val ? V4L2_HSV_ENC_256 : in vivid_vid_cap_s_ctrl()
416 tpg_s_quantization(&dev->tpg, ctrl->val); in vivid_vid_cap_s_ctrl()
425 tpg_s_rgb_range(&dev->tpg, ctrl->val); in vivid_vid_cap_s_ctrl()
428 tpg_s_real_rgb_range(&dev->tpg, ctrl->val ? in vivid_vid_cap_s_ctrl()
432 tpg_s_alpha_mode(&dev->tpg, ctrl->val); in vivid_vid_cap_s_ctrl()
435 tpg_s_mv_hor_mode(&dev->tpg, ctrl->val); in vivid_vid_cap_s_ctrl()
438 tpg_s_mv_vert_mode(&dev->tpg, ctrl->val); in vivid_vid_cap_s_ctrl()
441 dev->osd_mode = ctrl->val; in vivid_vid_cap_s_ctrl()
444 tpg_s_perc_fill(&dev->tpg, ctrl->val); in vivid_vid_cap_s_ctrl()
446 dev->must_blank[i] = ctrl->val < 100; in vivid_vid_cap_s_ctrl()
449 tpg_s_insert_sav(&dev->tpg, ctrl->val); in vivid_vid_cap_s_ctrl()
452 tpg_s_insert_eav(&dev->tpg, ctrl->val); in vivid_vid_cap_s_ctrl()
455 dev->sensor_hflip = ctrl->val; in vivid_vid_cap_s_ctrl()
456 tpg_s_hflip(&dev->tpg, dev->sensor_hflip ^ dev->hflip); in vivid_vid_cap_s_ctrl()
459 dev->sensor_vflip = ctrl->val; in vivid_vid_cap_s_ctrl()
460 tpg_s_vflip(&dev->tpg, dev->sensor_vflip ^ dev->vflip); in vivid_vid_cap_s_ctrl()
463 dev->reduced_fps = ctrl->val; in vivid_vid_cap_s_ctrl()
467 dev->has_crop_cap = ctrl->val; in vivid_vid_cap_s_ctrl()
471 dev->has_compose_cap = ctrl->val; in vivid_vid_cap_s_ctrl()
475 dev->has_scaler_cap = ctrl->val; in vivid_vid_cap_s_ctrl()
479 tpg_s_show_border(&dev->tpg, ctrl->val); in vivid_vid_cap_s_ctrl()
482 tpg_s_show_square(&dev->tpg, ctrl->val); in vivid_vid_cap_s_ctrl()
485 dev->std_aspect_ratio[dev->input] = ctrl->val; in vivid_vid_cap_s_ctrl()
486 tpg_s_video_aspect(&dev->tpg, vivid_get_video_aspect(dev)); in vivid_vid_cap_s_ctrl()
489 dev->dv_timings_signal_mode[dev->input] = in vivid_vid_cap_s_ctrl()
490 dev->ctrl_dv_timings_signal_mode->val; in vivid_vid_cap_s_ctrl()
491 dev->query_dv_timings[dev->input] = dev->ctrl_dv_timings->val; in vivid_vid_cap_s_ctrl()
493 dev->power_present = 0; in vivid_vid_cap_s_ctrl()
495 i < ARRAY_SIZE(dev->dv_timings_signal_mode); in vivid_vid_cap_s_ctrl()
497 if (dev->input_type[i] == HDMI) { in vivid_vid_cap_s_ctrl()
498 if (dev->dv_timings_signal_mode[i] != NO_SIGNAL) in vivid_vid_cap_s_ctrl()
499 dev->power_present |= (1 << j); in vivid_vid_cap_s_ctrl()
502 __v4l2_ctrl_s_ctrl(dev->ctrl_rx_power_present, in vivid_vid_cap_s_ctrl()
503 dev->power_present); in vivid_vid_cap_s_ctrl()
505 v4l2_ctrl_activate(dev->ctrl_dv_timings, in vivid_vid_cap_s_ctrl()
506 dev->dv_timings_signal_mode[dev->input] == in vivid_vid_cap_s_ctrl()
513 dev->dv_timings_aspect_ratio[dev->input] = ctrl->val; in vivid_vid_cap_s_ctrl()
514 tpg_s_video_aspect(&dev->tpg, vivid_get_video_aspect(dev)); in vivid_vid_cap_s_ctrl()
517 dev->tstamp_src_is_soe = ctrl->val; in vivid_vid_cap_s_ctrl()
518 dev->vb_vid_cap_q.timestamp_flags &= ~V4L2_BUF_FLAG_TSTAMP_SRC_MASK; in vivid_vid_cap_s_ctrl()
519 if (dev->tstamp_src_is_soe) in vivid_vid_cap_s_ctrl()
520 dev->vb_vid_cap_q.timestamp_flags |= V4L2_BUF_FLAG_TSTAMP_SRC_SOE; in vivid_vid_cap_s_ctrl()
523 dev->edid_max_blocks = ctrl->val; in vivid_vid_cap_s_ctrl()
524 if (dev->edid_blocks > dev->edid_max_blocks) in vivid_vid_cap_s_ctrl()
525 dev->edid_blocks = dev->edid_max_blocks; in vivid_vid_cap_s_ctrl()
607 .max = ARRAY_SIZE(vivid_ctrl_osd_mode_strings) - 2,
708 .max = ARRAY_SIZE(vivid_ctrl_tstamp_src_strings) - 2,
769 "DCI-P3",
781 .max = ARRAY_SIZE(vivid_ctrl_colorspace_strings) - 2,
793 "DCI-P3",
803 .max = ARRAY_SIZE(vivid_ctrl_xfer_func_strings) - 2,
809 "ITU-R 601",
826 .max = ARRAY_SIZE(vivid_ctrl_ycbcr_enc_strings) - 2,
831 "Hue 0-179",
832 "Hue 0-256",
841 .max = ARRAY_SIZE(vivid_ctrl_hsv_enc_strings) - 2,
857 .max = ARRAY_SIZE(vivid_ctrl_quantization_strings) - 2,
873 .name = "Limited RGB Range (16-235)",
884 struct vivid_dev *dev = container_of(ctrl->handler, struct vivid_dev, ctrl_hdl_loop_cap); in vivid_loop_cap_s_ctrl()
886 switch (ctrl->id) { in vivid_loop_cap_s_ctrl()
888 dev->loop_video = ctrl->val; in vivid_loop_cap_s_ctrl()
915 struct vivid_dev *dev = container_of(ctrl->handler, struct vivid_dev, ctrl_hdl_vbi_cap); in vivid_vbi_cap_s_ctrl()
917 switch (ctrl->id) { in vivid_vbi_cap_s_ctrl()
919 dev->vbi_cap_interlaced = ctrl->val; in vivid_vbi_cap_s_ctrl()
943 struct vivid_dev *dev = container_of(ctrl->handler, struct vivid_dev, ctrl_hdl_vid_out); in vivid_vid_out_s_ctrl()
944 struct v4l2_bt_timings *bt = &dev->dv_timings_out.bt; in vivid_vid_out_s_ctrl()
948 switch (ctrl->id) { in vivid_vid_out_s_ctrl()
950 dev->has_crop_out = ctrl->val; in vivid_vid_out_s_ctrl()
954 dev->has_compose_out = ctrl->val; in vivid_vid_out_s_ctrl()
958 dev->has_scaler_out = ctrl->val; in vivid_vid_out_s_ctrl()
962 dev->dvi_d_out = ctrl->val == V4L2_DV_TX_MODE_DVI_D; in vivid_vid_out_s_ctrl()
965 if (!dev->dvi_d_out && (bt->flags & V4L2_DV_FL_IS_CE_VIDEO)) { in vivid_vid_out_s_ctrl()
966 if (bt->width == 720 && bt->height <= 576) in vivid_vid_out_s_ctrl()
967 dev->colorspace_out = V4L2_COLORSPACE_SMPTE170M; in vivid_vid_out_s_ctrl()
969 dev->colorspace_out = V4L2_COLORSPACE_REC709; in vivid_vid_out_s_ctrl()
970 dev->quantization_out = V4L2_QUANTIZATION_DEFAULT; in vivid_vid_out_s_ctrl()
972 dev->colorspace_out = V4L2_COLORSPACE_SRGB; in vivid_vid_out_s_ctrl()
973 dev->quantization_out = dev->dvi_d_out ? in vivid_vid_out_s_ctrl()
977 if (dev->loop_video) in vivid_vid_out_s_ctrl()
981 if (dev->output_type[dev->output] != HDMI) in vivid_vid_out_s_ctrl()
984 dev->display_present[dev->output] = ctrl->val; in vivid_vid_out_s_ctrl()
985 for (i = 0, j = 0; i < dev->num_outputs; i++) in vivid_vid_out_s_ctrl()
986 if (dev->output_type[i] == HDMI) in vivid_vid_out_s_ctrl()
988 dev->display_present[i] << j++; in vivid_vid_out_s_ctrl()
990 __v4l2_ctrl_s_ctrl(dev->ctrl_tx_rxsense, display_present); in vivid_vid_out_s_ctrl()
992 if (dev->edid_blocks) { in vivid_vid_out_s_ctrl()
993 __v4l2_ctrl_s_ctrl(dev->ctrl_tx_edid_present, in vivid_vid_out_s_ctrl()
995 __v4l2_ctrl_s_ctrl(dev->ctrl_tx_hotplug, in vivid_vid_out_s_ctrl()
999 bus_idx = dev->cec_output2bus_map[dev->output]; in vivid_vid_out_s_ctrl()
1000 if (!dev->cec_tx_adap[bus_idx]) in vivid_vid_out_s_ctrl()
1003 if (ctrl->val && dev->edid_blocks) in vivid_vid_out_s_ctrl()
1004 cec_s_phys_addr(dev->cec_tx_adap[bus_idx], in vivid_vid_out_s_ctrl()
1005 dev->cec_tx_adap[bus_idx]->phys_addr, in vivid_vid_out_s_ctrl()
1008 cec_phys_addr_invalidate(dev->cec_tx_adap[bus_idx]); in vivid_vid_out_s_ctrl()
1063 struct vivid_dev *dev = container_of(ctrl->handler, struct vivid_dev, ctrl_hdl_streaming); in vivid_streaming_s_ctrl()
1066 switch (ctrl->id) { in vivid_streaming_s_ctrl()
1068 dev->dqbuf_error = true; in vivid_streaming_s_ctrl()
1071 dev->perc_dropped_buffers = ctrl->val; in vivid_streaming_s_ctrl()
1074 dev->queue_setup_error = true; in vivid_streaming_s_ctrl()
1077 dev->buf_prepare_error = true; in vivid_streaming_s_ctrl()
1080 dev->start_streaming_error = true; in vivid_streaming_s_ctrl()
1083 dev->req_validate_error = true; in vivid_streaming_s_ctrl()
1086 if (vb2_start_streaming_called(&dev->vb_vid_cap_q)) in vivid_streaming_s_ctrl()
1087 vb2_queue_error(&dev->vb_vid_cap_q); in vivid_streaming_s_ctrl()
1088 if (vb2_start_streaming_called(&dev->vb_vbi_cap_q)) in vivid_streaming_s_ctrl()
1089 vb2_queue_error(&dev->vb_vbi_cap_q); in vivid_streaming_s_ctrl()
1090 if (vb2_start_streaming_called(&dev->vb_vid_out_q)) in vivid_streaming_s_ctrl()
1091 vb2_queue_error(&dev->vb_vid_out_q); in vivid_streaming_s_ctrl()
1092 if (vb2_start_streaming_called(&dev->vb_vbi_out_q)) in vivid_streaming_s_ctrl()
1093 vb2_queue_error(&dev->vb_vbi_out_q); in vivid_streaming_s_ctrl()
1094 if (vb2_start_streaming_called(&dev->vb_sdr_cap_q)) in vivid_streaming_s_ctrl()
1095 vb2_queue_error(&dev->vb_sdr_cap_q); in vivid_streaming_s_ctrl()
1098 dev->seq_wrap = ctrl->val; in vivid_streaming_s_ctrl()
1101 dev->time_wrap = ctrl->val; in vivid_streaming_s_ctrl()
1102 if (ctrl->val == 0) { in vivid_streaming_s_ctrl()
1103 dev->time_wrap_offset = 0; in vivid_streaming_s_ctrl()
1110 * then we set the offset to ((1 << 32) - 16) * NSEC_PER_SEC). in vivid_streaming_s_ctrl()
1114 dev->time_wrap_offset = in vivid_streaming_s_ctrl()
1115 (0x100000000ULL - 16) * NSEC_PER_SEC - rem; in vivid_streaming_s_ctrl()
1198 /* SDTV Capture Controls */
1202 struct vivid_dev *dev = container_of(ctrl->handler, struct vivid_dev, ctrl_hdl_sdtv_cap); in vivid_sdtv_cap_s_ctrl()
1204 switch (ctrl->id) { in vivid_sdtv_cap_s_ctrl()
1206 dev->std_signal_mode[dev->input] = in vivid_sdtv_cap_s_ctrl()
1207 dev->ctrl_std_signal_mode->val; in vivid_sdtv_cap_s_ctrl()
1208 if (dev->std_signal_mode[dev->input] == SELECTED_STD) in vivid_sdtv_cap_s_ctrl()
1209 dev->query_std[dev->input] = in vivid_sdtv_cap_s_ctrl()
1210 vivid_standard[dev->ctrl_standard->val]; in vivid_sdtv_cap_s_ctrl()
1211 v4l2_ctrl_activate(dev->ctrl_standard, in vivid_sdtv_cap_s_ctrl()
1212 dev->std_signal_mode[dev->input] == in vivid_sdtv_cap_s_ctrl()
1232 "Cycle Through All Standards",
1241 .max = ARRAY_SIZE(vivid_ctrl_std_signal_mode_strings) - 2,
1261 struct vivid_dev *dev = container_of(ctrl->handler, struct vivid_dev, ctrl_hdl_radio_rx); in vivid_radio_rx_s_ctrl()
1263 switch (ctrl->id) { in vivid_radio_rx_s_ctrl()
1265 dev->radio_rx_hw_seek_mode = ctrl->val; in vivid_radio_rx_s_ctrl()
1268 dev->radio_rx_hw_seek_prog_lim = ctrl->val; in vivid_radio_rx_s_ctrl()
1271 dev->rds_gen.use_rbds = ctrl->val; in vivid_radio_rx_s_ctrl()
1274 dev->radio_rx_rds_controls = ctrl->val; in vivid_radio_rx_s_ctrl()
1275 dev->radio_rx_caps &= ~V4L2_CAP_READWRITE; in vivid_radio_rx_s_ctrl()
1276 dev->radio_rx_rds_use_alternates = false; in vivid_radio_rx_s_ctrl()
1277 if (!dev->radio_rx_rds_controls) { in vivid_radio_rx_s_ctrl()
1278 dev->radio_rx_caps |= V4L2_CAP_READWRITE; in vivid_radio_rx_s_ctrl()
1279 __v4l2_ctrl_s_ctrl(dev->radio_rx_rds_pty, 0); in vivid_radio_rx_s_ctrl()
1280 __v4l2_ctrl_s_ctrl(dev->radio_rx_rds_ta, 0); in vivid_radio_rx_s_ctrl()
1281 __v4l2_ctrl_s_ctrl(dev->radio_rx_rds_tp, 0); in vivid_radio_rx_s_ctrl()
1282 __v4l2_ctrl_s_ctrl(dev->radio_rx_rds_ms, 0); in vivid_radio_rx_s_ctrl()
1283 __v4l2_ctrl_s_ctrl_string(dev->radio_rx_rds_psname, ""); in vivid_radio_rx_s_ctrl()
1284 __v4l2_ctrl_s_ctrl_string(dev->radio_rx_rds_radiotext, ""); in vivid_radio_rx_s_ctrl()
1286 v4l2_ctrl_activate(dev->radio_rx_rds_pty, dev->radio_rx_rds_controls); in vivid_radio_rx_s_ctrl()
1287 v4l2_ctrl_activate(dev->radio_rx_rds_psname, dev->radio_rx_rds_controls); in vivid_radio_rx_s_ctrl()
1288 v4l2_ctrl_activate(dev->radio_rx_rds_radiotext, dev->radio_rx_rds_controls); in vivid_radio_rx_s_ctrl()
1289 v4l2_ctrl_activate(dev->radio_rx_rds_ta, dev->radio_rx_rds_controls); in vivid_radio_rx_s_ctrl()
1290 v4l2_ctrl_activate(dev->radio_rx_rds_tp, dev->radio_rx_rds_controls); in vivid_radio_rx_s_ctrl()
1291 v4l2_ctrl_activate(dev->radio_rx_rds_ms, dev->radio_rx_rds_controls); in vivid_radio_rx_s_ctrl()
1292 dev->radio_rx_dev.device_caps = dev->radio_rx_caps; in vivid_radio_rx_s_ctrl()
1295 dev->radio_rx_rds_enabled = ctrl->val; in vivid_radio_rx_s_ctrl()
1359 struct vivid_dev *dev = container_of(ctrl->handler, struct vivid_dev, ctrl_hdl_radio_tx); in vivid_radio_tx_s_ctrl()
1361 switch (ctrl->id) { in vivid_radio_tx_s_ctrl()
1363 dev->radio_tx_rds_controls = ctrl->val; in vivid_radio_tx_s_ctrl()
1364 dev->radio_tx_caps &= ~V4L2_CAP_READWRITE; in vivid_radio_tx_s_ctrl()
1365 if (!dev->radio_tx_rds_controls) in vivid_radio_tx_s_ctrl()
1366 dev->radio_tx_caps |= V4L2_CAP_READWRITE; in vivid_radio_tx_s_ctrl()
1367 dev->radio_tx_dev.device_caps = dev->radio_tx_caps; in vivid_radio_tx_s_ctrl()
1370 if (dev->radio_rx_rds_controls) in vivid_radio_tx_s_ctrl()
1371 v4l2_ctrl_s_ctrl(dev->radio_rx_rds_pty, ctrl->val); in vivid_radio_tx_s_ctrl()
1374 if (dev->radio_rx_rds_controls) in vivid_radio_tx_s_ctrl()
1375 v4l2_ctrl_s_ctrl_string(dev->radio_rx_rds_psname, ctrl->p_new.p_char); in vivid_radio_tx_s_ctrl()
1378 if (dev->radio_rx_rds_controls) in vivid_radio_tx_s_ctrl()
1379 v4l2_ctrl_s_ctrl_string(dev->radio_rx_rds_radiotext, ctrl->p_new.p_char); in vivid_radio_tx_s_ctrl()
1382 if (dev->radio_rx_rds_controls) in vivid_radio_tx_s_ctrl()
1383 v4l2_ctrl_s_ctrl(dev->radio_rx_rds_ta, ctrl->val); in vivid_radio_tx_s_ctrl()
1386 if (dev->radio_rx_rds_controls) in vivid_radio_tx_s_ctrl()
1387 v4l2_ctrl_s_ctrl(dev->radio_rx_rds_tp, ctrl->val); in vivid_radio_tx_s_ctrl()
1390 if (dev->radio_rx_rds_controls) in vivid_radio_tx_s_ctrl()
1391 v4l2_ctrl_s_ctrl(dev->radio_rx_rds_ms, ctrl->val); in vivid_radio_tx_s_ctrl()
1416 struct vivid_dev *dev = container_of(ctrl->handler, struct vivid_dev, ctrl_hdl_sdr_cap); in vivid_sdr_cap_s_ctrl()
1418 switch (ctrl->id) { in vivid_sdr_cap_s_ctrl()
1420 dev->sdr_fm_deviation = ctrl->val; in vivid_sdr_cap_s_ctrl()
1445 struct vivid_dev *dev = container_of(ctrl->handler, struct vivid_dev, in vivid_meta_cap_s_ctrl()
1448 switch (ctrl->id) { in vivid_meta_cap_s_ctrl()
1450 dev->meta_pts = ctrl->val; in vivid_meta_cap_s_ctrl()
1453 dev->meta_scr = ctrl->val; in vivid_meta_cap_s_ctrl()
1495 struct v4l2_ctrl_handler *hdl_user_gen = &dev->ctrl_hdl_user_gen; in vivid_create_controls()
1496 struct v4l2_ctrl_handler *hdl_user_vid = &dev->ctrl_hdl_user_vid; in vivid_create_controls()
1497 struct v4l2_ctrl_handler *hdl_user_aud = &dev->ctrl_hdl_user_aud; in vivid_create_controls()
1498 struct v4l2_ctrl_handler *hdl_streaming = &dev->ctrl_hdl_streaming; in vivid_create_controls()
1499 struct v4l2_ctrl_handler *hdl_sdtv_cap = &dev->ctrl_hdl_sdtv_cap; in vivid_create_controls()
1500 struct v4l2_ctrl_handler *hdl_loop_cap = &dev->ctrl_hdl_loop_cap; in vivid_create_controls()
1501 struct v4l2_ctrl_handler *hdl_fb = &dev->ctrl_hdl_fb; in vivid_create_controls()
1502 struct v4l2_ctrl_handler *hdl_vid_cap = &dev->ctrl_hdl_vid_cap; in vivid_create_controls()
1503 struct v4l2_ctrl_handler *hdl_vid_out = &dev->ctrl_hdl_vid_out; in vivid_create_controls()
1504 struct v4l2_ctrl_handler *hdl_vbi_cap = &dev->ctrl_hdl_vbi_cap; in vivid_create_controls()
1505 struct v4l2_ctrl_handler *hdl_vbi_out = &dev->ctrl_hdl_vbi_out; in vivid_create_controls()
1506 struct v4l2_ctrl_handler *hdl_radio_rx = &dev->ctrl_hdl_radio_rx; in vivid_create_controls()
1507 struct v4l2_ctrl_handler *hdl_radio_tx = &dev->ctrl_hdl_radio_tx; in vivid_create_controls()
1508 struct v4l2_ctrl_handler *hdl_sdr_cap = &dev->ctrl_hdl_sdr_cap; in vivid_create_controls()
1509 struct v4l2_ctrl_handler *hdl_meta_cap = &dev->ctrl_hdl_meta_cap; in vivid_create_controls()
1510 struct v4l2_ctrl_handler *hdl_meta_out = &dev->ctrl_hdl_meta_out; in vivid_create_controls()
1511 struct v4l2_ctrl_handler *hdl_tch_cap = &dev->ctrl_hdl_touch_cap; in vivid_create_controls()
1538 if (!no_error_inj || dev->has_fb || dev->num_hdmi_outputs) in vivid_create_controls()
1559 dev->volume = v4l2_ctrl_new_std(hdl_user_aud, NULL, in vivid_create_controls()
1561 dev->mute = v4l2_ctrl_new_std(hdl_user_aud, NULL, in vivid_create_controls()
1563 if (dev->has_vid_cap) { in vivid_create_controls()
1564 dev->brightness = v4l2_ctrl_new_std(hdl_user_vid, &vivid_user_vid_ctrl_ops, in vivid_create_controls()
1567 dev->input_brightness[i] = 128; in vivid_create_controls()
1568 dev->contrast = v4l2_ctrl_new_std(hdl_user_vid, &vivid_user_vid_ctrl_ops, in vivid_create_controls()
1570 dev->saturation = v4l2_ctrl_new_std(hdl_user_vid, &vivid_user_vid_ctrl_ops, in vivid_create_controls()
1572 dev->hue = v4l2_ctrl_new_std(hdl_user_vid, &vivid_user_vid_ctrl_ops, in vivid_create_controls()
1573 V4L2_CID_HUE, -128, 128, 1, 0); in vivid_create_controls()
1578 dev->autogain = v4l2_ctrl_new_std(hdl_user_vid, &vivid_user_vid_ctrl_ops, in vivid_create_controls()
1580 dev->gain = v4l2_ctrl_new_std(hdl_user_vid, &vivid_user_vid_ctrl_ops, in vivid_create_controls()
1582 dev->alpha = v4l2_ctrl_new_std(hdl_user_vid, &vivid_user_vid_ctrl_ops, in vivid_create_controls()
1585 dev->button = v4l2_ctrl_new_custom(hdl_user_gen, &vivid_ctrl_button, NULL); in vivid_create_controls()
1586 dev->int32 = v4l2_ctrl_new_custom(hdl_user_gen, &vivid_ctrl_int32, NULL); in vivid_create_controls()
1587 dev->int64 = v4l2_ctrl_new_custom(hdl_user_gen, &vivid_ctrl_int64, NULL); in vivid_create_controls()
1588 dev->boolean = v4l2_ctrl_new_custom(hdl_user_gen, &vivid_ctrl_boolean, NULL); in vivid_create_controls()
1589 dev->menu = v4l2_ctrl_new_custom(hdl_user_gen, &vivid_ctrl_menu, NULL); in vivid_create_controls()
1590 dev->string = v4l2_ctrl_new_custom(hdl_user_gen, &vivid_ctrl_string, NULL); in vivid_create_controls()
1591 dev->bitmask = v4l2_ctrl_new_custom(hdl_user_gen, &vivid_ctrl_bitmask, NULL); in vivid_create_controls()
1592 dev->int_menu = v4l2_ctrl_new_custom(hdl_user_gen, &vivid_ctrl_int_menu, NULL); in vivid_create_controls()
1598 if (dev->has_vid_cap) { in vivid_create_controls()
1609 dev->test_pattern = v4l2_ctrl_new_custom(hdl_vid_cap, in vivid_create_controls()
1623 dev->ctrl_has_crop_cap = v4l2_ctrl_new_custom(hdl_vid_cap, in vivid_create_controls()
1625 dev->ctrl_has_compose_cap = v4l2_ctrl_new_custom(hdl_vid_cap, in vivid_create_controls()
1627 dev->ctrl_has_scaler_cap = v4l2_ctrl_new_custom(hdl_vid_cap, in vivid_create_controls()
1632 dev->colorspace = v4l2_ctrl_new_custom(hdl_vid_cap, in vivid_create_controls()
1641 if (dev->has_vid_out && show_ccs_out) { in vivid_create_controls()
1642 dev->ctrl_has_crop_out = v4l2_ctrl_new_custom(hdl_vid_out, in vivid_create_controls()
1644 dev->ctrl_has_compose_out = v4l2_ctrl_new_custom(hdl_vid_out, in vivid_create_controls()
1646 dev->ctrl_has_scaler_out = v4l2_ctrl_new_custom(hdl_vid_out, in vivid_create_controls()
1651 * Testing this driver with v4l2-compliance will trigger the error in vivid_create_controls()
1671 if (has_sdtv && (dev->has_vid_cap || dev->has_vbi_cap)) { in vivid_create_controls()
1672 if (dev->has_vid_cap) in vivid_create_controls()
1674 dev->ctrl_std_signal_mode = v4l2_ctrl_new_custom(hdl_sdtv_cap, in vivid_create_controls()
1676 dev->ctrl_standard = v4l2_ctrl_new_custom(hdl_sdtv_cap, in vivid_create_controls()
1678 if (dev->ctrl_std_signal_mode) in vivid_create_controls()
1679 v4l2_ctrl_cluster(2, &dev->ctrl_std_signal_mode); in vivid_create_controls()
1680 if (dev->has_raw_vbi_cap) in vivid_create_controls()
1684 if (dev->num_hdmi_inputs) { in vivid_create_controls()
1685 s64 hdmi_input_mask = GENMASK(dev->num_hdmi_inputs - 1, 0); in vivid_create_controls()
1687 dev->ctrl_dv_timings_signal_mode = v4l2_ctrl_new_custom(hdl_vid_cap, in vivid_create_controls()
1690 vivid_ctrl_dv_timings.max = dev->query_dv_timings_size - 1; in vivid_create_controls()
1692 (const char * const *)dev->query_dv_timings_qmenu; in vivid_create_controls()
1693 dev->ctrl_dv_timings = v4l2_ctrl_new_custom(hdl_vid_cap, in vivid_create_controls()
1695 if (dev->ctrl_dv_timings_signal_mode) in vivid_create_controls()
1696 v4l2_ctrl_cluster(2, &dev->ctrl_dv_timings_signal_mode); in vivid_create_controls()
1700 dev->real_rgb_range_cap = v4l2_ctrl_new_custom(hdl_vid_cap, in vivid_create_controls()
1702 dev->rgb_range_cap = v4l2_ctrl_new_std_menu(hdl_vid_cap, in vivid_create_controls()
1706 dev->ctrl_rx_power_present = v4l2_ctrl_new_std(hdl_vid_cap, in vivid_create_controls()
1711 if (dev->num_hdmi_outputs) { in vivid_create_controls()
1712 s64 hdmi_output_mask = GENMASK(dev->num_hdmi_outputs - 1, 0); in vivid_create_controls()
1718 dev->ctrl_tx_rgb_range = v4l2_ctrl_new_std_menu(hdl_vid_out, NULL, in vivid_create_controls()
1721 dev->ctrl_tx_mode = v4l2_ctrl_new_std_menu(hdl_vid_out, NULL, in vivid_create_controls()
1724 dev->ctrl_display_present = v4l2_ctrl_new_custom(hdl_vid_out, in vivid_create_controls()
1726 dev->ctrl_tx_hotplug = v4l2_ctrl_new_std(hdl_vid_out, in vivid_create_controls()
1729 dev->ctrl_tx_rxsense = v4l2_ctrl_new_std(hdl_vid_out, in vivid_create_controls()
1732 dev->ctrl_tx_edid_present = v4l2_ctrl_new_std(hdl_vid_out, in vivid_create_controls()
1736 if ((dev->has_vid_cap && dev->has_vid_out) || in vivid_create_controls()
1737 (dev->has_vbi_cap && dev->has_vbi_out)) in vivid_create_controls()
1740 if (dev->has_fb) in vivid_create_controls()
1743 if (dev->has_radio_rx) { in vivid_create_controls()
1750 dev->radio_rx_rds_pty = v4l2_ctrl_new_std(hdl_radio_rx, in vivid_create_controls()
1753 dev->radio_rx_rds_psname = v4l2_ctrl_new_std(hdl_radio_rx, in vivid_create_controls()
1756 dev->radio_rx_rds_radiotext = v4l2_ctrl_new_std(hdl_radio_rx, in vivid_create_controls()
1759 dev->radio_rx_rds_ta = v4l2_ctrl_new_std(hdl_radio_rx, in vivid_create_controls()
1762 dev->radio_rx_rds_tp = v4l2_ctrl_new_std(hdl_radio_rx, in vivid_create_controls()
1765 dev->radio_rx_rds_ms = v4l2_ctrl_new_std(hdl_radio_rx, in vivid_create_controls()
1769 if (dev->has_radio_tx) { in vivid_create_controls()
1772 dev->radio_tx_rds_pi = v4l2_ctrl_new_std(hdl_radio_tx, in vivid_create_controls()
1775 dev->radio_tx_rds_pty = v4l2_ctrl_new_std(hdl_radio_tx, in vivid_create_controls()
1778 dev->radio_tx_rds_psname = v4l2_ctrl_new_std(hdl_radio_tx, in vivid_create_controls()
1781 if (dev->radio_tx_rds_psname) in vivid_create_controls()
1782 v4l2_ctrl_s_ctrl_string(dev->radio_tx_rds_psname, "VIVID-TX"); in vivid_create_controls()
1783 dev->radio_tx_rds_radiotext = v4l2_ctrl_new_std(hdl_radio_tx, in vivid_create_controls()
1786 if (dev->radio_tx_rds_radiotext) in vivid_create_controls()
1787 v4l2_ctrl_s_ctrl_string(dev->radio_tx_rds_radiotext, in vivid_create_controls()
1789 dev->radio_tx_rds_mono_stereo = v4l2_ctrl_new_std(hdl_radio_tx, in vivid_create_controls()
1792 dev->radio_tx_rds_art_head = v4l2_ctrl_new_std(hdl_radio_tx, in vivid_create_controls()
1795 dev->radio_tx_rds_compressed = v4l2_ctrl_new_std(hdl_radio_tx, in vivid_create_controls()
1798 dev->radio_tx_rds_dyn_pty = v4l2_ctrl_new_std(hdl_radio_tx, in vivid_create_controls()
1801 dev->radio_tx_rds_ta = v4l2_ctrl_new_std(hdl_radio_tx, in vivid_create_controls()
1804 dev->radio_tx_rds_tp = v4l2_ctrl_new_std(hdl_radio_tx, in vivid_create_controls()
1807 dev->radio_tx_rds_ms = v4l2_ctrl_new_std(hdl_radio_tx, in vivid_create_controls()
1811 if (dev->has_sdr_cap) { in vivid_create_controls()
1815 if (dev->has_meta_cap) { in vivid_create_controls()
1822 if (hdl_user_gen->error) in vivid_create_controls()
1823 return hdl_user_gen->error; in vivid_create_controls()
1824 if (hdl_user_vid->error) in vivid_create_controls()
1825 return hdl_user_vid->error; in vivid_create_controls()
1826 if (hdl_user_aud->error) in vivid_create_controls()
1827 return hdl_user_aud->error; in vivid_create_controls()
1828 if (hdl_streaming->error) in vivid_create_controls()
1829 return hdl_streaming->error; in vivid_create_controls()
1830 if (hdl_sdr_cap->error) in vivid_create_controls()
1831 return hdl_sdr_cap->error; in vivid_create_controls()
1832 if (hdl_loop_cap->error) in vivid_create_controls()
1833 return hdl_loop_cap->error; in vivid_create_controls()
1835 if (dev->autogain) in vivid_create_controls()
1836 v4l2_ctrl_auto_cluster(2, &dev->autogain, 0, true); in vivid_create_controls()
1838 if (dev->has_vid_cap) { in vivid_create_controls()
1846 if (hdl_vid_cap->error) in vivid_create_controls()
1847 return hdl_vid_cap->error; in vivid_create_controls()
1848 dev->vid_cap_dev.ctrl_handler = hdl_vid_cap; in vivid_create_controls()
1850 if (dev->has_vid_out) { in vivid_create_controls()
1855 if (hdl_vid_out->error) in vivid_create_controls()
1856 return hdl_vid_out->error; in vivid_create_controls()
1857 dev->vid_out_dev.ctrl_handler = hdl_vid_out; in vivid_create_controls()
1859 if (dev->has_vbi_cap) { in vivid_create_controls()
1864 if (hdl_vbi_cap->error) in vivid_create_controls()
1865 return hdl_vbi_cap->error; in vivid_create_controls()
1866 dev->vbi_cap_dev.ctrl_handler = hdl_vbi_cap; in vivid_create_controls()
1868 if (dev->has_vbi_out) { in vivid_create_controls()
1871 if (hdl_vbi_out->error) in vivid_create_controls()
1872 return hdl_vbi_out->error; in vivid_create_controls()
1873 dev->vbi_out_dev.ctrl_handler = hdl_vbi_out; in vivid_create_controls()
1875 if (dev->has_radio_rx) { in vivid_create_controls()
1878 if (hdl_radio_rx->error) in vivid_create_controls()
1879 return hdl_radio_rx->error; in vivid_create_controls()
1880 dev->radio_rx_dev.ctrl_handler = hdl_radio_rx; in vivid_create_controls()
1882 if (dev->has_radio_tx) { in vivid_create_controls()
1885 if (hdl_radio_tx->error) in vivid_create_controls()
1886 return hdl_radio_tx->error; in vivid_create_controls()
1887 dev->radio_tx_dev.ctrl_handler = hdl_radio_tx; in vivid_create_controls()
1889 if (dev->has_sdr_cap) { in vivid_create_controls()
1892 if (hdl_sdr_cap->error) in vivid_create_controls()
1893 return hdl_sdr_cap->error; in vivid_create_controls()
1894 dev->sdr_cap_dev.ctrl_handler = hdl_sdr_cap; in vivid_create_controls()
1896 if (dev->has_meta_cap) { in vivid_create_controls()
1899 if (hdl_meta_cap->error) in vivid_create_controls()
1900 return hdl_meta_cap->error; in vivid_create_controls()
1901 dev->meta_cap_dev.ctrl_handler = hdl_meta_cap; in vivid_create_controls()
1903 if (dev->has_meta_out) { in vivid_create_controls()
1906 if (hdl_meta_out->error) in vivid_create_controls()
1907 return hdl_meta_out->error; in vivid_create_controls()
1908 dev->meta_out_dev.ctrl_handler = hdl_meta_out; in vivid_create_controls()
1910 if (dev->has_touch_cap) { in vivid_create_controls()
1913 if (hdl_tch_cap->error) in vivid_create_controls()
1914 return hdl_tch_cap->error; in vivid_create_controls()
1915 dev->touch_cap_dev.ctrl_handler = hdl_tch_cap; in vivid_create_controls()
1922 v4l2_ctrl_handler_free(&dev->ctrl_hdl_vid_cap); in vivid_free_controls()
1923 v4l2_ctrl_handler_free(&dev->ctrl_hdl_vid_out); in vivid_free_controls()
1924 v4l2_ctrl_handler_free(&dev->ctrl_hdl_vbi_cap); in vivid_free_controls()
1925 v4l2_ctrl_handler_free(&dev->ctrl_hdl_vbi_out); in vivid_free_controls()
1926 v4l2_ctrl_handler_free(&dev->ctrl_hdl_radio_rx); in vivid_free_controls()
1927 v4l2_ctrl_handler_free(&dev->ctrl_hdl_radio_tx); in vivid_free_controls()
1928 v4l2_ctrl_handler_free(&dev->ctrl_hdl_sdr_cap); in vivid_free_controls()
1929 v4l2_ctrl_handler_free(&dev->ctrl_hdl_user_gen); in vivid_free_controls()
1930 v4l2_ctrl_handler_free(&dev->ctrl_hdl_user_vid); in vivid_free_controls()
1931 v4l2_ctrl_handler_free(&dev->ctrl_hdl_user_aud); in vivid_free_controls()
1932 v4l2_ctrl_handler_free(&dev->ctrl_hdl_streaming); in vivid_free_controls()
1933 v4l2_ctrl_handler_free(&dev->ctrl_hdl_sdtv_cap); in vivid_free_controls()
1934 v4l2_ctrl_handler_free(&dev->ctrl_hdl_loop_cap); in vivid_free_controls()
1935 v4l2_ctrl_handler_free(&dev->ctrl_hdl_fb); in vivid_free_controls()
1936 v4l2_ctrl_handler_free(&dev->ctrl_hdl_meta_cap); in vivid_free_controls()
1937 v4l2_ctrl_handler_free(&dev->ctrl_hdl_meta_out); in vivid_free_controls()
1938 v4l2_ctrl_handler_free(&dev->ctrl_hdl_touch_cap); in vivid_free_controls()