blob: 365f48b301e3b824d7056dc15aa0bf943c7e1148 [file] [log] [blame]
Googler9726be62022-12-14 05:53:31 +00001/*
2 * drivers/amlogic/media/enhancement/amvecm/dolby_vision/amdolby_vision.h
3 *
4 * Copyright (C) 2017 Amlogic, Inc. All rights reserved.
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
14 * more details.
15 *
16 */
17#ifndef _AMDV_H_
18#define _AMDV_H_
19
Googler9726be62022-12-14 05:53:31 +000020/* driver version */
21#define DRIVER_VER "20181220"
22
23#include <linux/types.h>
24
Googler9398cc32022-12-02 17:21:52 +080025#define EXT_MD_LEVEL_1 BIT(0)
26#define EXT_MD_LEVEL_2 BIT(1)
27#define EXT_MD_LEVEL_4 BIT(2)
28#define EXT_MD_LEVEL_5 BIT(3)
29#define EXT_MD_LEVEL_6 BIT(4)
30#define EXT_MD_LEVEL_255 BIT(31)
31#define BACKLIGHT_LUT_SIZE 4096
32#define AMBIENT_LUT_SIZE 8
33#define TUNING_LUT_SIZE 14
34#define DM4_TUNING_LUT_SIZE 7
Googler9726be62022-12-14 05:53:31 +000035
Googler9398cc32022-12-02 17:21:52 +080036#define TUNING_MODE_FORCE_ABSOLUTE 0x1
37#define TUNING_MODE_EXTLEVEL_1_DISABLE 0x2
38#define TUNING_MODE_EXTLEVEL_2_DISABLE 0x4
39#define TUNING_MODE_EXTLEVEL_4_DISABLE 0x8
40#define TUNING_MODE_EXTLEVEL_5_DISABLE 0x10
41#define TUNING_MODE_EL_FORCE_DISABLE 0x20
Googler9726be62022-12-14 05:53:31 +000042
Googler9398cc32022-12-02 17:21:52 +080043#define VPP_VD1_DSC_CTRL 0x1a83
44#define VIU_VD1_PATH_CTRL 0x1a73
45#define VPP_VD2_DSC_CTRL 0x1a84
46#define VPP_VD3_DSC_CTRL 0x1a85
47#define DOLBY_PATH_SWAP_CTRL1 0x1a70
48#define DOLBY_PATH_SWAP_CTRL2 0x1a71
49#define MALI_AFBCD_TOP_CTRL 0x1a0f
50#define MALI_AFBCD1_TOP_CTRL 0x1a55
Googler9726be62022-12-14 05:53:31 +000051
52enum core1_switch_type {
53 NO_SWITCH = 0,
54 SWITCH_BEFORE_DVCORE_1,
55 SWITCH_BEFORE_DVCORE_2,
56 SWITCH_AFTER_DVCORE,
57};
58
59enum core3_switch_type {
60 CORE3_AFTER_WM = 0,
61 CORE3_AFTER_OSD1_HDR,
62 CORE3_AFTER_VD2_HDR,
63};
64
65enum core_type {
66 DOLBY_TVCORE = 0,
67 DOLBY_CORE1A,
68 DOLBY_CORE1B,
69 DOLBY_CORE1C,
70 DOLBY_CORE2A,
71 DOLBY_CORE2B,
72 DOLBY_CORE2C,
73};
74
Googler9726be62022-12-14 05:53:31 +000075# pragma pack(push, 1)
Googler9398cc32022-12-02 17:21:52 +080076struct tgt_out_csc_cfg {
77 s32 lms2rgb_mat[3][3];
78 s32 lms2rgb_mat_scale;
79 u8 white_point[3];
80 u8 white_point_scale;
81 s32 reserved[3];
Googler9726be62022-12-14 05:53:31 +000082};
83#pragma pack(pop)
84
Googler9726be62022-12-14 05:53:31 +000085# pragma pack(push, 1)
Googler9398cc32022-12-02 17:21:52 +080086struct tgt_gc_cfg {
87 s32 gd_enable;
88 u32 gd_wmin;
89 u32 gd_wmax;
90 u32 gd_wmm;
91 u32 gd_wdyn_rng_sqrt;
92 u32 gd_weight_mean;
93 u32 gd_weight_std;
94 u32 gd_delay_msec_hdmi;
95 s32 gd_rgb2yuv_ext;
96 s32 gd_m33_rgb2yuv[3][3];
97 s32 gd_m33_rgb2yuv_scale2p;
98 s32 gd_rgb2yuv_off_ext;
99 s32 gd_rgb2yuv_off[3];
100 u32 gd_up_bound;
101 u32 gd_low_bound;
102 u32 last_max_pq;
103 u16 gd_wmin_pq;
104 u16 gd_wmax_pq;
105 u16 gd_wm_pq;
106 u16 gd_trigger_period;
107 u32 gd_trigger_lin_thresh;
108 u32 gd_delay_msec_ott;
109 s16 gd_rise_weight;
110 s16 gd_fall_weight;
111 u32 gd_delay_msec_ll;
112 u32 gd_contrast;
113 u32 reserved[3];
Googler9726be62022-12-14 05:53:31 +0000114};
115#pragma pack(pop)
116
Googler9726be62022-12-14 05:53:31 +0000117# pragma pack(push, 1)
Googler9398cc32022-12-02 17:21:52 +0800118struct ambient_cfg {
119 u32 ambient;
120 u32 t_front_lux;
121 u32 t_front_lux_scale;
122 u32 t_rear_lum;
123 u32 t_rear_lum_scale;
124 u32 t_whitexy[2];
125 u32 t_surround_reflection;
126 u32 t_screen_reflection;
127 u32 al_delay;
128 u32 al_rise;
129 u32 al_fall;
Googler9726be62022-12-14 05:53:31 +0000130};
131#pragma pack(pop)
132
Googler9398cc32022-12-02 17:21:52 +0800133# pragma pack(push, 1)
134struct tgt_ab_cfg {
135 s32 ab_enable;
136 u32 ab_highest_tmax;
137 u32 ab_lowest_tmax;
138 s16 ab_rise_weight;
139 s16 ab_fall_weight;
140 u32 ab_delay_msec_hdmi;
141 u32 ab_delay_msec_ott;
142 u32 ab_delay_msec_ll;
143 u32 reserved[3];
144};
145#pragma pack(pop)
146
147# pragma pack(push, 1)
148struct target_config {
149 u16 gamma;
150 u16 eotf;
151 u16 range_spec;
152 u16 max_pq;
153 u16 min_pq;
154 u16 max_pq_dm3;
155 s32 min_lin;
156 s32 max_lin;
157 s32 max_lin_dm3;
158 s32 t_primaries[8];
159 u16 m_sweight;
160 s16 trim_slope_bias;
161 s16 trim_offset_bias;
162 s16 trim_power_bias;
163 s16 ms_weight_bias;
164 s16 chroma_weight_bias;
165 s16 saturation_gain_bias;
166 u16 tuning_mode;
167 s16 d_brightness;
168 s16 d_contrast;
169 s16 d_color_shift;
170 s16 d_saturation;
171 s16 d_backlight;
172 s16 dbg_exec_params_print_period;
173 s16 dbg_dm_md_print_period;
174 s16 dbg_dm_cfg_print_period;
175 struct tgt_gc_cfg gd_config;
176 struct tgt_ab_cfg ab_config;
177 struct ambient_cfg ambient_config;
178 u8 vsvdb[7];
179 u8 dm31_avail;
180 u8 ref_mode_dark_id;
181 u8 apply_l11;
182 u8 reserved1[1];
183 s16 backlight_scaler;
184 struct tgt_out_csc_cfg ocsc_config;
185 s16 bright_preservation;
186 u8 total_viewing_modes_num;
187 u8 viewing_mode_valid;
188 u32 ambient_frontlux[AMBIENT_LUT_SIZE];
189 u32 ambient_complevel[AMBIENT_LUT_SIZE];
190 s16 mid_pq_bias_lut[TUNING_LUT_SIZE];
191 s16 slope_bias_lut[TUNING_LUT_SIZE];
192 s16 backlight_bias_lut[TUNING_LUT_SIZE];
193 s16 user_brightness_ui_lut[DM4_TUNING_LUT_SIZE];
194 s16 padding2;
195 s16 blu_pwm[5];
196 s16 blu_light[5];
197 s16 padding[36];
198};
199#pragma pack(pop)
200
201struct pq_config {
202 unsigned char backlight_lut[BACKLIGHT_LUT_SIZE];
203 struct target_config tdc;
Googler9726be62022-12-14 05:53:31 +0000204};
205
Googler9398cc32022-12-02 17:21:52 +0800206enum input_mode_enum {
207 IN_MODE_OTT = 0,
208 IN_MODE_HDMI = 1
Googler9726be62022-12-14 05:53:31 +0000209};
210
Googler9398cc32022-12-02 17:21:52 +0800211struct ui_menu_params {
212 u16 u16_backlight_ui_val;
213 u16 u16_brightness_ui_val;
214 u16 u16_contrast_ui_val;
Googler9726be62022-12-14 05:53:31 +0000215};
216
Googler9398cc32022-12-02 17:21:52 +0800217enum signal_format_enum {
Googler9726be62022-12-14 05:53:31 +0000218 FORMAT_INVALID = -1,
219 FORMAT_DOVI = 0,
220 FORMAT_HDR10 = 1,
221 FORMAT_SDR = 2,
222 FORMAT_DOVI_LL = 3,
223 FORMAT_HLG = 4,
224 FORMAT_HDR10PLUS = 5,
225 FORMAT_SDR_2020 = 6,
226 FORMAT_MVC = 7
227};
228
Googler9398cc32022-12-02 17:21:52 +0800229enum priority_mode_enum {
230 V_PRIORITY = 0,
231 G_PRIORITY = 1,
232 VIDEO_PRIORITY_DELAY = 2
Googler9726be62022-12-14 05:53:31 +0000233};
234
Googler9398cc32022-12-02 17:21:52 +0800235enum cp_signal_range_enum {
236 SIGNAL_RANGE_SMPTE = 0,
237 SIGNAL_RANGE_FULL = 1,
238 SIGNAL_RANGE_SDI = 2
Googler9726be62022-12-14 05:53:31 +0000239};
240
Googler9398cc32022-12-02 17:21:52 +0800241enum graphics_format_enum {
242 G_SDR_YUV = 0,
243 G_SDR_RGB = 1,
244 G_HDR_YUV = 2,
245 G_HDR_RGB = 3
Googler9726be62022-12-14 05:53:31 +0000246};
247
Googler9398cc32022-12-02 17:21:52 +0800248struct dm_reg_ipcore2 {
249 u32 s_range;
250 u32 s_range_inverse;
251 u32 y2rgb_coeff1;
252 u32 y2rgb_coeff2;
253 u32 y2rgb_coeff3;
254 u32 y2rgb_coeff4;
255 u32 y2rgb_coeff5;
256 u32 y2rgb_off1;
257 u32 y2rgb_off2;
258 u32 y2rgb_off3;
259 u32 frame_fmt;
260 u32 eotf;
261 u32 a2b_coeff1;
262 u32 a2b_coeff2;
263 u32 a2b_coeff3;
264 u32 a2b_coeff4;
265 u32 a2b_coeff5;
266 u32 c2d_coeff1;
267 u32 c2d_coeff2;
268 u32 c2d_coeff3;
269 u32 c2d_coeff4;
270 u32 c2d_coeff5;
271 u32 c2d_off;
272 u32 vdr_res;
Googler9726be62022-12-14 05:53:31 +0000273};
274
Googler9398cc32022-12-02 17:21:52 +0800275struct dm_reg_ipcore3 {
276 u32 d2c_coeff1;
277 u32 d2c_coeff2;
278 u32 d2c_coeff3;
279 u32 d2c_coeff4;
280 u32 d2c_coeff5;
281 u32 b2a_coeff1;
282 u32 b2a_coeff2;
283 u32 b2a_coeff3;
284 u32 b2a_coeff4;
285 u32 b2a_coeff5;
286 u32 eotf_param1;
287 u32 eotf_param2;
288 u32 ipt_scale;
289 u32 ipt_off1;
290 u32 ipt_off2;
291 u32 ipt_off3;
292 u32 output_range1;
293 u32 output_range2;
294 u32 rgb2yuv_coeff_reg1;
295 u32 rgb2yuv_coeff_reg2;
296 u32 rgb2yuv_coeff_reg3;
297 u32 rgb2yuv_coeff_reg4;
298 u32 rgb2yuv_coeff_reg5;
299 u32 rgb2yuv_off0;
300 u32 rgb2yuv_off1;
301 u32 rgb2yuv_off2;
Googler9726be62022-12-14 05:53:31 +0000302};
303
Googler9398cc32022-12-02 17:21:52 +0800304/*hdmi metadata for core3 */
305struct md_reg_ipcore3 {
306 u32 raw_metadata[512];
307 u32 size;
Googler9726be62022-12-14 05:53:31 +0000308};
309
Googler9398cc32022-12-02 17:21:52 +0800310struct hdr10_infoframe {
311 u8 type_code;
312 u8 version_number;
313 u8 len_of_info_frame;
314 u8 data_byte1;
315 u8 data_byte2;
316 u8 primaries_x_0_lsb;
317 u8 primaries_x_0_msb;
318 u8 primaries_y_0_lsb;
319 u8 primaries_y_0_msb;
320 u8 primaries_x_1_lsb;
321 u8 primaries_x_1_msb;
322 u8 primaries_y_1_lsb;
323 u8 primaries_y_1_msb;
324 u8 primaries_x_2_lsb;
325 u8 primaries_x_2_msb;
326 u8 primaries_y_2_lsb;
327 u8 primaries_y_2_msb;
328 u8 white_point_x_lsb;
329 u8 white_point_x_msb;
330 u8 white_point_y_lsb;
331 u8 white_point_y_msb;
332 u8 max_display_mastering_lum_lsb;
333 u8 max_display_mastering_lum_msb;
334 u8 min_display_mastering_lum_lsb;
335 u8 min_display_mastering_lum_msb;
336 u8 max_content_light_level_lsb;
337 u8 max_content_light_level_msb;
338 u8 max_frame_avg_light_level_lsb;
339 u8 max_frame_avg_light_level_msb;
Googler9726be62022-12-14 05:53:31 +0000340};
341
Googler9398cc32022-12-02 17:21:52 +0800342struct hdr10_parameter {
343 u32 min_display_mastering_lum;
344 u32 max_display_mastering_lum;
345 u16 r_x;
346 u16 r_y;
347 u16 g_x;
348 u16 g_y;
349 u16 b_x;
350 u16 b_y;
351 u16 w_x;
352 u16 w_y;
353 u16 max_content_light_level;
354 u16 max_frame_avg_light_level;
Googler9726be62022-12-14 05:53:31 +0000355};
356
Googler9398cc32022-12-02 17:21:52 +0800357struct ext_level_1 {
358 u8 min_pq_h;
359 u8 min_pq_l;
360 u8 max_pq_h;
361 u8 max_pq_l;
362 u8 avg_pq_h;
363 u8 avg_pq_l;
Googler9726be62022-12-14 05:53:31 +0000364};
365
Googler9398cc32022-12-02 17:21:52 +0800366struct ext_level_2 {
367 u8 target_max_pq_h;
368 u8 target_max_pq_l;
369 u8 trim_slope_h;
370 u8 trim_slope_l;
371 u8 trim_off_h;
372 u8 trim_off_l;
373 u8 trim_power_h;
374 u8 trim_power_l;
375 u8 trim_chroma_weight_h;
376 u8 trim_chroma_weight_l;
377 u8 trim_sat_gain_h;
378 u8 trim_sat_gain_l;
379 u8 ms_weight_h;
380 u8 ms_weight_l;
Googler9726be62022-12-14 05:53:31 +0000381};
382
Googler9398cc32022-12-02 17:21:52 +0800383struct ext_level_4 {
384 u8 anchor_pq_h;
385 u8 anchor_pq_l;
386 u8 anchor_power_h;
387 u8 anchor_power_l;
Googler9726be62022-12-14 05:53:31 +0000388};
389
Googler9398cc32022-12-02 17:21:52 +0800390struct ext_level_5 {
391 u8 active_area_left_off_h;
392 u8 active_area_left_off_l;
393 u8 active_area_right_off_h;
394 u8 active_area_right_off_l;
395 u8 active_area_top_off_h;
396 u8 active_area_top_off_l;
397 u8 active_area_bot_off_h;
398 u8 active_area_bot_off_l;
Googler9726be62022-12-14 05:53:31 +0000399};
400
Googler9398cc32022-12-02 17:21:52 +0800401struct ext_level_6 {
402 u8 max_display_mastering_lum_h;
403 u8 max_display_mastering_lum_l;
404 u8 min_display_mastering_lum_h;
405 u8 min_display_mastering_lum_l;
406 u8 max_content_light_level_h;
407 u8 max_content_light_level_l;
408 u8 max_frame_avg_light_level_h;
409 u8 max_frame_avg_light_level_l;
Googler9726be62022-12-14 05:53:31 +0000410};
411
Googler9398cc32022-12-02 17:21:52 +0800412struct ext_level_254 {
413 u8 mode;
414 u8 version_index;
Googler9726be62022-12-14 05:53:31 +0000415};
416
Googler9398cc32022-12-02 17:21:52 +0800417struct ext_level_255 {
418 u8 run_mode;
419 u8 run_version;
420 u8 dm_debug_0;
421 u8 dm_debug_1;
422 u8 dm_debug_2;
423 u8 dm_debug_3;
Googler9726be62022-12-14 05:53:31 +0000424};
425
426struct ext_md_s {
Googler9398cc32022-12-02 17:21:52 +0800427 u32 avail_level_mask;
428 struct ext_level_1 level_1;
429 struct ext_level_2 level_2;
430 struct ext_level_4 level_4;
431 struct ext_level_5 level_5;
432 struct ext_level_6 level_6;
433 struct ext_level_255 level_255;
Googler9726be62022-12-14 05:53:31 +0000434};
Googler9726be62022-12-14 05:53:31 +0000435
436struct dovi_setting_s {
Googler9398cc32022-12-02 17:21:52 +0800437 struct composer_reg_ipcore comp_reg;
438 struct dm_reg_ipcore1 dm_reg1;
439 struct dm_reg_ipcore2 dm_reg2;
440 struct dm_reg_ipcore3 dm_reg3;
441 struct dm_lut_ipcore dm_lut1;
442 struct dm_lut_ipcore dm_lut2;
Googler9726be62022-12-14 05:53:31 +0000443 /* for dovi output */
Googler9398cc32022-12-02 17:21:52 +0800444 struct md_reg_ipcore3 md_reg3;
Googler9726be62022-12-14 05:53:31 +0000445 /* for hdr10 output */
Googler9398cc32022-12-02 17:21:52 +0800446 struct hdr10_infoframe hdr_info;
Googler9726be62022-12-14 05:53:31 +0000447 /* current process */
Googler9398cc32022-12-02 17:21:52 +0800448 enum signal_format_enum src_format;
449 enum signal_format_enum dst_format;
Googler9726be62022-12-14 05:53:31 +0000450 /* enhanced layer */
451 bool el_flag;
452 bool el_halfsize_flag;
453 /* frame width & height */
Googler9398cc32022-12-02 17:21:52 +0800454 u32 video_width;
455 u32 video_height;
Googler9726be62022-12-14 05:53:31 +0000456 /* use for stb 2.4 */
Googler9398cc32022-12-02 17:21:52 +0800457 enum graphics_format_enum g_format;
458 u32 g_bitdepth;
459 u32 dovi2hdr10_nomapping;
460 u32 use_ll_flag;
461 u32 ll_rgb_desired;
462 u32 diagnostic_enable;
463 u32 diagnostic_mux_select;
464 u32 dovi_ll_enable;
465 u32 vout_width;
466 u32 vout_height;
Googler9726be62022-12-14 05:53:31 +0000467 u8 vsvdb_tbl[32];
468 struct ext_md_s ext_md;
Googler9398cc32022-12-02 17:21:52 +0800469 u32 vsvdb_len;
470 u32 vsvdb_changed;
471 u32 mode_changed;
472};
473
474struct dv_cfg_info_s {
475 int id;
476 char pic_mode_name[32];
477 s16 brightness; /*Brightness */
478 s16 contrast; /*Contrast */
479 s16 colorshift; /*ColorShift or Tint*/
480 s16 saturation; /*Saturation or color */
481 u8 vsvdb[7];
482};
483
484struct dv_pq_center_value_s {
485 s16 brightness; /*Brightness */
486 s16 contrast; /*Contrast */
487 s16 colorshift; /*ColorShift or Tint*/
488 s16 saturation; /*Saturation or color */
489};
490
491struct dv_pq_range_s {
492 s16 left;
493 s16 right;
494};
495
496struct tv_input_info_s {
497 s16 brightness_off[8][2];
498 s32 content_fps;
499 s32 gd_rf_adjust;
500 s32 tid;
501 s32 debug_buf[497];
502};
503
504#define PREFIX_SEI_NUT_NAL 39
505#define SUFFIX_SEI_NUT_NAL 40
506#define SEI_TYPE_USERDATA_REGISTERED_ITUT_T35 4
507#define SEI_TYPE_MASTERING_DISP_COLOUR_VOLUME 137
508
509#define MAX_LEN_2086_SEI 256
510#define MAX_LEN_2094_SEI 256
511
512/* vui params for ATSC 3.0*/
513struct dv_vui_parameters {
514 s32 video_fmt_i;
515 s32 video_fullrange_b;
516 s32 color_description_b;
517 s32 color_primaries_i;
518 s32 trans_characteristic_i;
519 s32 matrix_coeff_i;
520};
521
522/* atsc related params.*/
523struct dv_atsc {
524 struct dv_vui_parameters vui_param;
525 u32 len_2086_sei;
526 u8 sei_2086[MAX_LEN_2086_SEI];
527 u32 len_2094_sei;
528 u8 sei_2094[MAX_LEN_2094_SEI];
Googler9726be62022-12-14 05:53:31 +0000529};
530
531enum cpuID_e {
532 _CPU_MAJOR_ID_GXM,
533 _CPU_MAJOR_ID_TXLX,
534 _CPU_MAJOR_ID_G12,
535 _CPU_MAJOR_ID_TM2,
536 _CPU_MAJOR_ID_TM2_REVB,
537 _CPU_MAJOR_ID_SC2,
Googler9398cc32022-12-02 17:21:52 +0800538 _CPU_MAJOR_ID_T7,
539 _CPU_MAJOR_ID_T3,
540 _CPU_MAJOR_ID_S4D,
541 _CPU_MAJOR_ID_T5W,
Googler9726be62022-12-14 05:53:31 +0000542 _CPU_MAJOR_ID_UNKNOWN,
543};
544
545struct dv_device_data_s {
546 enum cpuID_e cpu_id;
547};
548
549struct amdolby_vision_port_t {
550 const char *name;
551 struct device *dev;
552 const struct file_operations *fops;
553 void *runtime;
554};
555
Googler9398cc32022-12-02 17:21:52 +0800556int control_path
557 (enum signal_format_enum in_format,
558 enum signal_format_enum out_format,
559 char *in_comp, int in_comp_size,
560 char *in_md, int in_md_size,
561 enum priority_mode_enum set_priority,
562 int set_bit_depth, int set_chroma_format, int set_yuv_range,
563 int set_graphic_min_lum, int set_graphic_max_lum,
564 int set_target_min_lum, int set_target_max_lum,
565 int set_no_el,
566 struct hdr10_parameter *hdr10_param,
567 struct dovi_setting_s *output);
Googler9726be62022-12-14 05:53:31 +0000568
569struct tv_dovi_setting_s {
Googler9398cc32022-12-02 17:21:52 +0800570 u64 core1_reg_lut[3754];
Googler9726be62022-12-14 05:53:31 +0000571 /* current process */
Googler9398cc32022-12-02 17:21:52 +0800572 enum signal_format_enum src_format;
573 enum signal_format_enum dst_format;
Googler9726be62022-12-14 05:53:31 +0000574 /* enhanced layer */
575 bool el_flag;
576 bool el_halfsize_flag;
577 /* frame width & height */
Googler9398cc32022-12-02 17:21:52 +0800578 u32 video_width;
579 u32 video_height;
580 enum input_mode_enum input_mode;
581 u16 backlight;
Googler9726be62022-12-14 05:53:31 +0000582};
583
Googler9398cc32022-12-02 17:21:52 +0800584int tv_control_path
585 (enum signal_format_enum in_format,
586 enum input_mode_enum in_mode,
587 char *in_comp, int in_comp_size,
588 char *in_md, int in_md_size,
589 int set_bit_depth, int set_chroma_format, int set_yuv_range,
590 struct pq_config *pq_config,
591 struct ui_menu_params *menu_param,
592 int set_no_el,
593 struct hdr10_parameter *hdr10_param,
594 struct tv_dovi_setting_s *output,
595 char *vsem_if, int vsem_if_size,
596 struct ambient_cfg_s *ambient_cfg,
597 struct tv_input_info_s *input_info);
Googler9726be62022-12-14 05:53:31 +0000598
Googler9398cc32022-12-02 17:21:52 +0800599void *metadata_parser_init(int flag);
600int metadata_parser_reset(int flag);
601int metadata_parser_process
602 (char *src_rpu, int rpu_len,
603 char *dst_comp, int *comp_len,
604 char *dst_md, int *md_len, bool src_eos);
605void metadata_parser_release(void);
Googler9726be62022-12-14 05:53:31 +0000606
607struct dolby_vision_func_s {
608 const char *version_info;
609 void * (*metadata_parser_init)(int flag);
Googler9398cc32022-12-02 17:21:52 +0800610 /*flag: bit0 flag, bit1 0->dv, 1->atsc*/
Googler9726be62022-12-14 05:53:31 +0000611 int (*metadata_parser_reset)(int flag);
Googler9398cc32022-12-02 17:21:52 +0800612 int (*metadata_parser_process)
613 (char *src_rpu, int rpu_len,
614 char *dst_comp, int *comp_len,
615 char *dst_md, int *md_len, bool src_eos);
Googler9726be62022-12-14 05:53:31 +0000616 void (*metadata_parser_release)(void);
Googler9398cc32022-12-02 17:21:52 +0800617 int (*control_path)
618 (enum signal_format_enum in_format,
619 enum signal_format_enum out_format,
620 char *in_comp, int in_comp_size,
621 char *in_md, int in_md_size,
622 enum priority_mode_enum set_priority,
623 int set_bit_depth, int set_chroma_format, int set_yuv_range,
624 int set_graphic_min_lum, int set_graphic_max_lum,
625 int set_target_min_lum, int set_target_max_lum,
626 int set_no_el,
627 struct hdr10_parameter *hdr10_param,
628 struct dovi_setting_s *output);
629 int (*tv_control_path)
630 (enum signal_format_enum in_format,
631 enum input_mode_enum in_mode,
632 char *in_comp, int in_comp_size,
633 char *in_md, int in_md_size,
634 int set_bit_depth, int set_chroma_format, int set_yuv_range,
635 struct pq_config *pq_config,
636 struct ui_menu_params *menu_param,
637 int set_no_el,
638 struct hdr10_parameter *hdr10_param,
639 struct tv_dovi_setting_s *output,
640 char *vsem_if, int vsem_if_size,
641 struct ambient_cfg_s *ambient_cfg,
642 struct tv_input_info_s *input_info);
Googler9726be62022-12-14 05:53:31 +0000643};
644
Googler9398cc32022-12-02 17:21:52 +0800645int register_dv_functions(const struct dolby_vision_func_s *func);
646int unregister_dv_functions(void);
Googler9726be62022-12-14 05:53:31 +0000647#ifndef CONFIG_AMLOGIC_MEDIA_VSYNC_RDMA
648#define VSYNC_WR_MPEG_REG(adr, val) WRITE_VPP_REG(adr, val)
649#define VSYNC_RD_MPEG_REG(adr) READ_VPP_REG(adr)
650#define VSYNC_WR_MPEG_REG_BITS(adr, val, start, len) \
651 WRITE_VPP_REG_BITS(adr, val, start, len)
652#else
Googler9398cc32022-12-02 17:21:52 +0800653int VSYNC_WR_MPEG_REG_BITS(u32 adr, u32 val, u32 start, u32 len);
654u32 VSYNC_RD_MPEG_REG(u32 adr);
655int VSYNC_WR_MPEG_REG(u32 adr, u32 val);
Googler9726be62022-12-14 05:53:31 +0000656#endif
Googler9398cc32022-12-02 17:21:52 +0800657
Googler9726be62022-12-14 05:53:31 +0000658void dv_mem_power_on(enum vpu_mod_e mode);
659void dv_mem_power_off(enum vpu_mod_e mode);
660int get_dv_mem_power_flag(enum vpu_mod_e mode);
Googler9398cc32022-12-02 17:21:52 +0800661int get_dv_vpu_mem_power_status(enum vpu_mod_e mode);
Googler9726be62022-12-14 05:53:31 +0000662bool get_disable_video_flag(enum vd_path_e vd_path);
Googler9726be62022-12-14 05:53:31 +0000663#endif