705 lines · c
1/* SPDX-License-Identifier: GPL-2.0-only */2/*3 * vivid-core.h - core datastructures4 *5 * Copyright 2014 Cisco Systems, Inc. and/or its affiliates. All rights reserved.6 */7 8#ifndef _VIVID_CORE_H_9#define _VIVID_CORE_H_10 11#include <linux/fb.h>12#include <linux/workqueue.h>13#include <media/cec.h>14#include <media/videobuf2-v4l2.h>15#include <media/v4l2-device.h>16#include <media/v4l2-dev.h>17#include <media/v4l2-ctrls.h>18#include <media/tpg/v4l2-tpg.h>19#include "vivid-rds-gen.h"20#include "vivid-vbi-gen.h"21 22#define dprintk(dev, level, fmt, arg...) \23 v4l2_dbg(level, vivid_debug, &dev->v4l2_dev, fmt, ## arg)24 25/* The maximum number of inputs */26#define MAX_INPUTS 1627/* The maximum number of outputs */28#define MAX_OUTPUTS 1629/* The maximum number of video capture buffers */30#define MAX_VID_CAP_BUFFERS 6431/* The maximum up or down scaling factor is 4 */32#define MAX_ZOOM 433/* The maximum image width/height are set to 4K DMT */34#define MAX_WIDTH 409635#define MAX_HEIGHT 216036/* The minimum image width/height */37#define MIN_WIDTH 1638#define MIN_HEIGHT MIN_WIDTH39/* Pixel Array control divider */40#define PIXEL_ARRAY_DIV MIN_WIDTH41/* The data_offset of plane 0 for the multiplanar formats */42#define PLANE0_DATA_OFFSET 12843 44/* The supported TV frequency range in MHz */45#define MIN_TV_FREQ (44U * 16U)46#define MAX_TV_FREQ (958U * 16U)47 48/* The number of samples returned in every SDR buffer */49#define SDR_CAP_SAMPLES_PER_BUF 0x400050 51/* used by the threads to know when to resync internal counters */52#define JIFFIES_PER_DAY (3600U * 24U * HZ)53#define JIFFIES_RESYNC (JIFFIES_PER_DAY * (0xf0000000U / JIFFIES_PER_DAY))54 55/*56 * Maximum number of HDMI inputs allowed by vivid, due to limitations57 * of the Physical Address in the EDID and used by CEC we stop at 1558 * inputs and outputs.59 */60#define MAX_HDMI_INPUTS 1561#define MAX_HDMI_OUTPUTS 1562 63/* Maximum number of S-Video inputs allowed by vivid */64#define MAX_SVID_INPUTS 1665 66/* The maximum number of items in a menu control */67#define MAX_MENU_ITEMS BITS_PER_LONG_LONG68 69/* Number of fixed menu items in the 'Connected To' menu controls */70#define FIXED_MENU_ITEMS 271 72/* The maximum number of vivid devices */73#define VIVID_MAX_DEVS CONFIG_VIDEO_VIVID_MAX_DEVS74 75extern const struct v4l2_rect vivid_min_rect;76extern const struct v4l2_rect vivid_max_rect;77extern unsigned vivid_debug;78 79/*80 * NULL-terminated string array for the HDMI 'Connected To' menu controls81 * with the list of possible HDMI outputs.82 *83 * The first two items are fixed ("TPG" and "None").84 */85extern char *vivid_ctrl_hdmi_to_output_strings[1 + MAX_MENU_ITEMS];86/* Menu control skip mask of all HDMI outputs that are in use */87extern u64 hdmi_to_output_menu_skip_mask;88/*89 * Bitmask of which vivid instances need to update any connected90 * HDMI outputs.91 */92extern u64 hdmi_input_update_outputs_mask;93/*94 * Spinlock for access to hdmi_to_output_menu_skip_mask and95 * hdmi_input_update_outputs_mask.96 */97extern spinlock_t hdmi_output_skip_mask_lock;98/*99 * Workqueue that updates the menu controls whenever the HDMI menu skip mask100 * changes.101 */102extern struct workqueue_struct *update_hdmi_ctrls_workqueue;103 104/*105 * The HDMI menu control value (index in the menu list) maps to an HDMI106 * output that is part of the given vivid_dev instance and has the given107 * output index (as returned by VIDIOC_G_OUTPUT).108 *109 * NULL/0 if not available.110 */111extern struct vivid_dev *vivid_ctrl_hdmi_to_output_instance[MAX_MENU_ITEMS];112extern unsigned int vivid_ctrl_hdmi_to_output_index[MAX_MENU_ITEMS];113 114/*115 * NULL-terminated string array for the S-Video 'Connected To' menu controls116 * with the list of possible S-Video outputs.117 *118 * The first two items are fixed ("TPG" and "None").119 */120extern char *vivid_ctrl_svid_to_output_strings[1 + MAX_MENU_ITEMS];121/* Menu control skip mask of all S-Video outputs that are in use */122extern u64 svid_to_output_menu_skip_mask;123/* Spinlock for access to svid_to_output_menu_skip_mask */124extern spinlock_t svid_output_skip_mask_lock;125/*126 * Workqueue that updates the menu controls whenever the S-Video menu skip mask127 * changes.128 */129extern struct workqueue_struct *update_svid_ctrls_workqueue;130 131/*132 * The S-Video menu control value (index in the menu list) maps to an S-Video133 * output that is part of the given vivid_dev instance and has the given134 * output index (as returned by VIDIOC_G_OUTPUT).135 *136 * NULL/0 if not available.137 */138extern struct vivid_dev *vivid_ctrl_svid_to_output_instance[MAX_MENU_ITEMS];139extern unsigned int vivid_ctrl_svid_to_output_index[MAX_MENU_ITEMS];140 141extern struct vivid_dev *vivid_devs[VIVID_MAX_DEVS];142extern unsigned int n_devs;143 144struct vivid_fmt {145 u32 fourcc; /* v4l2 format id */146 enum tgp_color_enc color_enc;147 bool can_do_overlay;148 u8 vdownsampling[TPG_MAX_PLANES];149 u32 alpha_mask;150 u8 planes;151 u8 buffers;152 u32 data_offset[TPG_MAX_PLANES];153 u32 bit_depth[TPG_MAX_PLANES];154};155 156extern struct vivid_fmt vivid_formats[];157 158/* buffer for one video frame */159struct vivid_buffer {160 /* common v4l buffer stuff -- must be first */161 struct vb2_v4l2_buffer vb;162 struct list_head list;163};164 165enum vivid_input {166 WEBCAM,167 TV,168 SVID,169 HDMI,170};171 172enum vivid_signal_mode {173 CURRENT_DV_TIMINGS,174 CURRENT_STD = CURRENT_DV_TIMINGS,175 NO_SIGNAL,176 NO_LOCK,177 OUT_OF_RANGE,178 SELECTED_DV_TIMINGS,179 SELECTED_STD = SELECTED_DV_TIMINGS,180 CYCLE_DV_TIMINGS,181 CYCLE_STD = CYCLE_DV_TIMINGS,182 CUSTOM_DV_TIMINGS,183};184 185enum vivid_colorspace {186 VIVID_CS_170M,187 VIVID_CS_709,188 VIVID_CS_SRGB,189 VIVID_CS_OPRGB,190 VIVID_CS_2020,191 VIVID_CS_DCI_P3,192 VIVID_CS_240M,193 VIVID_CS_SYS_M,194 VIVID_CS_SYS_BG,195};196 197#define VIVID_INVALID_SIGNAL(mode) \198 ((mode) == NO_SIGNAL || (mode) == NO_LOCK || (mode) == OUT_OF_RANGE)199 200struct vivid_cec_xfer {201 struct cec_adapter *adap;202 u8 msg[CEC_MAX_MSG_SIZE];203 u32 len;204 u32 sft;205};206 207struct vivid_dev {208 u8 inst;209 struct v4l2_device v4l2_dev;210#ifdef CONFIG_MEDIA_CONTROLLER211 struct media_device mdev;212 struct media_pad vid_cap_pad;213 struct media_pad vid_out_pad;214 struct media_pad vbi_cap_pad;215 struct media_pad vbi_out_pad;216 struct media_pad sdr_cap_pad;217 struct media_pad meta_cap_pad;218 struct media_pad meta_out_pad;219 struct media_pad touch_cap_pad;220#endif221 struct v4l2_ctrl_handler ctrl_hdl_user_gen;222 struct v4l2_ctrl_handler ctrl_hdl_user_vid;223 struct v4l2_ctrl_handler ctrl_hdl_user_aud;224 struct v4l2_ctrl_handler ctrl_hdl_streaming;225 struct v4l2_ctrl_handler ctrl_hdl_sdtv_cap;226 struct v4l2_ctrl_handler ctrl_hdl_loop_cap;227 struct v4l2_ctrl_handler ctrl_hdl_fb;228 struct video_device vid_cap_dev;229 struct v4l2_ctrl_handler ctrl_hdl_vid_cap;230 struct video_device vid_out_dev;231 struct v4l2_ctrl_handler ctrl_hdl_vid_out;232 struct video_device vbi_cap_dev;233 struct v4l2_ctrl_handler ctrl_hdl_vbi_cap;234 struct video_device vbi_out_dev;235 struct v4l2_ctrl_handler ctrl_hdl_vbi_out;236 struct video_device radio_rx_dev;237 struct v4l2_ctrl_handler ctrl_hdl_radio_rx;238 struct video_device radio_tx_dev;239 struct v4l2_ctrl_handler ctrl_hdl_radio_tx;240 struct video_device sdr_cap_dev;241 struct v4l2_ctrl_handler ctrl_hdl_sdr_cap;242 struct video_device meta_cap_dev;243 struct v4l2_ctrl_handler ctrl_hdl_meta_cap;244 struct video_device meta_out_dev;245 struct v4l2_ctrl_handler ctrl_hdl_meta_out;246 struct video_device touch_cap_dev;247 struct v4l2_ctrl_handler ctrl_hdl_touch_cap;248 249 spinlock_t slock;250 struct mutex mutex;251 struct work_struct update_hdmi_ctrl_work;252 struct work_struct update_svid_ctrl_work;253 254 /* capabilities */255 u32 vid_cap_caps;256 u32 vid_out_caps;257 u32 vbi_cap_caps;258 u32 vbi_out_caps;259 u32 sdr_cap_caps;260 u32 radio_rx_caps;261 u32 radio_tx_caps;262 u32 meta_cap_caps;263 u32 meta_out_caps;264 u32 touch_cap_caps;265 266 /* supported features */267 bool multiplanar;268 u8 num_inputs;269 u8 num_hdmi_inputs;270 u8 num_svid_inputs;271 u8 input_type[MAX_INPUTS];272 u8 input_name_counter[MAX_INPUTS];273 u8 num_outputs;274 u8 num_hdmi_outputs;275 u8 output_type[MAX_OUTPUTS];276 u8 output_name_counter[MAX_OUTPUTS];277 bool has_audio_inputs;278 bool has_audio_outputs;279 bool has_vid_cap;280 bool has_vid_out;281 bool has_vbi_cap;282 bool has_raw_vbi_cap;283 bool has_sliced_vbi_cap;284 bool has_vbi_out;285 bool has_raw_vbi_out;286 bool has_sliced_vbi_out;287 bool has_radio_rx;288 bool has_radio_tx;289 bool has_sdr_cap;290 bool has_fb;291 bool has_meta_cap;292 bool has_meta_out;293 bool has_tv_tuner;294 bool has_touch_cap;295 296 /* Output index (0-MAX_OUTPUTS) to vivid instance of connected input */297 struct vivid_dev *output_to_input_instance[MAX_OUTPUTS];298 /* Output index (0-MAX_OUTPUTS) to input index (0-MAX_INPUTS) of connected input */299 u8 output_to_input_index[MAX_OUTPUTS];300 /* Output index (0-MAX_OUTPUTS) to HDMI or S-Video output index (0-MAX_HDMI/SVID_OUTPUTS) */301 u8 output_to_iface_index[MAX_OUTPUTS];302 /* ctrl_hdmi_to_output or ctrl_svid_to_output control value for each input */303 s32 input_is_connected_to_output[MAX_INPUTS];304 /* HDMI index (0-MAX_HDMI_OUTPUTS) to output index (0-MAX_OUTPUTS) */305 u8 hdmi_index_to_output_index[MAX_HDMI_OUTPUTS];306 /* HDMI index (0-MAX_HDMI_INPUTS) to input index (0-MAX_INPUTS) */307 u8 hdmi_index_to_input_index[MAX_HDMI_INPUTS];308 /* S-Video index (0-MAX_SVID_INPUTS) to input index (0-MAX_INPUTS) */309 u8 svid_index_to_input_index[MAX_SVID_INPUTS];310 311 /* controls */312 struct v4l2_ctrl *brightness;313 struct v4l2_ctrl *contrast;314 struct v4l2_ctrl *saturation;315 struct v4l2_ctrl *hue;316 struct {317 /* autogain/gain cluster */318 struct v4l2_ctrl *autogain;319 struct v4l2_ctrl *gain;320 };321 struct v4l2_ctrl *volume;322 struct v4l2_ctrl *mute;323 struct v4l2_ctrl *alpha;324 struct v4l2_ctrl *button;325 struct v4l2_ctrl *boolean;326 struct v4l2_ctrl *int32;327 struct v4l2_ctrl *int64;328 struct v4l2_ctrl *menu;329 struct v4l2_ctrl *string;330 struct v4l2_ctrl *bitmask;331 struct v4l2_ctrl *int_menu;332 struct v4l2_ctrl *ro_int32;333 struct v4l2_ctrl *pixel_array;334 struct v4l2_ctrl *test_pattern;335 struct v4l2_ctrl *colorspace;336 struct v4l2_ctrl *rgb_range_cap;337 struct v4l2_ctrl *real_rgb_range_cap;338 struct {339 /* std_signal_mode/standard cluster */340 struct v4l2_ctrl *ctrl_std_signal_mode;341 struct v4l2_ctrl *ctrl_standard;342 };343 struct {344 /* dv_timings_signal_mode/timings cluster */345 struct v4l2_ctrl *ctrl_dv_timings_signal_mode;346 struct v4l2_ctrl *ctrl_dv_timings;347 };348 struct v4l2_ctrl *ctrl_has_crop_cap;349 struct v4l2_ctrl *ctrl_has_compose_cap;350 struct v4l2_ctrl *ctrl_has_scaler_cap;351 struct v4l2_ctrl *ctrl_has_crop_out;352 struct v4l2_ctrl *ctrl_has_compose_out;353 struct v4l2_ctrl *ctrl_has_scaler_out;354 struct v4l2_ctrl *ctrl_tx_mode;355 struct v4l2_ctrl *ctrl_tx_rgb_range;356 struct v4l2_ctrl *ctrl_tx_edid_present;357 struct v4l2_ctrl *ctrl_tx_hotplug;358 struct v4l2_ctrl *ctrl_tx_rxsense;359 360 struct v4l2_ctrl *ctrl_rx_power_present;361 362 struct v4l2_ctrl *radio_tx_rds_pi;363 struct v4l2_ctrl *radio_tx_rds_pty;364 struct v4l2_ctrl *radio_tx_rds_mono_stereo;365 struct v4l2_ctrl *radio_tx_rds_art_head;366 struct v4l2_ctrl *radio_tx_rds_compressed;367 struct v4l2_ctrl *radio_tx_rds_dyn_pty;368 struct v4l2_ctrl *radio_tx_rds_ta;369 struct v4l2_ctrl *radio_tx_rds_tp;370 struct v4l2_ctrl *radio_tx_rds_ms;371 struct v4l2_ctrl *radio_tx_rds_psname;372 struct v4l2_ctrl *radio_tx_rds_radiotext;373 374 struct v4l2_ctrl *radio_rx_rds_pty;375 struct v4l2_ctrl *radio_rx_rds_ta;376 struct v4l2_ctrl *radio_rx_rds_tp;377 struct v4l2_ctrl *radio_rx_rds_ms;378 struct v4l2_ctrl *radio_rx_rds_psname;379 struct v4l2_ctrl *radio_rx_rds_radiotext;380 381 struct v4l2_ctrl *ctrl_hdmi_to_output[MAX_HDMI_INPUTS];382 char ctrl_hdmi_to_output_names[MAX_HDMI_INPUTS][32];383 struct v4l2_ctrl *ctrl_svid_to_output[MAX_SVID_INPUTS];384 char ctrl_svid_to_output_names[MAX_SVID_INPUTS][32];385 386 unsigned input_brightness[MAX_INPUTS];387 unsigned osd_mode;388 unsigned button_pressed;389 bool sensor_hflip;390 bool sensor_vflip;391 bool hflip;392 bool vflip;393 bool vbi_cap_interlaced;394 bool loop_video;395 bool reduced_fps;396 397 /* Framebuffer */398 unsigned long video_pbase;399 void *video_vbase;400 u32 video_buffer_size;401 int display_width;402 int display_height;403 int display_byte_stride;404 int bits_per_pixel;405 int bytes_per_pixel;406 struct fb_info fb_info;407 struct fb_var_screeninfo fb_defined;408 struct fb_fix_screeninfo fb_fix;409 410 /* Error injection */411 bool disconnect_error;412 bool queue_setup_error;413 bool buf_prepare_error;414 bool start_streaming_error;415 bool dqbuf_error;416 bool req_validate_error;417 bool seq_wrap;418 u64 time_wrap;419 u64 time_wrap_offset;420 unsigned perc_dropped_buffers;421 enum vivid_signal_mode std_signal_mode[MAX_INPUTS];422 unsigned int query_std_last[MAX_INPUTS];423 v4l2_std_id query_std[MAX_INPUTS];424 enum tpg_video_aspect std_aspect_ratio[MAX_INPUTS];425 426 enum vivid_signal_mode dv_timings_signal_mode[MAX_INPUTS];427 char **query_dv_timings_qmenu;428 char *query_dv_timings_qmenu_strings;429 unsigned query_dv_timings_size;430 unsigned int query_dv_timings_last[MAX_INPUTS];431 unsigned int query_dv_timings[MAX_INPUTS];432 enum tpg_video_aspect dv_timings_aspect_ratio[MAX_INPUTS];433 434 /* Input */435 unsigned input;436 v4l2_std_id std_cap[MAX_INPUTS];437 struct v4l2_dv_timings dv_timings_cap[MAX_INPUTS];438 int dv_timings_cap_sel[MAX_INPUTS];439 u32 service_set_cap;440 struct vivid_vbi_gen_data vbi_gen;441 u8 *edid;442 unsigned edid_blocks;443 unsigned edid_max_blocks;444 unsigned webcam_size_idx;445 unsigned webcam_ival_idx;446 unsigned tv_freq;447 unsigned tv_audmode;448 unsigned tv_field_cap;449 unsigned tv_audio_input;450 451 u32 power_present;452 453 /* Output */454 unsigned output;455 v4l2_std_id std_out;456 struct v4l2_dv_timings dv_timings_out;457 u32 colorspace_out;458 u32 ycbcr_enc_out;459 u32 hsv_enc_out;460 u32 quantization_out;461 u32 xfer_func_out;462 u32 service_set_out;463 unsigned bytesperline_out[TPG_MAX_PLANES];464 unsigned tv_field_out;465 unsigned tv_audio_output;466 bool vbi_out_have_wss;467 u8 vbi_out_wss[2];468 bool vbi_out_have_cc[2];469 u8 vbi_out_cc[2][2];470 bool dvi_d_out;471 u8 *scaled_line;472 u8 *blended_line;473 unsigned cur_scaled_line;474 475 /* Output Overlay */476 void *fb_vbase_out;477 bool overlay_out_enabled;478 int overlay_out_top, overlay_out_left;479 unsigned fbuf_out_flags;480 u32 chromakey_out;481 u8 global_alpha_out;482 483 /* video capture */484 struct tpg_data tpg;485 unsigned ms_vid_cap;486 bool must_blank[MAX_VID_CAP_BUFFERS];487 488 const struct vivid_fmt *fmt_cap;489 struct v4l2_fract timeperframe_vid_cap;490 enum v4l2_field field_cap;491 struct v4l2_rect src_rect;492 struct v4l2_rect fmt_cap_rect;493 struct v4l2_rect crop_cap;494 struct v4l2_rect compose_cap;495 struct v4l2_rect crop_bounds_cap;496 struct vb2_queue vb_vid_cap_q;497 struct list_head vid_cap_active;498 struct vb2_queue vb_vbi_cap_q;499 struct list_head vbi_cap_active;500 struct vb2_queue vb_meta_cap_q;501 struct list_head meta_cap_active;502 struct vb2_queue vb_touch_cap_q;503 struct list_head touch_cap_active;504 505 /* thread for generating video capture stream */506 struct task_struct *kthread_vid_cap;507 unsigned long jiffies_vid_cap;508 u64 cap_stream_start;509 u64 cap_frame_period;510 u64 cap_frame_eof_offset;511 u32 cap_seq_offset;512 u32 cap_seq_count;513 bool cap_seq_resync;514 u32 vid_cap_seq_start;515 u32 vid_cap_seq_count;516 bool vid_cap_streaming;517 u32 vbi_cap_seq_start;518 u32 vbi_cap_seq_count;519 bool vbi_cap_streaming;520 u32 meta_cap_seq_start;521 u32 meta_cap_seq_count;522 bool meta_cap_streaming;523 524 /* Touch capture */525 struct task_struct *kthread_touch_cap;526 unsigned long jiffies_touch_cap;527 u64 touch_cap_stream_start;528 u32 touch_cap_seq_offset;529 bool touch_cap_seq_resync;530 u32 touch_cap_seq_start;531 u32 touch_cap_seq_count;532 u32 touch_cap_with_seq_wrap_count;533 bool touch_cap_streaming;534 struct v4l2_fract timeperframe_tch_cap;535 struct v4l2_pix_format tch_format;536 int tch_pat_random;537 538 /* video output */539 const struct vivid_fmt *fmt_out;540 struct v4l2_fract timeperframe_vid_out;541 enum v4l2_field field_out;542 struct v4l2_rect sink_rect;543 struct v4l2_rect fmt_out_rect;544 struct v4l2_rect crop_out;545 struct v4l2_rect compose_out;546 struct v4l2_rect compose_bounds_out;547 struct vb2_queue vb_vid_out_q;548 struct list_head vid_out_active;549 struct vb2_queue vb_vbi_out_q;550 struct list_head vbi_out_active;551 struct vb2_queue vb_meta_out_q;552 struct list_head meta_out_active;553 554 /* video loop precalculated rectangles */555 556 /*557 * Intersection between what the output side composes and the capture side558 * crops. I.e., what actually needs to be copied from the output buffer to559 * the capture buffer.560 */561 struct v4l2_rect loop_vid_copy;562 /* The part of the output buffer that (after scaling) corresponds to loop_vid_copy. */563 struct v4l2_rect loop_vid_out;564 /* The part of the capture buffer that (after scaling) corresponds to loop_vid_copy. */565 struct v4l2_rect loop_vid_cap;566 /*567 * The intersection of the framebuffer, the overlay output window and568 * loop_vid_copy. I.e., the part of the framebuffer that actually should be569 * blended with the compose_out rectangle. This uses the framebuffer origin.570 */571 struct v4l2_rect loop_fb_copy;572 /* The same as loop_fb_copy but with compose_out origin. */573 struct v4l2_rect loop_vid_overlay;574 /*575 * The part of the capture buffer that (after scaling) corresponds576 * to loop_vid_overlay.577 */578 struct v4l2_rect loop_vid_overlay_cap;579 580 /* thread for generating video output stream */581 struct task_struct *kthread_vid_out;582 unsigned long jiffies_vid_out;583 u32 out_seq_offset;584 u32 out_seq_count;585 bool out_seq_resync;586 u32 vid_out_seq_start;587 u32 vid_out_seq_count;588 bool vid_out_streaming;589 u32 vbi_out_seq_start;590 u32 vbi_out_seq_count;591 bool vbi_out_streaming;592 bool stream_sliced_vbi_out;593 u32 meta_out_seq_start;594 u32 meta_out_seq_count;595 bool meta_out_streaming;596 597 /* SDR capture */598 struct vb2_queue vb_sdr_cap_q;599 struct list_head sdr_cap_active;600 u32 sdr_pixelformat; /* v4l2 format id */601 unsigned sdr_buffersize;602 unsigned sdr_adc_freq;603 unsigned sdr_fm_freq;604 unsigned sdr_fm_deviation;605 int sdr_fixp_src_phase;606 int sdr_fixp_mod_phase;607 608 bool tstamp_src_is_soe;609 bool has_crop_cap;610 bool has_compose_cap;611 bool has_scaler_cap;612 bool has_crop_out;613 bool has_compose_out;614 bool has_scaler_out;615 616 /* thread for generating SDR stream */617 struct task_struct *kthread_sdr_cap;618 unsigned long jiffies_sdr_cap;619 u32 sdr_cap_seq_offset;620 u32 sdr_cap_seq_start;621 u32 sdr_cap_seq_count;622 u32 sdr_cap_with_seq_wrap_count;623 bool sdr_cap_seq_resync;624 625 /* RDS generator */626 struct vivid_rds_gen rds_gen;627 628 /* Radio receiver */629 unsigned radio_rx_freq;630 unsigned radio_rx_audmode;631 int radio_rx_sig_qual;632 unsigned radio_rx_hw_seek_mode;633 bool radio_rx_hw_seek_prog_lim;634 bool radio_rx_rds_controls;635 bool radio_rx_rds_enabled;636 unsigned radio_rx_rds_use_alternates;637 unsigned radio_rx_rds_last_block;638 struct v4l2_fh *radio_rx_rds_owner;639 640 /* Radio transmitter */641 unsigned radio_tx_freq;642 unsigned radio_tx_subchans;643 bool radio_tx_rds_controls;644 unsigned radio_tx_rds_last_block;645 struct v4l2_fh *radio_tx_rds_owner;646 647 /* Shared between radio receiver and transmitter */648 bool radio_rds_loop;649 ktime_t radio_rds_init_time;650 651 /* CEC */652 struct cec_adapter *cec_rx_adap;653 struct cec_adapter *cec_tx_adap[MAX_HDMI_OUTPUTS];654 struct task_struct *kthread_cec;655 wait_queue_head_t kthread_waitq_cec;656 struct vivid_cec_xfer xfers[MAX_OUTPUTS];657 spinlock_t cec_xfers_slock; /* read and write cec messages */658 u32 cec_sft; /* bus signal free time, in bit periods */659 u8 last_initiator;660 661 /* CEC OSD String */662 char osd[14];663 unsigned long osd_jiffies;664 665 bool meta_pts;666 bool meta_scr;667};668 669static inline bool vivid_is_webcam(const struct vivid_dev *dev)670{671 return dev->input_type[dev->input] == WEBCAM;672}673 674static inline bool vivid_is_tv_cap(const struct vivid_dev *dev)675{676 return dev->input_type[dev->input] == TV;677}678 679static inline bool vivid_is_svid_cap(const struct vivid_dev *dev)680{681 return dev->input_type[dev->input] == SVID;682}683 684static inline bool vivid_is_hdmi_cap(const struct vivid_dev *dev)685{686 return dev->input_type[dev->input] == HDMI;687}688 689static inline bool vivid_is_sdtv_cap(const struct vivid_dev *dev)690{691 return vivid_is_tv_cap(dev) || vivid_is_svid_cap(dev);692}693 694static inline bool vivid_is_svid_out(const struct vivid_dev *dev)695{696 return dev->output_type[dev->output] == SVID;697}698 699static inline bool vivid_is_hdmi_out(const struct vivid_dev *dev)700{701 return dev->output_type[dev->output] == HDMI;702}703 704#endif705