]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blob - drivers/media/platform/vivid/vivid-core.h
media: replace ADOBERGB by OPRGB
[mirror_ubuntu-bionic-kernel.git] / drivers / media / platform / vivid / vivid-core.h
1 /*
2 * vivid-core.h - core datastructures
3 *
4 * Copyright 2014 Cisco Systems, Inc. and/or its affiliates. All rights reserved.
5 *
6 * This program is free software; you may redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; version 2 of the License.
9 *
10 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
11 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
12 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
13 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
14 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
15 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
16 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
17 * SOFTWARE.
18 */
19
20 #ifndef _VIVID_CORE_H_
21 #define _VIVID_CORE_H_
22
23 #include <linux/fb.h>
24 #include <linux/workqueue.h>
25 #include <media/cec.h>
26 #include <media/videobuf2-v4l2.h>
27 #include <media/v4l2-device.h>
28 #include <media/v4l2-dev.h>
29 #include <media/v4l2-ctrls.h>
30 #include <media/v4l2-tpg.h>
31 #include "vivid-rds-gen.h"
32 #include "vivid-vbi-gen.h"
33
34 #define dprintk(dev, level, fmt, arg...) \
35 v4l2_dbg(level, vivid_debug, &dev->v4l2_dev, fmt, ## arg)
36
37 /* Maximum allowed frame rate
38 *
39 * vivid will allow setting timeperframe in [1/FPS_MAX - FPS_MAX/1] range.
40 *
41 * Ideally FPS_MAX should be infinity, i.e. practically UINT_MAX, but that
42 * might hit application errors when they manipulate these values.
43 *
44 * Besides, for tpf < 10ms image-generation logic should be changed, to avoid
45 * producing frames with equal content.
46 */
47 #define FPS_MAX 100
48
49 /* The maximum number of clip rectangles */
50 #define MAX_CLIPS 16
51 /* The maximum number of inputs */
52 #define MAX_INPUTS 16
53 /* The maximum number of outputs */
54 #define MAX_OUTPUTS 16
55 /* The maximum up or down scaling factor is 4 */
56 #define MAX_ZOOM 4
57 /* The maximum image width/height are set to 4K DMT */
58 #define MAX_WIDTH 4096
59 #define MAX_HEIGHT 2160
60 /* The minimum image width/height */
61 #define MIN_WIDTH 16
62 #define MIN_HEIGHT 16
63 /* The data_offset of plane 0 for the multiplanar formats */
64 #define PLANE0_DATA_OFFSET 128
65
66 /* The supported TV frequency range in MHz */
67 #define MIN_TV_FREQ (44U * 16U)
68 #define MAX_TV_FREQ (958U * 16U)
69
70 /* The number of samples returned in every SDR buffer */
71 #define SDR_CAP_SAMPLES_PER_BUF 0x4000
72
73 /* used by the threads to know when to resync internal counters */
74 #define JIFFIES_PER_DAY (3600U * 24U * HZ)
75 #define JIFFIES_RESYNC (JIFFIES_PER_DAY * (0xf0000000U / JIFFIES_PER_DAY))
76
77 extern const struct v4l2_rect vivid_min_rect;
78 extern const struct v4l2_rect vivid_max_rect;
79 extern unsigned vivid_debug;
80
81 struct vivid_fmt {
82 u32 fourcc; /* v4l2 format id */
83 enum tgp_color_enc color_enc;
84 bool can_do_overlay;
85 u8 vdownsampling[TPG_MAX_PLANES];
86 u32 alpha_mask;
87 u8 planes;
88 u8 buffers;
89 u32 data_offset[TPG_MAX_PLANES];
90 u32 bit_depth[TPG_MAX_PLANES];
91 };
92
93 extern struct vivid_fmt vivid_formats[];
94
95 /* buffer for one video frame */
96 struct vivid_buffer {
97 /* common v4l buffer stuff -- must be first */
98 struct vb2_v4l2_buffer vb;
99 struct list_head list;
100 };
101
102 enum vivid_input {
103 WEBCAM,
104 TV,
105 SVID,
106 HDMI,
107 };
108
109 enum vivid_signal_mode {
110 CURRENT_DV_TIMINGS,
111 CURRENT_STD = CURRENT_DV_TIMINGS,
112 NO_SIGNAL,
113 NO_LOCK,
114 OUT_OF_RANGE,
115 SELECTED_DV_TIMINGS,
116 SELECTED_STD = SELECTED_DV_TIMINGS,
117 CYCLE_DV_TIMINGS,
118 CYCLE_STD = CYCLE_DV_TIMINGS,
119 CUSTOM_DV_TIMINGS,
120 };
121
122 enum vivid_colorspace {
123 VIVID_CS_170M,
124 VIVID_CS_709,
125 VIVID_CS_SRGB,
126 VIVID_CS_OPRGB,
127 VIVID_CS_2020,
128 VIVID_CS_DCI_P3,
129 VIVID_CS_240M,
130 VIVID_CS_SYS_M,
131 VIVID_CS_SYS_BG,
132 };
133
134 #define VIVID_INVALID_SIGNAL(mode) \
135 ((mode) == NO_SIGNAL || (mode) == NO_LOCK || (mode) == OUT_OF_RANGE)
136
137 struct vivid_cec_work {
138 struct list_head list;
139 struct delayed_work work;
140 struct cec_adapter *adap;
141 struct vivid_dev *dev;
142 unsigned int usecs;
143 unsigned int timeout_ms;
144 u8 tx_status;
145 struct cec_msg msg;
146 };
147
148 struct vivid_dev {
149 unsigned inst;
150 struct v4l2_device v4l2_dev;
151 struct v4l2_ctrl_handler ctrl_hdl_user_gen;
152 struct v4l2_ctrl_handler ctrl_hdl_user_vid;
153 struct v4l2_ctrl_handler ctrl_hdl_user_aud;
154 struct v4l2_ctrl_handler ctrl_hdl_streaming;
155 struct v4l2_ctrl_handler ctrl_hdl_sdtv_cap;
156 struct v4l2_ctrl_handler ctrl_hdl_loop_cap;
157 struct v4l2_ctrl_handler ctrl_hdl_fb;
158 struct video_device vid_cap_dev;
159 struct v4l2_ctrl_handler ctrl_hdl_vid_cap;
160 struct video_device vid_out_dev;
161 struct v4l2_ctrl_handler ctrl_hdl_vid_out;
162 struct video_device vbi_cap_dev;
163 struct v4l2_ctrl_handler ctrl_hdl_vbi_cap;
164 struct video_device vbi_out_dev;
165 struct v4l2_ctrl_handler ctrl_hdl_vbi_out;
166 struct video_device radio_rx_dev;
167 struct v4l2_ctrl_handler ctrl_hdl_radio_rx;
168 struct video_device radio_tx_dev;
169 struct v4l2_ctrl_handler ctrl_hdl_radio_tx;
170 struct video_device sdr_cap_dev;
171 struct v4l2_ctrl_handler ctrl_hdl_sdr_cap;
172 spinlock_t slock;
173 struct mutex mutex;
174
175 /* capabilities */
176 u32 vid_cap_caps;
177 u32 vid_out_caps;
178 u32 vbi_cap_caps;
179 u32 vbi_out_caps;
180 u32 sdr_cap_caps;
181 u32 radio_rx_caps;
182 u32 radio_tx_caps;
183
184 /* supported features */
185 bool multiplanar;
186 unsigned num_inputs;
187 u8 input_type[MAX_INPUTS];
188 u8 input_name_counter[MAX_INPUTS];
189 unsigned num_outputs;
190 u8 output_type[MAX_OUTPUTS];
191 u8 output_name_counter[MAX_OUTPUTS];
192 bool has_audio_inputs;
193 bool has_audio_outputs;
194 bool has_vid_cap;
195 bool has_vid_out;
196 bool has_vbi_cap;
197 bool has_raw_vbi_cap;
198 bool has_sliced_vbi_cap;
199 bool has_vbi_out;
200 bool has_raw_vbi_out;
201 bool has_sliced_vbi_out;
202 bool has_radio_rx;
203 bool has_radio_tx;
204 bool has_sdr_cap;
205 bool has_fb;
206
207 bool can_loop_video;
208
209 /* controls */
210 struct v4l2_ctrl *brightness;
211 struct v4l2_ctrl *contrast;
212 struct v4l2_ctrl *saturation;
213 struct v4l2_ctrl *hue;
214 struct {
215 /* autogain/gain cluster */
216 struct v4l2_ctrl *autogain;
217 struct v4l2_ctrl *gain;
218 };
219 struct v4l2_ctrl *volume;
220 struct v4l2_ctrl *mute;
221 struct v4l2_ctrl *alpha;
222 struct v4l2_ctrl *button;
223 struct v4l2_ctrl *boolean;
224 struct v4l2_ctrl *int32;
225 struct v4l2_ctrl *int64;
226 struct v4l2_ctrl *menu;
227 struct v4l2_ctrl *string;
228 struct v4l2_ctrl *bitmask;
229 struct v4l2_ctrl *int_menu;
230 struct v4l2_ctrl *test_pattern;
231 struct v4l2_ctrl *colorspace;
232 struct v4l2_ctrl *rgb_range_cap;
233 struct v4l2_ctrl *real_rgb_range_cap;
234 struct {
235 /* std_signal_mode/standard cluster */
236 struct v4l2_ctrl *ctrl_std_signal_mode;
237 struct v4l2_ctrl *ctrl_standard;
238 };
239 struct {
240 /* dv_timings_signal_mode/timings cluster */
241 struct v4l2_ctrl *ctrl_dv_timings_signal_mode;
242 struct v4l2_ctrl *ctrl_dv_timings;
243 };
244 struct v4l2_ctrl *ctrl_has_crop_cap;
245 struct v4l2_ctrl *ctrl_has_compose_cap;
246 struct v4l2_ctrl *ctrl_has_scaler_cap;
247 struct v4l2_ctrl *ctrl_has_crop_out;
248 struct v4l2_ctrl *ctrl_has_compose_out;
249 struct v4l2_ctrl *ctrl_has_scaler_out;
250 struct v4l2_ctrl *ctrl_tx_mode;
251 struct v4l2_ctrl *ctrl_tx_rgb_range;
252
253 struct v4l2_ctrl *radio_tx_rds_pi;
254 struct v4l2_ctrl *radio_tx_rds_pty;
255 struct v4l2_ctrl *radio_tx_rds_mono_stereo;
256 struct v4l2_ctrl *radio_tx_rds_art_head;
257 struct v4l2_ctrl *radio_tx_rds_compressed;
258 struct v4l2_ctrl *radio_tx_rds_dyn_pty;
259 struct v4l2_ctrl *radio_tx_rds_ta;
260 struct v4l2_ctrl *radio_tx_rds_tp;
261 struct v4l2_ctrl *radio_tx_rds_ms;
262 struct v4l2_ctrl *radio_tx_rds_psname;
263 struct v4l2_ctrl *radio_tx_rds_radiotext;
264
265 struct v4l2_ctrl *radio_rx_rds_pty;
266 struct v4l2_ctrl *radio_rx_rds_ta;
267 struct v4l2_ctrl *radio_rx_rds_tp;
268 struct v4l2_ctrl *radio_rx_rds_ms;
269 struct v4l2_ctrl *radio_rx_rds_psname;
270 struct v4l2_ctrl *radio_rx_rds_radiotext;
271
272 unsigned input_brightness[MAX_INPUTS];
273 unsigned osd_mode;
274 unsigned button_pressed;
275 bool sensor_hflip;
276 bool sensor_vflip;
277 bool hflip;
278 bool vflip;
279 bool vbi_cap_interlaced;
280 bool loop_video;
281 bool reduced_fps;
282
283 /* Framebuffer */
284 unsigned long video_pbase;
285 void *video_vbase;
286 u32 video_buffer_size;
287 int display_width;
288 int display_height;
289 int display_byte_stride;
290 int bits_per_pixel;
291 int bytes_per_pixel;
292 struct fb_info fb_info;
293 struct fb_var_screeninfo fb_defined;
294 struct fb_fix_screeninfo fb_fix;
295
296 /* Error injection */
297 bool queue_setup_error;
298 bool buf_prepare_error;
299 bool start_streaming_error;
300 bool dqbuf_error;
301 bool seq_wrap;
302 bool time_wrap;
303 u64 time_wrap_offset;
304 unsigned perc_dropped_buffers;
305 enum vivid_signal_mode std_signal_mode;
306 unsigned query_std_last;
307 v4l2_std_id query_std;
308 enum tpg_video_aspect std_aspect_ratio;
309
310 enum vivid_signal_mode dv_timings_signal_mode;
311 char **query_dv_timings_qmenu;
312 unsigned query_dv_timings_size;
313 unsigned query_dv_timings_last;
314 unsigned query_dv_timings;
315 enum tpg_video_aspect dv_timings_aspect_ratio;
316
317 /* Input */
318 unsigned input;
319 v4l2_std_id std_cap;
320 struct v4l2_dv_timings dv_timings_cap;
321 u32 service_set_cap;
322 struct vivid_vbi_gen_data vbi_gen;
323 u8 *edid;
324 unsigned edid_blocks;
325 unsigned edid_max_blocks;
326 unsigned webcam_size_idx;
327 unsigned webcam_ival_idx;
328 unsigned tv_freq;
329 unsigned tv_audmode;
330 unsigned tv_field_cap;
331 unsigned tv_audio_input;
332
333 /* Capture Overlay */
334 struct v4l2_framebuffer fb_cap;
335 struct v4l2_fh *overlay_cap_owner;
336 void *fb_vbase_cap;
337 int overlay_cap_top, overlay_cap_left;
338 enum v4l2_field overlay_cap_field;
339 void *bitmap_cap;
340 struct v4l2_clip clips_cap[MAX_CLIPS];
341 struct v4l2_clip try_clips_cap[MAX_CLIPS];
342 unsigned clipcount_cap;
343
344 /* Output */
345 unsigned output;
346 v4l2_std_id std_out;
347 struct v4l2_dv_timings dv_timings_out;
348 u32 colorspace_out;
349 u32 ycbcr_enc_out;
350 u32 hsv_enc_out;
351 u32 quantization_out;
352 u32 xfer_func_out;
353 u32 service_set_out;
354 unsigned bytesperline_out[TPG_MAX_PLANES];
355 unsigned tv_field_out;
356 unsigned tv_audio_output;
357 bool vbi_out_have_wss;
358 u8 vbi_out_wss[2];
359 bool vbi_out_have_cc[2];
360 u8 vbi_out_cc[2][2];
361 bool dvi_d_out;
362 u8 *scaled_line;
363 u8 *blended_line;
364 unsigned cur_scaled_line;
365
366 /* Output Overlay */
367 void *fb_vbase_out;
368 bool overlay_out_enabled;
369 int overlay_out_top, overlay_out_left;
370 void *bitmap_out;
371 struct v4l2_clip clips_out[MAX_CLIPS];
372 struct v4l2_clip try_clips_out[MAX_CLIPS];
373 unsigned clipcount_out;
374 unsigned fbuf_out_flags;
375 u32 chromakey_out;
376 u8 global_alpha_out;
377
378 /* video capture */
379 struct tpg_data tpg;
380 unsigned ms_vid_cap;
381 bool must_blank[VIDEO_MAX_FRAME];
382
383 const struct vivid_fmt *fmt_cap;
384 struct v4l2_fract timeperframe_vid_cap;
385 enum v4l2_field field_cap;
386 struct v4l2_rect src_rect;
387 struct v4l2_rect fmt_cap_rect;
388 struct v4l2_rect crop_cap;
389 struct v4l2_rect compose_cap;
390 struct v4l2_rect crop_bounds_cap;
391 struct vb2_queue vb_vid_cap_q;
392 struct list_head vid_cap_active;
393 struct vb2_queue vb_vbi_cap_q;
394 struct list_head vbi_cap_active;
395
396 /* thread for generating video capture stream */
397 struct task_struct *kthread_vid_cap;
398 unsigned long jiffies_vid_cap;
399 u32 cap_seq_offset;
400 u32 cap_seq_count;
401 bool cap_seq_resync;
402 u32 vid_cap_seq_start;
403 u32 vid_cap_seq_count;
404 bool vid_cap_streaming;
405 u32 vbi_cap_seq_start;
406 u32 vbi_cap_seq_count;
407 bool vbi_cap_streaming;
408 bool stream_sliced_vbi_cap;
409
410 /* video output */
411 const struct vivid_fmt *fmt_out;
412 struct v4l2_fract timeperframe_vid_out;
413 enum v4l2_field field_out;
414 struct v4l2_rect sink_rect;
415 struct v4l2_rect fmt_out_rect;
416 struct v4l2_rect crop_out;
417 struct v4l2_rect compose_out;
418 struct v4l2_rect compose_bounds_out;
419 struct vb2_queue vb_vid_out_q;
420 struct list_head vid_out_active;
421 struct vb2_queue vb_vbi_out_q;
422 struct list_head vbi_out_active;
423
424 /* video loop precalculated rectangles */
425
426 /*
427 * Intersection between what the output side composes and the capture side
428 * crops. I.e., what actually needs to be copied from the output buffer to
429 * the capture buffer.
430 */
431 struct v4l2_rect loop_vid_copy;
432 /* The part of the output buffer that (after scaling) corresponds to loop_vid_copy. */
433 struct v4l2_rect loop_vid_out;
434 /* The part of the capture buffer that (after scaling) corresponds to loop_vid_copy. */
435 struct v4l2_rect loop_vid_cap;
436 /*
437 * The intersection of the framebuffer, the overlay output window and
438 * loop_vid_copy. I.e., the part of the framebuffer that actually should be
439 * blended with the compose_out rectangle. This uses the framebuffer origin.
440 */
441 struct v4l2_rect loop_fb_copy;
442 /* The same as loop_fb_copy but with compose_out origin. */
443 struct v4l2_rect loop_vid_overlay;
444 /*
445 * The part of the capture buffer that (after scaling) corresponds
446 * to loop_vid_overlay.
447 */
448 struct v4l2_rect loop_vid_overlay_cap;
449
450 /* thread for generating video output stream */
451 struct task_struct *kthread_vid_out;
452 unsigned long jiffies_vid_out;
453 u32 out_seq_offset;
454 u32 out_seq_count;
455 bool out_seq_resync;
456 u32 vid_out_seq_start;
457 u32 vid_out_seq_count;
458 bool vid_out_streaming;
459 u32 vbi_out_seq_start;
460 u32 vbi_out_seq_count;
461 bool vbi_out_streaming;
462 bool stream_sliced_vbi_out;
463
464 /* SDR capture */
465 struct vb2_queue vb_sdr_cap_q;
466 struct list_head sdr_cap_active;
467 u32 sdr_pixelformat; /* v4l2 format id */
468 unsigned sdr_buffersize;
469 unsigned sdr_adc_freq;
470 unsigned sdr_fm_freq;
471 unsigned sdr_fm_deviation;
472 int sdr_fixp_src_phase;
473 int sdr_fixp_mod_phase;
474
475 bool tstamp_src_is_soe;
476 bool has_crop_cap;
477 bool has_compose_cap;
478 bool has_scaler_cap;
479 bool has_crop_out;
480 bool has_compose_out;
481 bool has_scaler_out;
482
483 /* thread for generating SDR stream */
484 struct task_struct *kthread_sdr_cap;
485 unsigned long jiffies_sdr_cap;
486 u32 sdr_cap_seq_offset;
487 u32 sdr_cap_seq_count;
488 bool sdr_cap_seq_resync;
489
490 /* RDS generator */
491 struct vivid_rds_gen rds_gen;
492
493 /* Radio receiver */
494 unsigned radio_rx_freq;
495 unsigned radio_rx_audmode;
496 int radio_rx_sig_qual;
497 unsigned radio_rx_hw_seek_mode;
498 bool radio_rx_hw_seek_prog_lim;
499 bool radio_rx_rds_controls;
500 bool radio_rx_rds_enabled;
501 unsigned radio_rx_rds_use_alternates;
502 unsigned radio_rx_rds_last_block;
503 struct v4l2_fh *radio_rx_rds_owner;
504
505 /* Radio transmitter */
506 unsigned radio_tx_freq;
507 unsigned radio_tx_subchans;
508 bool radio_tx_rds_controls;
509 unsigned radio_tx_rds_last_block;
510 struct v4l2_fh *radio_tx_rds_owner;
511
512 /* Shared between radio receiver and transmitter */
513 bool radio_rds_loop;
514 struct timespec radio_rds_init_ts;
515
516 /* CEC */
517 struct cec_adapter *cec_rx_adap;
518 struct cec_adapter *cec_tx_adap[MAX_OUTPUTS];
519 struct workqueue_struct *cec_workqueue;
520 spinlock_t cec_slock;
521 struct list_head cec_work_list;
522 unsigned int cec_xfer_time_jiffies;
523 unsigned long cec_xfer_start_jiffies;
524 u8 cec_output2bus_map[MAX_OUTPUTS];
525
526 /* CEC OSD String */
527 char osd[14];
528 unsigned long osd_jiffies;
529 };
530
531 static inline bool vivid_is_webcam(const struct vivid_dev *dev)
532 {
533 return dev->input_type[dev->input] == WEBCAM;
534 }
535
536 static inline bool vivid_is_tv_cap(const struct vivid_dev *dev)
537 {
538 return dev->input_type[dev->input] == TV;
539 }
540
541 static inline bool vivid_is_svid_cap(const struct vivid_dev *dev)
542 {
543 return dev->input_type[dev->input] == SVID;
544 }
545
546 static inline bool vivid_is_hdmi_cap(const struct vivid_dev *dev)
547 {
548 return dev->input_type[dev->input] == HDMI;
549 }
550
551 static inline bool vivid_is_sdtv_cap(const struct vivid_dev *dev)
552 {
553 return vivid_is_tv_cap(dev) || vivid_is_svid_cap(dev);
554 }
555
556 static inline bool vivid_is_svid_out(const struct vivid_dev *dev)
557 {
558 return dev->output_type[dev->output] == SVID;
559 }
560
561 static inline bool vivid_is_hdmi_out(const struct vivid_dev *dev)
562 {
563 return dev->output_type[dev->output] == HDMI;
564 }
565
566 #endif