1186f8572SMark Yao /* 2186f8572SMark Yao * (C) Copyright 2008-2017 Fuzhou Rockchip Electronics Co., Ltd 3186f8572SMark Yao * 4186f8572SMark Yao * SPDX-License-Identifier: GPL-2.0+ 5186f8572SMark Yao */ 6186f8572SMark Yao 7186f8572SMark Yao #include <config.h> 8186f8572SMark Yao #include <common.h> 9186f8572SMark Yao #include <errno.h> 10186f8572SMark Yao #include <malloc.h> 11186f8572SMark Yao #include <asm/unaligned.h> 12186f8572SMark Yao #include <asm/io.h> 13186f8572SMark Yao #include <linux/list.h> 14186f8572SMark Yao 15186f8572SMark Yao #include "rockchip_vop.h" 16186f8572SMark Yao #include "rockchip_vop_reg.h" 17186f8572SMark Yao 18186f8572SMark Yao #define VOP_REG_VER_MASK(off, _mask, s, _write_mask, _major, \ 19186f8572SMark Yao _begin_minor, _end_minor) \ 20186f8572SMark Yao {.offset = off, \ 21186f8572SMark Yao .mask = _mask, \ 22186f8572SMark Yao .shift = s, \ 23186f8572SMark Yao .write_mask = _write_mask, \ 24186f8572SMark Yao .major = _major, \ 25186f8572SMark Yao .begin_minor = _begin_minor, \ 26186f8572SMark Yao .end_minor = _end_minor,} 27186f8572SMark Yao 28186f8572SMark Yao #define VOP_REG(off, _mask, s) \ 29186f8572SMark Yao VOP_REG_VER_MASK(off, _mask, s, false, 0, 0, -1) 30186f8572SMark Yao 31186f8572SMark Yao #define VOP_REG_MASK(off, _mask, s) \ 32186f8572SMark Yao VOP_REG_VER_MASK(off, _mask, s, true, 0, 0, -1) 33186f8572SMark Yao 34186f8572SMark Yao #define VOP_REG_VER(off, _mask, s, _major, _begin_minor, _end_minor) \ 35186f8572SMark Yao VOP_REG_VER_MASK(off, _mask, s, false, \ 36186f8572SMark Yao _major, _begin_minor, _end_minor) 37186f8572SMark Yao 38186f8572SMark Yao static const struct vop_scl_extension rk3288_win_full_scl_ext = { 39186f8572SMark Yao .cbcr_vsd_mode = VOP_REG(RK3288_WIN0_CTRL1, 0x1, 31), 40186f8572SMark Yao .cbcr_vsu_mode = VOP_REG(RK3288_WIN0_CTRL1, 0x1, 30), 41186f8572SMark Yao .cbcr_hsd_mode = VOP_REG(RK3288_WIN0_CTRL1, 0x3, 28), 42186f8572SMark Yao .cbcr_ver_scl_mode = VOP_REG(RK3288_WIN0_CTRL1, 0x3, 26), 43186f8572SMark Yao .cbcr_hor_scl_mode = VOP_REG(RK3288_WIN0_CTRL1, 0x3, 24), 44186f8572SMark Yao .yrgb_vsd_mode = VOP_REG(RK3288_WIN0_CTRL1, 0x1, 23), 45186f8572SMark Yao .yrgb_vsu_mode = VOP_REG(RK3288_WIN0_CTRL1, 0x1, 22), 46186f8572SMark Yao .yrgb_hsd_mode = VOP_REG(RK3288_WIN0_CTRL1, 0x3, 20), 47186f8572SMark Yao .yrgb_ver_scl_mode = VOP_REG(RK3288_WIN0_CTRL1, 0x3, 18), 48186f8572SMark Yao .yrgb_hor_scl_mode = VOP_REG(RK3288_WIN0_CTRL1, 0x3, 16), 49186f8572SMark Yao .line_load_mode = VOP_REG(RK3288_WIN0_CTRL1, 0x1, 15), 50186f8572SMark Yao .cbcr_axi_gather_num = VOP_REG(RK3288_WIN0_CTRL1, 0x7, 12), 51186f8572SMark Yao .yrgb_axi_gather_num = VOP_REG(RK3288_WIN0_CTRL1, 0xf, 8), 52186f8572SMark Yao .vsd_cbcr_gt2 = VOP_REG(RK3288_WIN0_CTRL1, 0x1, 7), 53186f8572SMark Yao .vsd_cbcr_gt4 = VOP_REG(RK3288_WIN0_CTRL1, 0x1, 6), 54186f8572SMark Yao .vsd_yrgb_gt2 = VOP_REG(RK3288_WIN0_CTRL1, 0x1, 5), 55186f8572SMark Yao .vsd_yrgb_gt4 = VOP_REG(RK3288_WIN0_CTRL1, 0x1, 4), 56186f8572SMark Yao .bic_coe_sel = VOP_REG(RK3288_WIN0_CTRL1, 0x3, 2), 57186f8572SMark Yao .cbcr_axi_gather_en = VOP_REG(RK3288_WIN0_CTRL1, 0x1, 1), 58186f8572SMark Yao .yrgb_axi_gather_en = VOP_REG(RK3288_WIN0_CTRL1, 0x1, 0), 59186f8572SMark Yao .lb_mode = VOP_REG(RK3288_WIN0_CTRL0, 0x7, 5), 60186f8572SMark Yao }; 61186f8572SMark Yao 62186f8572SMark Yao static const struct vop_scl_regs rk3288_win_full_scl = { 63186f8572SMark Yao .ext = &rk3288_win_full_scl_ext, 64186f8572SMark Yao .scale_yrgb_x = VOP_REG(RK3288_WIN0_SCL_FACTOR_YRGB, 0xffff, 0x0), 65186f8572SMark Yao .scale_yrgb_y = VOP_REG(RK3288_WIN0_SCL_FACTOR_YRGB, 0xffff, 16), 66186f8572SMark Yao .scale_cbcr_x = VOP_REG(RK3288_WIN0_SCL_FACTOR_CBR, 0xffff, 0x0), 67186f8572SMark Yao .scale_cbcr_y = VOP_REG(RK3288_WIN0_SCL_FACTOR_CBR, 0xffff, 16), 68186f8572SMark Yao }; 69186f8572SMark Yao 70186f8572SMark Yao static const struct vop_win rk3288_win01_data = { 71186f8572SMark Yao .scl = &rk3288_win_full_scl, 72186f8572SMark Yao .enable = VOP_REG(RK3288_WIN0_CTRL0, 0x1, 0), 73186f8572SMark Yao .format = VOP_REG(RK3288_WIN0_CTRL0, 0x7, 1), 74186f8572SMark Yao .rb_swap = VOP_REG(RK3288_WIN0_CTRL0, 0x1, 12), 7555e2f86dSSandy Huang .ymirror = VOP_REG_VER(RK3368_WIN0_CTRL0, 0x1, 22, 3, 2, -1), 76186f8572SMark Yao .act_info = VOP_REG(RK3288_WIN0_ACT_INFO, 0x1fff1fff, 0), 77186f8572SMark Yao .dsp_info = VOP_REG(RK3288_WIN0_DSP_INFO, 0x0fff0fff, 0), 78186f8572SMark Yao .dsp_st = VOP_REG(RK3288_WIN0_DSP_ST, 0x1fff1fff, 0), 79186f8572SMark Yao .yrgb_mst = VOP_REG(RK3288_WIN0_YRGB_MST, 0xffffffff, 0), 80186f8572SMark Yao .uv_mst = VOP_REG(RK3288_WIN0_CBR_MST, 0xffffffff, 0), 81186f8572SMark Yao .yrgb_vir = VOP_REG(RK3288_WIN0_VIR, 0x3fff, 0), 82186f8572SMark Yao .uv_vir = VOP_REG(RK3288_WIN0_VIR, 0x3fff, 16), 83186f8572SMark Yao .src_alpha_ctl = VOP_REG(RK3288_WIN0_SRC_ALPHA_CTRL, 0xffffffff, 0), 84186f8572SMark Yao .dst_alpha_ctl = VOP_REG(RK3288_WIN0_DST_ALPHA_CTRL, 0xffffffff, 0), 85186f8572SMark Yao }; 86186f8572SMark Yao 87186f8572SMark Yao static const struct vop_ctrl rk3288_ctrl_data = { 88186f8572SMark Yao .standby = VOP_REG(RK3288_SYS_CTRL, 0x1, 22), 892b34f307SMark Yao .axi_outstanding_max_num = VOP_REG(RK3288_SYS_CTRL1, 0x1f, 13), 902b34f307SMark Yao .axi_max_outstanding_en = VOP_REG(RK3288_SYS_CTRL1, 0x1, 12), 91dc71f496SSandy Huang .reg_done_frm = VOP_REG_VER(RK3288_SYS_CTRL1, 0x1, 24, 3, 7, -1), 92186f8572SMark Yao .htotal_pw = VOP_REG(RK3288_DSP_HTOTAL_HS_END, 0x1fff1fff, 0), 93186f8572SMark Yao .hact_st_end = VOP_REG(RK3288_DSP_HACT_ST_END, 0x1fff1fff, 0), 94186f8572SMark Yao .vtotal_pw = VOP_REG(RK3288_DSP_VTOTAL_VS_END, 0x1fff1fff, 0), 95186f8572SMark Yao .vact_st_end = VOP_REG(RK3288_DSP_VACT_ST_END, 0x1fff1fff, 0), 96186f8572SMark Yao .vact_st_end_f1 = VOP_REG(RK3288_DSP_VACT_ST_END_F1, 0x1fff1fff, 0), 97186f8572SMark Yao .vs_st_end_f1 = VOP_REG(RK3288_DSP_VS_ST_END_F1, 0x1fff1fff, 0), 98186f8572SMark Yao .hpost_st_end = VOP_REG(RK3288_POST_DSP_HACT_INFO, 0x1fff1fff, 0), 99186f8572SMark Yao .vpost_st_end = VOP_REG(RK3288_POST_DSP_VACT_INFO, 0x1fff1fff, 0), 100186f8572SMark Yao .vpost_st_end_f1 = VOP_REG(RK3288_POST_DSP_VACT_INFO_F1, 0x1fff1fff, 0), 101186f8572SMark Yao .post_scl_factor = VOP_REG(RK3288_POST_SCL_FACTOR_YRGB, 0xffffffff, 0), 102186f8572SMark Yao .post_scl_ctrl = VOP_REG(RK3288_POST_SCL_CTRL, 0x3, 0), 103186f8572SMark Yao 104186f8572SMark Yao .dsp_interlace = VOP_REG(RK3288_DSP_CTRL0, 0x1, 10), 105186f8572SMark Yao .auto_gate_en = VOP_REG(RK3288_SYS_CTRL, 0x1, 23), 106186f8572SMark Yao .dsp_layer_sel = VOP_REG(RK3288_DSP_CTRL1, 0xff, 8), 107186f8572SMark Yao .post_lb_mode = VOP_REG_VER(RK3288_SYS_CTRL, 0x1, 18, 3, 2, -1), 108186f8572SMark Yao .global_regdone_en = VOP_REG_VER(RK3288_SYS_CTRL, 0x1, 11, 3, 2, -1), 109186f8572SMark Yao .overlay_mode = VOP_REG_VER(RK3288_SYS_CTRL, 0x1, 16, 3, 2, -1), 110186f8572SMark Yao .core_dclk_div = VOP_REG_VER(RK3399_DSP_CTRL0, 0x1, 4, 3, 4, -1), 111186f8572SMark Yao .p2i_en = VOP_REG_VER(RK3399_DSP_CTRL0, 0x1, 5, 3, 4, -1), 112186f8572SMark Yao .dclk_ddr = VOP_REG_VER(RK3399_DSP_CTRL0, 0x1, 8, 3, 4, -1), 113186f8572SMark Yao .dp_en = VOP_REG(RK3399_SYS_CTRL, 0x1, 11), 114186f8572SMark Yao .rgb_en = VOP_REG(RK3288_SYS_CTRL, 0x1, 12), 115186f8572SMark Yao .hdmi_en = VOP_REG(RK3288_SYS_CTRL, 0x1, 13), 116186f8572SMark Yao .edp_en = VOP_REG(RK3288_SYS_CTRL, 0x1, 14), 117186f8572SMark Yao .mipi_en = VOP_REG(RK3288_SYS_CTRL, 0x1, 15), 118186f8572SMark Yao .mipi_dual_channel_en = VOP_REG(RK3288_SYS_CTRL, 0x1, 3), 119186f8572SMark Yao .data01_swap = VOP_REG_VER(RK3288_SYS_CTRL, 0x1, 17, 3, 5, -1), 1203a06149eSSandy Huang .dclk_pol = VOP_REG_VER(RK3288_DSP_CTRL0, 0x1, 7, 3, 0, 1), 121186f8572SMark Yao .pin_pol = VOP_REG_VER(RK3288_DSP_CTRL0, 0xf, 4, 3, 0, 1), 1223a06149eSSandy Huang .dp_dclk_pol = VOP_REG_VER(RK3399_DSP_CTRL1, 0x1, 19, 3, 5, -1), 1233a06149eSSandy Huang .dp_pin_pol = VOP_REG_VER(RK3399_DSP_CTRL1, 0x7, 16, 3, 5, -1), 1243a06149eSSandy Huang .rgb_dclk_pol = VOP_REG_VER(RK3368_DSP_CTRL1, 0x1, 19, 3, 2, -1), 1253a06149eSSandy Huang .rgb_pin_pol = VOP_REG_VER(RK3368_DSP_CTRL1, 0x7, 16, 3, 2, -1), 1263a06149eSSandy Huang .tve_dclk_en = VOP_REG(RK3288_SYS_CTRL, 0x1, 24), 1273a06149eSSandy Huang .tve_dclk_pol = VOP_REG(RK3288_SYS_CTRL, 0x1, 25), 1283a06149eSSandy Huang .tve_sw_mode = VOP_REG(RK3288_SYS_CTRL, 0x1, 26), 1293a06149eSSandy Huang .sw_uv_offset_en = VOP_REG(RK3288_SYS_CTRL, 0x1, 27), 1303a06149eSSandy Huang .sw_genlock = VOP_REG(RK3288_SYS_CTRL, 0x1, 28), 1313a06149eSSandy Huang .hdmi_dclk_pol = VOP_REG_VER(RK3368_DSP_CTRL1, 0x1, 23, 3, 2, -1), 1323a06149eSSandy Huang .hdmi_pin_pol = VOP_REG_VER(RK3368_DSP_CTRL1, 0x7, 20, 3, 2, -1), 1333a06149eSSandy Huang .edp_dclk_pol = VOP_REG_VER(RK3368_DSP_CTRL1, 0x1, 27, 3, 2, -1), 1343a06149eSSandy Huang .edp_pin_pol = VOP_REG_VER(RK3368_DSP_CTRL1, 0x7, 24, 3, 2, -1), 1353a06149eSSandy Huang .mipi_dclk_pol = VOP_REG_VER(RK3368_DSP_CTRL1, 0x1, 31, 3, 2, -1), 1363a06149eSSandy Huang .mipi_pin_pol = VOP_REG_VER(RK3368_DSP_CTRL1, 0x7, 28, 3, 2, -1), 137186f8572SMark Yao 138186f8572SMark Yao .dither_down = VOP_REG(RK3288_DSP_CTRL1, 0xf, 1), 139186f8572SMark Yao .dither_up = VOP_REG(RK3288_DSP_CTRL1, 0x1, 6), 140186f8572SMark Yao 141186f8572SMark Yao .dsp_out_yuv = VOP_REG_VER(RK3399_POST_SCL_CTRL, 0x1, 2, 3, 5, -1), 142186f8572SMark Yao .dsp_data_swap = VOP_REG(RK3288_DSP_CTRL0, 0x1f, 12), 14332328971SDamon Ding .dsp_bg_swap = VOP_REG(RK3288_DSP_CTRL0, 0x1, 12), 14432328971SDamon Ding .dsp_rb_swap = VOP_REG(RK3288_DSP_CTRL0, 0x1, 13), 14532328971SDamon Ding .dsp_rg_swap = VOP_REG(RK3288_DSP_CTRL0, 0x1, 14), 14632328971SDamon Ding .dsp_delta_swap = VOP_REG(RK3288_DSP_CTRL0, 0x1, 15), 14732328971SDamon Ding .dsp_dummy_swap = VOP_REG(RK3288_DSP_CTRL0, 0x1, 16), 148186f8572SMark Yao .dsp_ccir656_avg = VOP_REG(RK3288_DSP_CTRL0, 0x1, 20), 149186f8572SMark Yao .dsp_blank = VOP_REG(RK3288_DSP_CTRL0, 0x3, 18), 150186f8572SMark Yao .dsp_lut_en = VOP_REG(RK3288_DSP_CTRL1, 0x1, 0), 151186f8572SMark Yao .update_gamma_lut = VOP_REG_VER(RK3288_DSP_CTRL1, 0x1, 7, 3, 5, -1), 152186f8572SMark Yao .out_mode = VOP_REG(RK3288_DSP_CTRL0, 0xf, 0), 153186f8572SMark Yao 1542b34f307SMark Yao .bcsh_brightness = VOP_REG(RK3288_BCSH_BCS, 0xff, 0), 1552b34f307SMark Yao .bcsh_contrast = VOP_REG(RK3288_BCSH_BCS, 0x1ff, 8), 1562b34f307SMark Yao .bcsh_sat_con = VOP_REG(RK3288_BCSH_BCS, 0x3ff, 20), 1572b34f307SMark Yao .bcsh_out_mode = VOP_REG(RK3288_BCSH_BCS, 0x3, 0), 1582b34f307SMark Yao .bcsh_sin_hue = VOP_REG(RK3288_BCSH_H, 0x1ff, 0), 1592b34f307SMark Yao .bcsh_cos_hue = VOP_REG(RK3288_BCSH_H, 0x1ff, 16), 1602b34f307SMark Yao .bcsh_r2y_csc_mode = VOP_REG_VER(RK3368_BCSH_CTRL, 0x1, 6, 3, 1, -1), 1612b34f307SMark Yao .bcsh_r2y_en = VOP_REG_VER(RK3368_BCSH_CTRL, 0x1, 4, 3, 1, -1), 1622b34f307SMark Yao .bcsh_y2r_csc_mode = VOP_REG_VER(RK3368_BCSH_CTRL, 0x3, 2, 3, 1, -1), 1632b34f307SMark Yao .bcsh_y2r_en = VOP_REG_VER(RK3368_BCSH_CTRL, 0x1, 0, 3, 1, -1), 1642b34f307SMark Yao .bcsh_color_bar = VOP_REG(RK3288_BCSH_COLOR_BAR, 0xffffff, 8), 1652b34f307SMark Yao .bcsh_en = VOP_REG(RK3288_BCSH_COLOR_BAR, 0x1, 0), 1662b34f307SMark Yao 167186f8572SMark Yao .xmirror = VOP_REG(RK3288_DSP_CTRL0, 0x1, 22), 168186f8572SMark Yao .ymirror = VOP_REG(RK3288_DSP_CTRL0, 0x1, 23), 169186f8572SMark Yao 170186f8572SMark Yao .dsp_background = VOP_REG(RK3288_DSP_BG, 0xffffffff, 0), 171186f8572SMark Yao 172186f8572SMark Yao .cfg_done = VOP_REG(RK3288_REG_CFG_DONE, 0x1, 0), 173186f8572SMark Yao .win_gate[0] = VOP_REG(RK3288_WIN2_CTRL0, 0x1, 0), 174186f8572SMark Yao .win_gate[1] = VOP_REG(RK3288_WIN3_CTRL0, 0x1, 0), 1756b898587SDamon Ding 1766b898587SDamon Ding .mcu_pix_total = VOP_REG(RK3288_MCU_CTRL, 0x3f, 0), 1776b898587SDamon Ding .mcu_cs_pst = VOP_REG(RK3288_MCU_CTRL, 0xf, 6), 1786b898587SDamon Ding .mcu_cs_pend = VOP_REG(RK3288_MCU_CTRL, 0x3f, 10), 1796b898587SDamon Ding .mcu_rw_pst = VOP_REG(RK3288_MCU_CTRL, 0xf, 16), 1806b898587SDamon Ding .mcu_rw_pend = VOP_REG(RK3288_MCU_CTRL, 0x3f, 20), 1816b898587SDamon Ding .mcu_clk_sel = VOP_REG(RK3288_MCU_CTRL, 0x1, 26), 1826b898587SDamon Ding .mcu_hold_mode = VOP_REG(RK3288_MCU_CTRL, 0x1, 27), 1836b898587SDamon Ding .mcu_frame_st = VOP_REG(RK3288_MCU_CTRL, 0x1, 28), 1846b898587SDamon Ding .mcu_rs = VOP_REG(RK3288_MCU_CTRL, 0x1, 29), 1856b898587SDamon Ding .mcu_bypass = VOP_REG(RK3288_MCU_CTRL, 0x1, 30), 1866b898587SDamon Ding .mcu_type = VOP_REG(RK3288_MCU_CTRL, 0x1, 31), 1876b898587SDamon Ding .mcu_rw_bypass_port = VOP_REG(RK3288_MCU_BYPASS_WPORT, 0xffffffff, 0), 188186f8572SMark Yao }; 189186f8572SMark Yao 190186f8572SMark Yao static const struct vop_line_flag rk3288_vop_line_flag = { 191186f8572SMark Yao .line_flag_num[0] = VOP_REG(RK3288_INTR_CTRL0, 0x1fff, 12), 192186f8572SMark Yao }; 193186f8572SMark Yao 1943a06149eSSandy Huang static const struct vop_grf_ctrl rk3288_vop_big_grf_ctrl = { 19538dab658SSandy Huang .grf_dclk_inv = VOP_REG(RK3288_GRF_SOC_CON15, 0x1, 13), 1963a06149eSSandy Huang }; 1973a06149eSSandy Huang 1983a06149eSSandy Huang static const struct vop_grf_ctrl rk3288_vop_lit_grf_ctrl = { 19938dab658SSandy Huang .grf_dclk_inv = VOP_REG(RK3288_GRF_SOC_CON15, 0x1, 15), 2003a06149eSSandy Huang }; 2013a06149eSSandy Huang 20206bb018fSSandy Huang const struct vop_data rk3288_vop_big = { 203186f8572SMark Yao .version = VOP_VERSION(3, 1), 2042735489aSSandy Huang .max_output = {3840, 2160}, 205186f8572SMark Yao .feature = VOP_FEATURE_OUTPUT_10BIT, 206186f8572SMark Yao .ctrl = &rk3288_ctrl_data, 2073a06149eSSandy Huang .grf_ctrl = &rk3288_vop_big_grf_ctrl, 208186f8572SMark Yao .win = &rk3288_win01_data, 209186f8572SMark Yao .line_flag = &rk3288_vop_line_flag, 210186f8572SMark Yao .reg_len = RK3288_DSP_VACT_ST_END_F1 * 4, 211186f8572SMark Yao }; 212186f8572SMark Yao 21306bb018fSSandy Huang const struct vop_data rk3288_vop_lit = { 21406bb018fSSandy Huang .version = VOP_VERSION(3, 1), 21506bb018fSSandy Huang .max_output = {2560, 1600}, 21606bb018fSSandy Huang .feature = VOP_FEATURE_OUTPUT_10BIT, 21706bb018fSSandy Huang .ctrl = &rk3288_ctrl_data, 2183a06149eSSandy Huang .grf_ctrl = &rk3288_vop_lit_grf_ctrl, 21906bb018fSSandy Huang .win = &rk3288_win01_data, 22006bb018fSSandy Huang .line_flag = &rk3288_vop_line_flag, 22106bb018fSSandy Huang .reg_len = RK3288_DSP_VACT_ST_END_F1 * 4, 22206bb018fSSandy Huang }; 22306bb018fSSandy Huang 224edf8d43cSNickey Yang static const struct vop_win rk3368_win23_data = { 225edf8d43cSNickey Yang .enable = VOP_REG(RK3368_WIN2_CTRL0, 0x1, 4), 226edf8d43cSNickey Yang .format = VOP_REG(RK3368_WIN2_CTRL0, 0x3, 5), 227edf8d43cSNickey Yang .ymirror = VOP_REG(RK3368_WIN2_CTRL1, 0x1, 15), 228edf8d43cSNickey Yang .rb_swap = VOP_REG(RK3368_WIN2_CTRL0, 0x1, 20), 229edf8d43cSNickey Yang .dsp_info = VOP_REG(RK3368_WIN2_DSP_INFO0, 0x0fff0fff, 0), 230edf8d43cSNickey Yang .dsp_st = VOP_REG(RK3368_WIN2_DSP_ST0, 0x1fff1fff, 0), 231edf8d43cSNickey Yang .yrgb_mst = VOP_REG(RK3368_WIN2_MST0, 0xffffffff, 0), 232edf8d43cSNickey Yang .yrgb_vir = VOP_REG(RK3368_WIN2_VIR0_1, 0x1fff, 0), 233edf8d43cSNickey Yang .src_alpha_ctl = VOP_REG(RK3368_WIN2_SRC_ALPHA_CTRL, 0xffff, 0), 234edf8d43cSNickey Yang .dst_alpha_ctl = VOP_REG(RK3368_WIN2_DST_ALPHA_CTRL, 0xffffffff, 0), 235edf8d43cSNickey Yang }; 236edf8d43cSNickey Yang 237186f8572SMark Yao static const struct vop_line_flag rk3368_vop_line_flag = { 238186f8572SMark Yao .line_flag_num[0] = VOP_REG(RK3368_LINE_FLAG, 0xffff, 0), 239186f8572SMark Yao .line_flag_num[1] = VOP_REG(RK3368_LINE_FLAG, 0xffff, 16), 240186f8572SMark Yao }; 241186f8572SMark Yao 2423a06149eSSandy Huang static const struct vop_grf_ctrl rk3368_vop_grf_ctrl = { 2433a06149eSSandy Huang .grf_dclk_inv = VOP_REG(RK3368_GRF_SOC_CON6, 0x1, 5), 2443a06149eSSandy Huang }; 2453a06149eSSandy Huang 246186f8572SMark Yao const struct vop_data rk3368_vop = { 247186f8572SMark Yao .version = VOP_VERSION(3, 2), 2482735489aSSandy Huang .max_output = {4096, 2160}, 249186f8572SMark Yao .ctrl = &rk3288_ctrl_data, 2503a06149eSSandy Huang .grf_ctrl = &rk3368_vop_grf_ctrl, 251186f8572SMark Yao .win = &rk3288_win01_data, 252186f8572SMark Yao .line_flag = &rk3368_vop_line_flag, 253186f8572SMark Yao .reg_len = RK3368_DSP_VACT_ST_END_F1 * 4, 254186f8572SMark Yao }; 255186f8572SMark Yao 256186f8572SMark Yao static const struct vop_line_flag rk3366_vop_line_flag = { 257186f8572SMark Yao .line_flag_num[0] = VOP_REG(RK3366_LINE_FLAG, 0xffff, 0), 258186f8572SMark Yao .line_flag_num[1] = VOP_REG(RK3366_LINE_FLAG, 0xffff, 16), 259186f8572SMark Yao }; 260186f8572SMark Yao 261186f8572SMark Yao const struct vop_data rk3366_vop = { 262186f8572SMark Yao .version = VOP_VERSION(3, 4), 2632735489aSSandy Huang .max_output = {4096, 2160}, 264186f8572SMark Yao .ctrl = &rk3288_ctrl_data, 265186f8572SMark Yao .win = &rk3288_win01_data, 266186f8572SMark Yao .line_flag = &rk3366_vop_line_flag, 267186f8572SMark Yao .reg_len = RK3366_DSP_VACT_ST_END_F1 * 4, 268186f8572SMark Yao }; 269186f8572SMark Yao 270b7618fd3SSandy Huang static const uint32_t vop_csc_r2y_bt601[] = { 271b7618fd3SSandy Huang 0x02590132, 0xff530075, 0x0200fead, 0xfe530200, 272b7618fd3SSandy Huang 0x0000ffad, 0x00000200, 0x00080200, 0x00080200, 273b7618fd3SSandy Huang }; 274b7618fd3SSandy Huang 275b7618fd3SSandy Huang static const uint32_t vop_csc_r2y_bt601_12_235[] = { 276ef891bb5SSandy Huang 0x02040107, 0xff680064, 0x01c2fed6, 0xfe8701c2, 277b7618fd3SSandy Huang 0x0000ffb7, 0x00010200, 0x00080200, 0x00080200, 278b7618fd3SSandy Huang }; 279b7618fd3SSandy Huang 280b7618fd3SSandy Huang static const uint32_t vop_csc_r2y_bt709[] = { 281b7618fd3SSandy Huang 0x027500bb, 0xff99003f, 0x01c2fea5, 0xfe6801c2, 282b7618fd3SSandy Huang 0x0000ffd7, 0x00010200, 0x00080200, 0x00080200, 283b7618fd3SSandy Huang }; 284b7618fd3SSandy Huang 285b7618fd3SSandy Huang static const uint32_t vop_csc_r2y_bt2020[] = { 286b7618fd3SSandy Huang 0x025300e6, 0xff830034, 0x01c1febd, 0xfe6401c1, 287b7618fd3SSandy Huang 0x0000ffdc, 0x00010200, 0x00080200, 0x00080200, 288b7618fd3SSandy Huang }; 289b7618fd3SSandy Huang 290b7618fd3SSandy Huang static const struct vop_csc_table rk3399_csc_table = { 291b7618fd3SSandy Huang .r2y_bt601 = vop_csc_r2y_bt601, 292b7618fd3SSandy Huang .r2y_bt601_12_235 = vop_csc_r2y_bt601_12_235, 293b7618fd3SSandy Huang .r2y_bt709 = vop_csc_r2y_bt709, 294b7618fd3SSandy Huang .r2y_bt2020 = vop_csc_r2y_bt2020, 295b7618fd3SSandy Huang }; 296b7618fd3SSandy Huang 297b7618fd3SSandy Huang static const struct vop_csc rk3399_win0_csc = { 298b7618fd3SSandy Huang .r2r_en = VOP_REG(RK3399_YUV2YUV_WIN, 0x1, 0), 299b7618fd3SSandy Huang .y2r_en = VOP_REG(RK3399_YUV2YUV_WIN, 0x1, 1), 300b7618fd3SSandy Huang .r2y_en = VOP_REG(RK3399_YUV2YUV_WIN, 0x1, 2), 301b7618fd3SSandy Huang .y2r_offset = RK3399_WIN0_YUV2YUV_Y2R, 302b7618fd3SSandy Huang .r2r_offset = RK3399_WIN0_YUV2YUV_3X3, 303b7618fd3SSandy Huang .r2y_offset = RK3399_WIN0_YUV2YUV_R2Y, 304b7618fd3SSandy Huang }; 305b7618fd3SSandy Huang 306af50552eSSandy Huang static const struct vop_csc rk3399_win2_csc = { 307af50552eSSandy Huang .r2r_en = VOP_REG(RK3399_YUV2YUV_WIN, 0x1, 16), 308af50552eSSandy Huang .r2y_en = VOP_REG(RK3399_YUV2YUV_WIN, 0x1, 18), 309af50552eSSandy Huang .r2r_offset = RK3399_WIN2_YUV2YUV_3X3, 310af50552eSSandy Huang 311af50552eSSandy Huang }; 312af50552eSSandy Huang 313186f8572SMark Yao const struct vop_data rk3399_vop_big = { 314186f8572SMark Yao .version = VOP_VERSION(3, 5), 3152735489aSSandy Huang .max_output = {4096, 2160}, 316186f8572SMark Yao .feature = VOP_FEATURE_OUTPUT_10BIT, 317186f8572SMark Yao .ctrl = &rk3288_ctrl_data, 318186f8572SMark Yao .win = &rk3288_win01_data, 319186f8572SMark Yao .line_flag = &rk3366_vop_line_flag, 320b7618fd3SSandy Huang .csc_table = &rk3399_csc_table, 321b7618fd3SSandy Huang .win_csc = &rk3399_win0_csc, 322186f8572SMark Yao .reg_len = RK3399_DSP_VACT_ST_END_F1 * 4, 323186f8572SMark Yao }; 324186f8572SMark Yao 325186f8572SMark Yao const struct vop_data rk3399_vop_lit = { 326186f8572SMark Yao .version = VOP_VERSION(3, 6), 3272735489aSSandy Huang .max_output = {2560, 1600}, 328186f8572SMark Yao .ctrl = &rk3288_ctrl_data, 329edf8d43cSNickey Yang .win = &rk3368_win23_data, 330186f8572SMark Yao .line_flag = &rk3366_vop_line_flag, 331b7618fd3SSandy Huang .csc_table = &rk3399_csc_table, 332af50552eSSandy Huang .win_csc = &rk3399_win2_csc, 333186f8572SMark Yao .reg_len = RK3399_DSP_VACT_ST_END_F1 * 4, 334186f8572SMark Yao }; 335186f8572SMark Yao 336186f8572SMark Yao const struct vop_data rk322x_vop = { 337186f8572SMark Yao .version = VOP_VERSION(3, 7), 3382735489aSSandy Huang .max_output = {4096, 2160}, 339186f8572SMark Yao .feature = VOP_FEATURE_OUTPUT_10BIT, 340186f8572SMark Yao .ctrl = &rk3288_ctrl_data, 341186f8572SMark Yao .win = &rk3288_win01_data, 342186f8572SMark Yao .line_flag = &rk3366_vop_line_flag, 343186f8572SMark Yao .reg_len = RK3399_DSP_VACT_ST_END_F1 * 4, 344186f8572SMark Yao }; 345186f8572SMark Yao 346186f8572SMark Yao static const struct vop_ctrl rk3328_ctrl_data = { 347186f8572SMark Yao .standby = VOP_REG(RK3328_SYS_CTRL, 0x1, 22), 3482b34f307SMark Yao .axi_outstanding_max_num = VOP_REG(RK3328_SYS_CTRL1, 0x1f, 13), 3492b34f307SMark Yao .axi_max_outstanding_en = VOP_REG(RK3328_SYS_CTRL1, 0x1, 12), 350b0dbe9a0SSandy Huang .reg_done_frm = VOP_REG(RK3328_SYS_CTRL1, 0x1, 24), 351186f8572SMark Yao .auto_gate_en = VOP_REG(RK3328_SYS_CTRL, 0x1, 23), 352186f8572SMark Yao .htotal_pw = VOP_REG(RK3328_DSP_HTOTAL_HS_END, 0x1fff1fff, 0), 353186f8572SMark Yao .hact_st_end = VOP_REG(RK3328_DSP_HACT_ST_END, 0x1fff1fff, 0), 354186f8572SMark Yao .vtotal_pw = VOP_REG(RK3328_DSP_VTOTAL_VS_END, 0x1fff1fff, 0), 355186f8572SMark Yao .vact_st_end = VOP_REG(RK3328_DSP_VACT_ST_END, 0x1fff1fff, 0), 356186f8572SMark Yao .vact_st_end_f1 = VOP_REG(RK3328_DSP_VACT_ST_END_F1, 0x1fff1fff, 0), 357186f8572SMark Yao .vs_st_end_f1 = VOP_REG(RK3328_DSP_VS_ST_END_F1, 0x1fff1fff, 0), 358186f8572SMark Yao .hpost_st_end = VOP_REG(RK3328_POST_DSP_HACT_INFO, 0x1fff1fff, 0), 359186f8572SMark Yao .vpost_st_end = VOP_REG(RK3328_POST_DSP_VACT_INFO, 0x1fff1fff, 0), 360186f8572SMark Yao .vpost_st_end_f1 = VOP_REG(RK3328_POST_DSP_VACT_INFO_F1, 0x1fff1fff, 0), 36179feefb1SSandy Huang .post_scl_factor = VOP_REG(RK3328_POST_SCL_FACTOR_YRGB, 0xffffffff, 0), 36279feefb1SSandy Huang .post_scl_ctrl = VOP_REG(RK3328_POST_SCL_CTRL, 0x3, 0), 36379feefb1SSandy Huang .dsp_out_yuv = VOP_REG(RK3328_POST_SCL_CTRL, 0x1, 2), 364186f8572SMark Yao .dsp_interlace = VOP_REG(RK3328_DSP_CTRL0, 0x1, 10), 365186f8572SMark Yao .dsp_layer_sel = VOP_REG(RK3328_DSP_CTRL1, 0xff, 8), 366186f8572SMark Yao .post_lb_mode = VOP_REG(RK3328_SYS_CTRL, 0x1, 18), 367186f8572SMark Yao .global_regdone_en = VOP_REG(RK3328_SYS_CTRL, 0x1, 11), 368186f8572SMark Yao .overlay_mode = VOP_REG(RK3328_SYS_CTRL, 0x1, 16), 369186f8572SMark Yao .core_dclk_div = VOP_REG(RK3328_DSP_CTRL0, 0x1, 4), 37044aac45bSSandy Huang .dclk_ddr = VOP_REG(RK3328_DSP_CTRL0, 0x1, 8), 371186f8572SMark Yao .p2i_en = VOP_REG(RK3328_DSP_CTRL0, 0x1, 5), 372186f8572SMark Yao .rgb_en = VOP_REG(RK3328_SYS_CTRL, 0x1, 12), 373186f8572SMark Yao .hdmi_en = VOP_REG(RK3328_SYS_CTRL, 0x1, 13), 374186f8572SMark Yao .edp_en = VOP_REG(RK3328_SYS_CTRL, 0x1, 14), 375186f8572SMark Yao .mipi_en = VOP_REG(RK3328_SYS_CTRL, 0x1, 15), 37609b01f9eSAlgea Cao .tve_dclk_en = VOP_REG(RK3328_SYS_CTRL, 0x1, 24), 37709b01f9eSAlgea Cao .tve_dclk_pol = VOP_REG(RK3328_SYS_CTRL, 0x1, 25), 37809b01f9eSAlgea Cao .tve_sw_mode = VOP_REG(RK3328_SYS_CTRL, 0x1, 26), 37909b01f9eSAlgea Cao .sw_uv_offset_en = VOP_REG(RK3328_SYS_CTRL, 0x1, 27), 38009b01f9eSAlgea Cao .sw_genlock = VOP_REG(RK3328_SYS_CTRL, 0x1, 28), 38109b01f9eSAlgea Cao .sw_dac_sel = VOP_REG(RK3328_SYS_CTRL, 0x1, 29), 382186f8572SMark Yao .rgb_pin_pol = VOP_REG(RK3328_DSP_CTRL1, 0xf, 16), 383186f8572SMark Yao .hdmi_pin_pol = VOP_REG(RK3328_DSP_CTRL1, 0xf, 20), 384186f8572SMark Yao .edp_pin_pol = VOP_REG(RK3328_DSP_CTRL1, 0xf, 24), 385186f8572SMark Yao .mipi_pin_pol = VOP_REG(RK3328_DSP_CTRL1, 0xf, 28), 386186f8572SMark Yao 387186f8572SMark Yao .dither_down = VOP_REG(RK3328_DSP_CTRL1, 0xf, 1), 388186f8572SMark Yao .dither_up = VOP_REG(RK3328_DSP_CTRL1, 0x1, 6), 389186f8572SMark Yao 390186f8572SMark Yao .dsp_data_swap = VOP_REG(RK3328_DSP_CTRL0, 0x1f, 12), 39132328971SDamon Ding .dsp_bg_swap = VOP_REG(RK3328_DSP_CTRL0, 0x1, 12), 39232328971SDamon Ding .dsp_rb_swap = VOP_REG(RK3328_DSP_CTRL0, 0x1, 13), 39332328971SDamon Ding .dsp_rg_swap = VOP_REG(RK3328_DSP_CTRL0, 0x1, 14), 39432328971SDamon Ding .dsp_delta_swap = VOP_REG(RK3328_DSP_CTRL0, 0x1, 15), 39532328971SDamon Ding .dsp_dummy_swap = VOP_REG(RK3328_DSP_CTRL0, 0x1, 16), 396186f8572SMark Yao .dsp_ccir656_avg = VOP_REG(RK3328_DSP_CTRL0, 0x1, 20), 397186f8572SMark Yao .dsp_blank = VOP_REG(RK3328_DSP_CTRL0, 0x3, 18), 398186f8572SMark Yao .dsp_lut_en = VOP_REG(RK3328_DSP_CTRL1, 0x1, 0), 399186f8572SMark Yao .out_mode = VOP_REG(RK3328_DSP_CTRL0, 0xf, 0), 400186f8572SMark Yao 401186f8572SMark Yao .xmirror = VOP_REG(RK3328_DSP_CTRL0, 0x1, 22), 402186f8572SMark Yao .ymirror = VOP_REG(RK3328_DSP_CTRL0, 0x1, 23), 403186f8572SMark Yao 404186f8572SMark Yao .dsp_background = VOP_REG(RK3328_DSP_BG, 0xffffffff, 0), 405186f8572SMark Yao 40679feefb1SSandy Huang .bcsh_brightness = VOP_REG(RK3328_BCSH_BCS, 0xff, 0), 40779feefb1SSandy Huang .bcsh_contrast = VOP_REG(RK3328_BCSH_BCS, 0x1ff, 8), 40879feefb1SSandy Huang .bcsh_sat_con = VOP_REG(RK3328_BCSH_BCS, 0x3ff, 20), 40979feefb1SSandy Huang .bcsh_out_mode = VOP_REG(RK3328_BCSH_BCS, 0x3, 30), 41079feefb1SSandy Huang .bcsh_sin_hue = VOP_REG(RK3328_BCSH_H, 0x1ff, 0), 41179feefb1SSandy Huang .bcsh_cos_hue = VOP_REG(RK3328_BCSH_H, 0x1ff, 16), 41279feefb1SSandy Huang .bcsh_r2y_csc_mode = VOP_REG(RK3328_BCSH_CTRL, 0x3, 6), 41379feefb1SSandy Huang .bcsh_r2y_en = VOP_REG(RK3328_BCSH_CTRL, 0x1, 4), 41479feefb1SSandy Huang .bcsh_y2r_csc_mode = VOP_REG(RK3328_BCSH_CTRL, 0x3, 2), 41579feefb1SSandy Huang .bcsh_y2r_en = VOP_REG(RK3328_BCSH_CTRL, 0x1, 0), 41679feefb1SSandy Huang .bcsh_color_bar = VOP_REG(RK3328_BCSH_COLOR_BAR, 0xffffff, 8), 41779feefb1SSandy Huang .bcsh_en = VOP_REG(RK3328_BCSH_COLOR_BAR, 0x1, 0), 4182b34f307SMark Yao .win_channel[0] = VOP_REG_VER(RK3328_WIN0_CTRL2, 0xff, 0, 3, 8, 8), 4192b34f307SMark Yao .win_channel[1] = VOP_REG_VER(RK3328_WIN1_CTRL2, 0xff, 0, 3, 8, 8), 4202b34f307SMark Yao .win_channel[2] = VOP_REG_VER(RK3328_WIN2_CTRL2, 0xff, 0, 3, 8, 8), 42179feefb1SSandy Huang 422186f8572SMark Yao .cfg_done = VOP_REG(RK3328_REG_CFG_DONE, 0x1, 0), 423186f8572SMark Yao }; 424186f8572SMark Yao 425186f8572SMark Yao 426186f8572SMark Yao static const struct vop_line_flag rk3328_vop_line_flag = { 427186f8572SMark Yao .line_flag_num[0] = VOP_REG(RK3328_LINE_FLAG, 0xffff, 0), 428186f8572SMark Yao .line_flag_num[1] = VOP_REG(RK3328_LINE_FLAG, 0xffff, 16), 429186f8572SMark Yao }; 430186f8572SMark Yao 431186f8572SMark Yao const struct vop_data rk3328_vop = { 432186f8572SMark Yao .version = VOP_VERSION(3, 8), 4332735489aSSandy Huang .max_output = {4096, 2160}, 434186f8572SMark Yao .feature = VOP_FEATURE_OUTPUT_10BIT, 435186f8572SMark Yao .ctrl = &rk3328_ctrl_data, 436186f8572SMark Yao .win = &rk3288_win01_data, 437186f8572SMark Yao .win_offset = 0xd0, 438186f8572SMark Yao .line_flag = &rk3328_vop_line_flag, 439186f8572SMark Yao .reg_len = RK3328_DSP_VACT_ST_END_F1 * 4, 440186f8572SMark Yao }; 441186f8572SMark Yao 44248efbc7eSSandy Huang static const struct vop_win rk3126_win1_data = { 44348efbc7eSSandy Huang .enable = VOP_REG(RK3036_SYS_CTRL, 0x1, 1), 44448efbc7eSSandy Huang .format = VOP_REG(RK3036_SYS_CTRL, 0x7, 6), 44548efbc7eSSandy Huang .rb_swap = VOP_REG(RK3036_SYS_CTRL, 0x1, 19), 44648efbc7eSSandy Huang .dsp_info = VOP_REG(RK3126_WIN1_DSP_INFO, 0x0fff0fff, 0), 44748efbc7eSSandy Huang .dsp_st = VOP_REG(RK3126_WIN1_DSP_ST, 0x1fff1fff, 0), 44848efbc7eSSandy Huang .yrgb_mst = VOP_REG(RK3126_WIN1_MST, 0xffffffff, 0), 44948efbc7eSSandy Huang .yrgb_vir = VOP_REG(RK3036_WIN1_VIR, 0xffff, 0), 450186f8572SMark Yao }; 451186f8572SMark Yao 452186f8572SMark Yao static const struct vop_ctrl rk3036_ctrl_data = { 453186f8572SMark Yao .standby = VOP_REG(RK3036_SYS_CTRL, 0x1, 30), 454186f8572SMark Yao .out_mode = VOP_REG(RK3036_DSP_CTRL0, 0xf, 0), 455186f8572SMark Yao .dsp_blank = VOP_REG(RK3036_DSP_CTRL1, 0x1, 24), 4563a06149eSSandy Huang .dclk_pol = VOP_REG(RK3036_DSP_CTRL0, 0x1, 7), 457186f8572SMark Yao .pin_pol = VOP_REG(RK3036_DSP_CTRL0, 0xf, 4), 458513e5cb6SSandy Huang .dither_down = VOP_REG(RK3036_DSP_CTRL0, 0x3, 10), 459186f8572SMark Yao .dsp_layer_sel = VOP_REG(RK3036_DSP_CTRL0, 0x1, 8), 460186f8572SMark Yao .htotal_pw = VOP_REG(RK3036_DSP_HTOTAL_HS_END, 0x1fff1fff, 0), 461186f8572SMark Yao .hact_st_end = VOP_REG(RK3036_DSP_HACT_ST_END, 0x1fff1fff, 0), 462513e5cb6SSandy Huang .hdmi_en = VOP_REG(RK3036_AXI_BUS_CTRL, 0x1, 22), 463513e5cb6SSandy Huang .hdmi_dclk_pol = VOP_REG(RK3036_AXI_BUS_CTRL, 0x1, 23), 464513e5cb6SSandy Huang .hdmi_pin_pol = VOP_REG(RK3036_INT_SCALER, 0x7, 4), 465513e5cb6SSandy Huang .rgb_en = VOP_REG(RK3036_AXI_BUS_CTRL, 0x1, 24), 466513e5cb6SSandy Huang .rgb_dclk_pol = VOP_REG(RK3036_AXI_BUS_CTRL, 0x1, 25), 467513e5cb6SSandy Huang .lvds_en = VOP_REG(RK3036_AXI_BUS_CTRL, 0x1, 26), 468513e5cb6SSandy Huang .lvds_dclk_pol = VOP_REG(RK3036_AXI_BUS_CTRL, 0x1, 27), 469513e5cb6SSandy Huang .mipi_en = VOP_REG(RK3036_AXI_BUS_CTRL, 0x1, 28), 470513e5cb6SSandy Huang .mipi_dclk_pol = VOP_REG(RK3036_AXI_BUS_CTRL, 0x1, 29), 471186f8572SMark Yao .vtotal_pw = VOP_REG(RK3036_DSP_VTOTAL_VS_END, 0x1fff1fff, 0), 472186f8572SMark Yao .vact_st_end = VOP_REG(RK3036_DSP_VACT_ST_END, 0x1fff1fff, 0), 473186f8572SMark Yao .cfg_done = VOP_REG(RK3036_REG_CFG_DONE, 0x1, 0), 474186f8572SMark Yao }; 475186f8572SMark Yao 476186f8572SMark Yao static const struct vop_line_flag rk3036_vop_line_flag = { 477186f8572SMark Yao .line_flag_num[0] = VOP_REG(RK3036_INT_STATUS, 0xfff, 12), 478186f8572SMark Yao }; 479186f8572SMark Yao 480186f8572SMark Yao const struct vop_data rk3036_vop = { 481186f8572SMark Yao .version = VOP_VERSION(2, 2), 4822735489aSSandy Huang .max_output = {1920, 1080}, 483186f8572SMark Yao .ctrl = &rk3036_ctrl_data, 48448efbc7eSSandy Huang .win = &rk3126_win1_data, 485186f8572SMark Yao .line_flag = &rk3036_vop_line_flag, 486186f8572SMark Yao .reg_len = RK3036_DSP_VACT_ST_END_F1 * 4, 487186f8572SMark Yao }; 4887130fbf6SSandy Huang 4897130fbf6SSandy Huang static const struct vop_scl_regs rk3366_lit_win_scl = { 4907130fbf6SSandy Huang .scale_yrgb_x = VOP_REG(RK3366_LIT_WIN0_SCL_FACTOR_YRGB, 0xffff, 0x0), 4917130fbf6SSandy Huang .scale_yrgb_y = VOP_REG(RK3366_LIT_WIN0_SCL_FACTOR_YRGB, 0xffff, 16), 4927130fbf6SSandy Huang .scale_cbcr_x = VOP_REG(RK3366_LIT_WIN0_SCL_FACTOR_CBR, 0xffff, 0x0), 4937130fbf6SSandy Huang .scale_cbcr_y = VOP_REG(RK3366_LIT_WIN0_SCL_FACTOR_CBR, 0xffff, 16), 4947130fbf6SSandy Huang }; 4957130fbf6SSandy Huang 4967130fbf6SSandy Huang static const struct vop_win rk3366_win0_data = { 4977130fbf6SSandy Huang .scl = &rk3366_lit_win_scl, 4987130fbf6SSandy Huang 4997130fbf6SSandy Huang .enable = VOP_REG(RK3366_LIT_WIN0_CTRL0, 0x1, 0), 5007130fbf6SSandy Huang .format = VOP_REG(RK3366_LIT_WIN0_CTRL0, 0x7, 1), 5017130fbf6SSandy Huang .rb_swap = VOP_REG(RK3366_LIT_WIN0_CTRL0, 0x1, 12), 5027130fbf6SSandy Huang .act_info = VOP_REG(RK3366_LIT_WIN0_ACT_INFO, 0xffffffff, 0), 5037130fbf6SSandy Huang .dsp_info = VOP_REG(RK3366_LIT_WIN0_DSP_INFO, 0xffffffff, 0), 5047130fbf6SSandy Huang .dsp_st = VOP_REG(RK3366_LIT_WIN0_DSP_ST, 0xffffffff, 0), 5057130fbf6SSandy Huang .yrgb_mst = VOP_REG(RK3366_LIT_WIN0_YRGB_MST0, 0xffffffff, 0), 5067130fbf6SSandy Huang .uv_mst = VOP_REG(RK3366_LIT_WIN0_CBR_MST0, 0xffffffff, 0), 5077130fbf6SSandy Huang .yrgb_vir = VOP_REG(RK3366_LIT_WIN0_VIR, 0x1fff, 0), 5087130fbf6SSandy Huang .uv_vir = VOP_REG(RK3366_LIT_WIN0_VIR, 0x1fff, 16), 5097130fbf6SSandy Huang 5107130fbf6SSandy Huang .alpha_mode = VOP_REG(RK3366_LIT_WIN0_ALPHA_CTRL, 0x1, 1), 5117130fbf6SSandy Huang .alpha_en = VOP_REG(RK3366_LIT_WIN0_ALPHA_CTRL, 0x1, 0), 5127130fbf6SSandy Huang }; 5137130fbf6SSandy Huang 5147130fbf6SSandy Huang static const struct vop_win rk3366_win1_data = { 5157130fbf6SSandy Huang .enable = VOP_REG(RK3366_LIT_WIN1_CTRL0, 0x1, 0), 5167130fbf6SSandy Huang .format = VOP_REG(RK3366_LIT_WIN1_CTRL0, 0x7, 4), 5177130fbf6SSandy Huang .rb_swap = VOP_REG(RK3366_LIT_WIN1_CTRL0, 0x1, 12), 5187130fbf6SSandy Huang .dsp_info = VOP_REG(RK3366_LIT_WIN1_DSP_INFO, 0xffffffff, 0), 5197130fbf6SSandy Huang .dsp_st = VOP_REG(RK3366_LIT_WIN1_DSP_ST, 0xffffffff, 0), 5207130fbf6SSandy Huang .yrgb_mst = VOP_REG(RK3366_LIT_WIN1_MST, 0xffffffff, 0), 5217130fbf6SSandy Huang .yrgb_vir = VOP_REG(RK3366_LIT_WIN1_VIR, 0x1fff, 0), 5227130fbf6SSandy Huang 5237130fbf6SSandy Huang .alpha_mode = VOP_REG(RK3366_LIT_WIN1_ALPHA_CTRL, 0x1, 1), 5247130fbf6SSandy Huang .alpha_en = VOP_REG(RK3366_LIT_WIN1_ALPHA_CTRL, 0x1, 0), 5257130fbf6SSandy Huang }; 5267130fbf6SSandy Huang 5277130fbf6SSandy Huang static const struct vop_ctrl px30_ctrl_data = { 5287130fbf6SSandy Huang .standby = VOP_REG(RK3366_LIT_SYS_CTRL2, 0x1, 1), 5297130fbf6SSandy Huang .htotal_pw = VOP_REG(RK3366_LIT_DSP_HTOTAL_HS_END, 0x0fff0fff, 0), 5307130fbf6SSandy Huang .hact_st_end = VOP_REG(RK3366_LIT_DSP_HACT_ST_END, 0x0fff0fff, 0), 5317130fbf6SSandy Huang .vtotal_pw = VOP_REG(RK3366_LIT_DSP_VTOTAL_VS_END, 0x0fff0fff, 0), 5327130fbf6SSandy Huang .vact_st_end = VOP_REG(RK3366_LIT_DSP_VACT_ST_END, 0x0fff0fff, 0), 5337130fbf6SSandy Huang .vact_st_end_f1 = VOP_REG(RK3366_LIT_DSP_VACT_ST_END_F1, 0x0fff0fff, 0), 5347130fbf6SSandy Huang .vs_st_end_f1 = VOP_REG(RK3366_LIT_DSP_VS_ST_END_F1, 0x0fff0fff, 0), 5357130fbf6SSandy Huang .dsp_interlace = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 0), 5367130fbf6SSandy Huang .global_regdone_en = VOP_REG(RK3366_LIT_SYS_CTRL2, 0x1, 13), 5377130fbf6SSandy Huang .auto_gate_en = VOP_REG(RK3366_LIT_SYS_CTRL2, 0x1, 0), 5387130fbf6SSandy Huang .dsp_layer_sel = VOP_REG(RK3366_LIT_DSP_CTRL2, 0xf, 22), 5397130fbf6SSandy Huang .overlay_mode = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 4), 5407130fbf6SSandy Huang .core_dclk_div = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 13), 5417130fbf6SSandy Huang .dclk_ddr = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 14), 5427130fbf6SSandy Huang .rgb_en = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 0), 5437130fbf6SSandy Huang .rgb_pin_pol = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x7, 2), 5447130fbf6SSandy Huang .hdmi_en = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 8), 5457130fbf6SSandy Huang .hdmi_pin_pol = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x7, 10), 5467130fbf6SSandy Huang .lvds_en = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 16), 5477130fbf6SSandy Huang .lvds_pin_pol = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x7, 18), 5487130fbf6SSandy Huang .mipi_en = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 24), 5497130fbf6SSandy Huang .mipi_pin_pol = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x7, 26), 5507130fbf6SSandy Huang .mipi_dclk_pol = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 25), 5517130fbf6SSandy Huang .lvds_dclk_pol = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 17), 5527130fbf6SSandy Huang .hdmi_dclk_pol = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 9), 5537130fbf6SSandy Huang .rgb_dclk_pol = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 1), 5547130fbf6SSandy Huang .dither_up = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 2), 5557130fbf6SSandy Huang .dither_down = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x7, 6), 5567130fbf6SSandy Huang .dsp_data_swap = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1f, 9), 55732328971SDamon Ding .dsp_bg_swap = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 9), 55832328971SDamon Ding .dsp_rb_swap = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 11), 55932328971SDamon Ding .dsp_rg_swap = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 12), 5607130fbf6SSandy Huang .dsp_ccir656_avg = VOP_REG(RK3366_LIT_SYS_CTRL2, 0x1, 5), 5617130fbf6SSandy Huang .dsp_black = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 15), 5627130fbf6SSandy Huang .dsp_blank = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 14), 5637130fbf6SSandy Huang .dsp_outzero = VOP_REG(RK3366_LIT_SYS_CTRL2, 0x1, 3), 5647130fbf6SSandy Huang .dsp_lut_en = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 5), 5657130fbf6SSandy Huang .out_mode = VOP_REG(RK3366_LIT_DSP_CTRL2, 0xf, 16), 5667130fbf6SSandy Huang .dsp_background = VOP_REG(RK3366_LIT_DSP_BG, 0x00ffffff, 0), 5677130fbf6SSandy Huang .cfg_done = VOP_REG(RK3366_LIT_REG_CFG_DONE, 0x1, 0), 5687130fbf6SSandy Huang 5697130fbf6SSandy Huang .bcsh_en = VOP_REG(RK3366_LIT_BCSH_CTRL, 0x1, 0), 5707130fbf6SSandy Huang .bcsh_r2y_csc_mode = VOP_REG(RK3366_LIT_BCSH_CTRL, 0x1, 1), 5717130fbf6SSandy Huang .bcsh_out_mode = VOP_REG(RK3366_LIT_BCSH_CTRL, 0x3, 2), 5727130fbf6SSandy Huang .bcsh_y2r_csc_mode = VOP_REG(RK3366_LIT_BCSH_CTRL, 0x3, 4), 5737130fbf6SSandy Huang .bcsh_y2r_en = VOP_REG(RK3366_LIT_BCSH_CTRL, 0x1, 6), 5747130fbf6SSandy Huang .bcsh_r2y_en = VOP_REG(RK3366_LIT_BCSH_CTRL, 0x1, 7), 5757130fbf6SSandy Huang .bcsh_color_bar = VOP_REG(RK3366_LIT_BCSH_COL_BAR, 0xffffff, 0), 5767130fbf6SSandy Huang .bcsh_brightness = VOP_REG(RK3366_LIT_BCSH_BCS, 0xff, 0), 5777130fbf6SSandy Huang .bcsh_contrast = VOP_REG(RK3366_LIT_BCSH_BCS, 0x1ff, 8), 5787130fbf6SSandy Huang .bcsh_sat_con = VOP_REG(RK3366_LIT_BCSH_BCS, 0x3ff, 20), 5797130fbf6SSandy Huang .bcsh_sin_hue = VOP_REG(RK3366_LIT_BCSH_H, 0x1ff, 0), 5807130fbf6SSandy Huang .bcsh_cos_hue = VOP_REG(RK3366_LIT_BCSH_H, 0x1ff, 16), 5817130fbf6SSandy Huang 5827130fbf6SSandy Huang .cabc_config_mode = VOP_REG(PX30_CABC_CTRL0, 0x3, 2), 5837130fbf6SSandy Huang .cabc_calc_pixel_num = VOP_REG(PX30_CABC_CTRL0, 0x7fffff, 4), 5847130fbf6SSandy Huang .cabc_handle_en = VOP_REG(PX30_CABC_CTRL0, 0x1, 1), 5857130fbf6SSandy Huang .cabc_en = VOP_REG(PX30_CABC_CTRL0, 0x1, 0), 5867130fbf6SSandy Huang .cabc_total_num = VOP_REG(PX30_CABC_CTRL1, 0x7fffff, 4), 5877130fbf6SSandy Huang .cabc_lut_en = VOP_REG(PX30_CABC_CTRL1, 0x1, 0), 5887130fbf6SSandy Huang .cabc_stage_up_mode = VOP_REG(PX30_CABC_CTRL2, 0x1, 19), 5897130fbf6SSandy Huang .cabc_stage_up = VOP_REG(PX30_CABC_CTRL2, 0x1ff, 8), 5907130fbf6SSandy Huang .cabc_stage_down = VOP_REG(PX30_CABC_CTRL2, 0xff, 0), 5917130fbf6SSandy Huang .cabc_global_dn = VOP_REG(PX30_CABC_CTRL3, 0xff, 0), 5927130fbf6SSandy Huang .cabc_global_dn_limit_en = VOP_REG(PX30_CABC_CTRL3, 0x1, 8), 593937d9ddaSSandy Huang 594937d9ddaSSandy Huang .mcu_pix_total = VOP_REG(RK3366_LIT_MCU_CTRL, 0x3f, 0), 595937d9ddaSSandy Huang .mcu_cs_pst = VOP_REG(RK3366_LIT_MCU_CTRL, 0xf, 6), 596937d9ddaSSandy Huang .mcu_cs_pend = VOP_REG(RK3366_LIT_MCU_CTRL, 0x3f, 10), 597937d9ddaSSandy Huang .mcu_rw_pst = VOP_REG(RK3366_LIT_MCU_CTRL, 0xf, 16), 598937d9ddaSSandy Huang .mcu_rw_pend = VOP_REG(RK3366_LIT_MCU_CTRL, 0x3f, 20), 599937d9ddaSSandy Huang .mcu_clk_sel = VOP_REG(RK3366_LIT_MCU_CTRL, 0x1, 26), 600937d9ddaSSandy Huang .mcu_hold_mode = VOP_REG(RK3366_LIT_MCU_CTRL, 0x1, 27), 601937d9ddaSSandy Huang .mcu_frame_st = VOP_REG(RK3366_LIT_MCU_CTRL, 0x1, 28), 602937d9ddaSSandy Huang .mcu_rs = VOP_REG(RK3366_LIT_MCU_CTRL, 0x1, 29), 603937d9ddaSSandy Huang .mcu_bypass = VOP_REG(RK3366_LIT_MCU_CTRL, 0x1, 30), 604937d9ddaSSandy Huang .mcu_type = VOP_REG(RK3366_LIT_MCU_CTRL, 0x1, 31), 605937d9ddaSSandy Huang .mcu_rw_bypass_port = VOP_REG(RK3366_LIT_MCU_RW_BYPASS_PORT, 606937d9ddaSSandy Huang 0xffffffff, 0), 6077130fbf6SSandy Huang }; 6087130fbf6SSandy Huang 6097130fbf6SSandy Huang static const struct vop_line_flag rk3366_vop_lite_line_flag = { 6107130fbf6SSandy Huang .line_flag_num[0] = VOP_REG(RK3366_LIT_LINE_FLAG, 0xfff, 0), 6117130fbf6SSandy Huang }; 6127130fbf6SSandy Huang 6133a06149eSSandy Huang static const struct vop_grf_ctrl px30_grf_ctrl = { 6143a06149eSSandy Huang .grf_dclk_inv = VOP_REG(PX30_GRF_PD_VO_CON1, 0x1, 4), 6153a06149eSSandy Huang }; 6163a06149eSSandy Huang 6177130fbf6SSandy Huang const struct vop_data px30_vop_lit = { 6187130fbf6SSandy Huang .version = VOP_VERSION(2, 5), 6192735489aSSandy Huang .max_output = {1920, 1080}, 6207130fbf6SSandy Huang .ctrl = &px30_ctrl_data, 6213a06149eSSandy Huang .grf_ctrl = &px30_grf_ctrl, 6227130fbf6SSandy Huang .win = &rk3366_win1_data, 6237130fbf6SSandy Huang .line_flag = &rk3366_vop_lite_line_flag, 6247130fbf6SSandy Huang .reg_len = RK3366_LIT_FRC_LOWER01_0 * 4, 6257130fbf6SSandy Huang }; 6267130fbf6SSandy Huang 6277130fbf6SSandy Huang const struct vop_data px30_vop_big = { 6287130fbf6SSandy Huang .version = VOP_VERSION(2, 6), 6292735489aSSandy Huang .max_output = {1920, 1080}, 6307130fbf6SSandy Huang .ctrl = &px30_ctrl_data, 6313a06149eSSandy Huang .grf_ctrl = &px30_grf_ctrl, 63225b06c45SNickey Yang .win = &rk3366_win1_data, 6337130fbf6SSandy Huang .line_flag = &rk3366_vop_lite_line_flag, 6347130fbf6SSandy Huang .reg_len = RK3366_LIT_FRC_LOWER01_0 * 4, 6357130fbf6SSandy Huang }; 6365c651246SSandy Huang 6375c651246SSandy Huang static const struct vop_ctrl rk3308_ctrl_data = { 6385c651246SSandy Huang .standby = VOP_REG(RK3366_LIT_SYS_CTRL2, 0x1, 1), 6395c651246SSandy Huang .axi_outstanding_max_num = VOP_REG(RK3366_LIT_SYS_CTRL1, 0x1f, 16), 6405c651246SSandy Huang .axi_max_outstanding_en = VOP_REG(RK3366_LIT_SYS_CTRL1, 0x1, 12), 6415c651246SSandy Huang .htotal_pw = VOP_REG(RK3366_LIT_DSP_HTOTAL_HS_END, 0x0fff0fff, 0), 6425c651246SSandy Huang .hact_st_end = VOP_REG(RK3366_LIT_DSP_HACT_ST_END, 0x0fff0fff, 0), 6435c651246SSandy Huang .vtotal_pw = VOP_REG(RK3366_LIT_DSP_VTOTAL_VS_END, 0x0fff0fff, 0), 6445c651246SSandy Huang .vact_st_end = VOP_REG(RK3366_LIT_DSP_VACT_ST_END, 0x0fff0fff, 0), 6455c651246SSandy Huang .vact_st_end_f1 = VOP_REG(RK3366_LIT_DSP_VACT_ST_END_F1, 0x0fff0fff, 0), 6465c651246SSandy Huang .vs_st_end_f1 = VOP_REG(RK3366_LIT_DSP_VS_ST_END_F1, 0x0fff0fff, 0), 6475c651246SSandy Huang .global_regdone_en = VOP_REG(RK3366_LIT_SYS_CTRL2, 0x1, 13), 6485c651246SSandy Huang .auto_gate_en = VOP_REG(RK3366_LIT_SYS_CTRL2, 0x1, 0), 6495c651246SSandy Huang .dsp_layer_sel = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 3), 6505c651246SSandy Huang .overlay_mode = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 4), 6515c651246SSandy Huang .dclk_ddr = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 14), 6525c651246SSandy Huang .rgb_en = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 0), 6535c651246SSandy Huang .rgb_pin_pol = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x7, 2), 6545c651246SSandy Huang .rgb_dclk_pol = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 1), 6555c651246SSandy Huang .dither_up = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 2), 6565c651246SSandy Huang .dither_down = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x7, 6), 6575c651246SSandy Huang .dsp_data_swap = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1f, 9), 65832328971SDamon Ding .dsp_bg_swap = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 9), 65932328971SDamon Ding .dsp_rb_swap = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 11), 66032328971SDamon Ding .dsp_rg_swap = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 12), 6615c651246SSandy Huang .dsp_ccir656_avg = VOP_REG(RK3366_LIT_SYS_CTRL2, 0x1, 5), 6625c651246SSandy Huang .dsp_black = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 15), 6635c651246SSandy Huang .dsp_blank = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 14), 6645c651246SSandy Huang .dsp_outzero = VOP_REG(RK3366_LIT_SYS_CTRL2, 0x1, 3), 6655c651246SSandy Huang .dsp_lut_en = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 5), 6665c651246SSandy Huang .out_mode = VOP_REG(RK3366_LIT_DSP_CTRL2, 0xf, 16), 6675c651246SSandy Huang .dsp_background = VOP_REG(RK3366_LIT_DSP_BG, 0x00ffffff, 0), 6685c651246SSandy Huang .cfg_done = VOP_REG(RK3366_LIT_REG_CFG_DONE, 0x1, 0), 6695c651246SSandy Huang 6705c651246SSandy Huang .bcsh_en = VOP_REG(RK3366_LIT_BCSH_CTRL, 0x1, 0), 6715c651246SSandy Huang .bcsh_r2y_csc_mode = VOP_REG(RK3366_LIT_BCSH_CTRL, 0x1, 1), 6725c651246SSandy Huang .bcsh_out_mode = VOP_REG(RK3366_LIT_BCSH_CTRL, 0x3, 2), 6735c651246SSandy Huang .bcsh_y2r_csc_mode = VOP_REG(RK3366_LIT_BCSH_CTRL, 0x3, 4), 6745c651246SSandy Huang .bcsh_y2r_en = VOP_REG(RK3366_LIT_BCSH_CTRL, 0x1, 6), 6755c651246SSandy Huang .bcsh_r2y_en = VOP_REG(RK3366_LIT_BCSH_CTRL, 0x1, 7), 6765c651246SSandy Huang .bcsh_color_bar = VOP_REG(RK3366_LIT_BCSH_COL_BAR, 0xffffff, 0), 6775c651246SSandy Huang .bcsh_brightness = VOP_REG(RK3366_LIT_BCSH_BCS, 0xff, 0), 6785c651246SSandy Huang .bcsh_contrast = VOP_REG(RK3366_LIT_BCSH_BCS, 0x1ff, 8), 6795c651246SSandy Huang .bcsh_sat_con = VOP_REG(RK3366_LIT_BCSH_BCS, 0x3ff, 20), 6805c651246SSandy Huang .bcsh_sin_hue = VOP_REG(RK3366_LIT_BCSH_H, 0x1ff, 0), 6815c651246SSandy Huang .bcsh_cos_hue = VOP_REG(RK3366_LIT_BCSH_H, 0x1ff, 16), 6825c651246SSandy Huang 6835c651246SSandy Huang .mcu_pix_total = VOP_REG(RK3366_LIT_MCU_CTRL, 0x3f, 0), 6845c651246SSandy Huang .mcu_cs_pst = VOP_REG(RK3366_LIT_MCU_CTRL, 0xf, 6), 6855c651246SSandy Huang .mcu_cs_pend = VOP_REG(RK3366_LIT_MCU_CTRL, 0x3f, 10), 6865c651246SSandy Huang .mcu_rw_pst = VOP_REG(RK3366_LIT_MCU_CTRL, 0xf, 16), 6875c651246SSandy Huang .mcu_rw_pend = VOP_REG(RK3366_LIT_MCU_CTRL, 0x3f, 20), 6885c651246SSandy Huang .mcu_clk_sel = VOP_REG(RK3366_LIT_MCU_CTRL, 0x1, 26), 6895c651246SSandy Huang .mcu_hold_mode = VOP_REG(RK3366_LIT_MCU_CTRL, 0x1, 27), 6905c651246SSandy Huang .mcu_frame_st = VOP_REG(RK3366_LIT_MCU_CTRL, 0x1, 28), 6915c651246SSandy Huang .mcu_rs = VOP_REG(RK3366_LIT_MCU_CTRL, 0x1, 29), 6925c651246SSandy Huang .mcu_bypass = VOP_REG(RK3366_LIT_MCU_CTRL, 0x1, 30), 6935c651246SSandy Huang .mcu_type = VOP_REG(RK3366_LIT_MCU_CTRL, 0x1, 31), 6945c651246SSandy Huang .mcu_rw_bypass_port = VOP_REG(RK3366_LIT_MCU_RW_BYPASS_PORT, 6955c651246SSandy Huang 0xffffffff, 0), 6965c651246SSandy Huang }; 6975c651246SSandy Huang 6985c651246SSandy Huang const struct vop_data rk3308_vop = { 6995c651246SSandy Huang .version = VOP_VERSION(2, 7), 7005c651246SSandy Huang .max_output = {1920, 1080}, 7015c651246SSandy Huang .ctrl = &rk3308_ctrl_data, 7025c651246SSandy Huang .win = &rk3366_win0_data, 7035c651246SSandy Huang .line_flag = &rk3366_vop_lite_line_flag, 7045c651246SSandy Huang .reg_len = RK3366_LIT_FRC_LOWER01_0 * 4, 7055c651246SSandy Huang }; 706fe49d276SSandy Huang 707ad3aa75aSSandy Huang static const struct vop_grf_ctrl rk1808_grf_ctrl = { 708ad3aa75aSSandy Huang .grf_dclk_inv = VOP_REG(RK1808_GRF_PD_VO_CON1, 0x1, 4), 709ad3aa75aSSandy Huang }; 710ad3aa75aSSandy Huang 711ad3aa75aSSandy Huang const struct vop_data rk1808_vop = { 712ad3aa75aSSandy Huang .version = VOP_VERSION(2, 8), 713ad3aa75aSSandy Huang .max_output = {1920, 1080}, 714ad3aa75aSSandy Huang .ctrl = &px30_ctrl_data, 715ad3aa75aSSandy Huang .grf_ctrl = &rk1808_grf_ctrl, 716ad3aa75aSSandy Huang .win = &rk3366_win1_data, 717ad3aa75aSSandy Huang .line_flag = &rk3366_vop_lite_line_flag, 718ad3aa75aSSandy Huang .reg_len = RK3366_LIT_FRC_LOWER01_0 * 4, 719ad3aa75aSSandy Huang }; 720ad3aa75aSSandy Huang 721400ef44dSChaoyi Chen static const struct vop_ctrl rk3506_ctrl_data = { 722400ef44dSChaoyi Chen .cfg_done = VOP_REG(RK3366_LIT_REG_CFG_DONE, 0x1, 0), 723400ef44dSChaoyi Chen 724400ef44dSChaoyi Chen .dsp_background = VOP_REG(RK3366_LIT_DSP_BG, 0x00ffffff, 0), 725400ef44dSChaoyi Chen 726400ef44dSChaoyi Chen .axi_outstanding_max_num = VOP_REG(RK3366_LIT_SYS_CTRL1, 0x1f, 16), 727400ef44dSChaoyi Chen .axi_max_outstanding_en = VOP_REG(RK3366_LIT_SYS_CTRL1, 0x1, 12), 728400ef44dSChaoyi Chen 729400ef44dSChaoyi Chen .auto_gate_en = VOP_REG(RK3366_LIT_SYS_CTRL2, 0x1, 0), 730400ef44dSChaoyi Chen .standby = VOP_REG(RK3366_LIT_SYS_CTRL2, 0x1, 1), 731400ef44dSChaoyi Chen .dsp_outzero = VOP_REG(RK3366_LIT_SYS_CTRL2, 0x1, 3), 7320c4bb35cSDamon Ding .yuv_clip = VOP_REG(RK3366_LIT_SYS_CTRL2, 0x1, 4), 733400ef44dSChaoyi Chen 734400ef44dSChaoyi Chen .rgb_en = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 0), 735400ef44dSChaoyi Chen .rgb_pin_pol = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x7, 2), 736400ef44dSChaoyi Chen .bt1120_uv_swap = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 5), 737400ef44dSChaoyi Chen .bt656_en = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 6), 738400ef44dSChaoyi Chen .core_dclk_div = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 13), 739400ef44dSChaoyi Chen .mipi_en = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 24), 740400ef44dSChaoyi Chen .mipi_dclk_pol = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 25), 741400ef44dSChaoyi Chen .mipi_pin_pol = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x7, 26), 742400ef44dSChaoyi Chen .bt1120_yc_swap = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 30), 743400ef44dSChaoyi Chen .bt1120_en = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 31), 744400ef44dSChaoyi Chen 745400ef44dSChaoyi Chen .dsp_interlace = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 0), 746400ef44dSChaoyi Chen .dsp_interlace_pol = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 1), 747400ef44dSChaoyi Chen .dither_up = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 2), 748400ef44dSChaoyi Chen .dsp_lut_en = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 5), 749400ef44dSChaoyi Chen .dither_down = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 8), 750400ef44dSChaoyi Chen .dsp_data_swap = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1f, 9), 751400ef44dSChaoyi Chen .dsp_bg_swap = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 9), 752400ef44dSChaoyi Chen .dsp_rb_swap = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 11), 753400ef44dSChaoyi Chen .dsp_rg_swap = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 12), 754400ef44dSChaoyi Chen .dsp_blank = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 14), 755400ef44dSChaoyi Chen .dsp_black = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 15), 756400ef44dSChaoyi Chen .out_mode = VOP_REG(RK3366_LIT_DSP_CTRL2, 0xf, 16), 757400ef44dSChaoyi Chen 758400ef44dSChaoyi Chen .htotal_pw = VOP_REG(RK3366_LIT_DSP_HTOTAL_HS_END, 0x0fff0fff, 0), 759400ef44dSChaoyi Chen .hact_st_end = VOP_REG(RK3366_LIT_DSP_HACT_ST_END, 0x0fff0fff, 0), 760400ef44dSChaoyi Chen .vtotal_pw = VOP_REG(RK3366_LIT_DSP_VTOTAL_VS_END, 0x0fff0fff, 0), 761400ef44dSChaoyi Chen .vact_st_end = VOP_REG(RK3366_LIT_DSP_VACT_ST_END, 0x0fff0fff, 0), 762400ef44dSChaoyi Chen .vact_st_end_f1 = VOP_REG(RK3366_LIT_DSP_VACT_ST_END_F1, 0x0fff0fff, 0), 763400ef44dSChaoyi Chen .vs_st_end_f1 = VOP_REG(RK3366_LIT_DSP_VS_ST_END_F1, 0x0fff0fff, 0), 764400ef44dSChaoyi Chen 765400ef44dSChaoyi Chen .bcsh_en = VOP_REG(RK3366_LIT_BCSH_CTRL, 0x1, 0), 766400ef44dSChaoyi Chen .bcsh_r2y_csc_mode = VOP_REG(RK3366_LIT_BCSH_CTRL, 0x1, 1), 767400ef44dSChaoyi Chen .bcsh_out_mode = VOP_REG(RK3366_LIT_BCSH_CTRL, 0x3, 2), 768400ef44dSChaoyi Chen .bcsh_y2r_csc_mode = VOP_REG(RK3366_LIT_BCSH_CTRL, 0x3, 4), 769400ef44dSChaoyi Chen .bcsh_y2r_en = VOP_REG(RK3366_LIT_BCSH_CTRL, 0x1, 6), 770400ef44dSChaoyi Chen .bcsh_r2y_en = VOP_REG(RK3366_LIT_BCSH_CTRL, 0x1, 7), 771400ef44dSChaoyi Chen 772400ef44dSChaoyi Chen .bcsh_color_bar = VOP_REG(RK3366_LIT_BCSH_COL_BAR, 0xffffff, 0), 773400ef44dSChaoyi Chen .bcsh_brightness = VOP_REG(RK3366_LIT_BCSH_BCS, 0xff, 0), 774400ef44dSChaoyi Chen .bcsh_contrast = VOP_REG(RK3366_LIT_BCSH_BCS, 0x1ff, 8), 775400ef44dSChaoyi Chen .bcsh_sat_con = VOP_REG(RK3366_LIT_BCSH_BCS, 0x3ff, 20), 776400ef44dSChaoyi Chen .bcsh_sin_hue = VOP_REG(RK3366_LIT_BCSH_H, 0x1ff, 0), 777400ef44dSChaoyi Chen .bcsh_cos_hue = VOP_REG(RK3366_LIT_BCSH_H, 0x1ff, 16), 778400ef44dSChaoyi Chen 779400ef44dSChaoyi Chen .mcu_pix_total = VOP_REG(RK3366_LIT_MCU_CTRL, 0x3f, 0), 780400ef44dSChaoyi Chen .mcu_cs_pst = VOP_REG(RK3366_LIT_MCU_CTRL, 0xf, 6), 781400ef44dSChaoyi Chen .mcu_cs_pend = VOP_REG(RK3366_LIT_MCU_CTRL, 0x3f, 10), 782400ef44dSChaoyi Chen .mcu_rw_pst = VOP_REG(RK3366_LIT_MCU_CTRL, 0xf, 16), 783400ef44dSChaoyi Chen .mcu_rw_pend = VOP_REG(RK3366_LIT_MCU_CTRL, 0x3f, 20), 784400ef44dSChaoyi Chen .mcu_clk_sel = VOP_REG(RK3366_LIT_MCU_CTRL, 0x1, 26), 785400ef44dSChaoyi Chen .mcu_hold_mode = VOP_REG(RK3366_LIT_MCU_CTRL, 0x1, 27), 786400ef44dSChaoyi Chen .mcu_frame_st = VOP_REG(RK3366_LIT_MCU_CTRL, 0x1, 28), 787400ef44dSChaoyi Chen .mcu_rs = VOP_REG(RK3366_LIT_MCU_CTRL, 0x1, 29), 788400ef44dSChaoyi Chen .mcu_bypass = VOP_REG(RK3366_LIT_MCU_CTRL, 0x1, 30), 789400ef44dSChaoyi Chen .mcu_type = VOP_REG(RK3366_LIT_MCU_CTRL, 0x1, 31), 790400ef44dSChaoyi Chen .mcu_rw_bypass_port = VOP_REG(RK3366_LIT_MCU_RW_BYPASS_PORT, 791400ef44dSChaoyi Chen 0xffffffff, 0), 792400ef44dSChaoyi Chen }; 793400ef44dSChaoyi Chen 794400ef44dSChaoyi Chen static const struct vop_win rk3506_win1_data = { 795400ef44dSChaoyi Chen .enable = VOP_REG(RK3366_LIT_WIN1_CTRL0, 0x1, 0), 796400ef44dSChaoyi Chen .format = VOP_REG(RK3366_LIT_WIN1_CTRL0, 0x7, 4), 797400ef44dSChaoyi Chen .interlace_read = VOP_REG(RK3366_LIT_WIN1_CTRL0, 0x1, 8), 798400ef44dSChaoyi Chen .rb_swap = VOP_REG(RK3366_LIT_WIN1_CTRL0, 0x1, 12), 799400ef44dSChaoyi Chen 800400ef44dSChaoyi Chen .yrgb_vir = VOP_REG(RK3366_LIT_WIN1_VIR, 0x1fff, 0), 801400ef44dSChaoyi Chen .yrgb_mst = VOP_REG(RK3366_LIT_WIN1_MST, 0xffffffff, 0), 802400ef44dSChaoyi Chen .dsp_info = VOP_REG(RK3366_LIT_WIN1_DSP_INFO, 0xffffffff, 0), 803400ef44dSChaoyi Chen .dsp_st = VOP_REG(RK3366_LIT_WIN1_DSP_ST, 0xffffffff, 0), 804400ef44dSChaoyi Chen 805400ef44dSChaoyi Chen .alpha_en = VOP_REG(RK3366_LIT_WIN1_ALPHA_CTRL, 0x1, 0), 806400ef44dSChaoyi Chen .alpha_mode = VOP_REG(RK3366_LIT_WIN1_ALPHA_CTRL, 0x1, 1), 807400ef44dSChaoyi Chen }; 808400ef44dSChaoyi Chen 809400ef44dSChaoyi Chen const struct vop_data rk3506_vop = { 810b11db17bSDamon Ding .version = VOP_VERSION(2, 0xe), 811400ef44dSChaoyi Chen .max_output = {1280, 1280}, 812400ef44dSChaoyi Chen .ctrl = &rk3506_ctrl_data, 813400ef44dSChaoyi Chen .win = &rk3506_win1_data, 814400ef44dSChaoyi Chen .line_flag = &rk3366_vop_lite_line_flag, 815400ef44dSChaoyi Chen .reg_len = RK3366_LIT_FRC_LOWER01_0 * 4, 816400ef44dSChaoyi Chen }; 817400ef44dSChaoyi Chen 81872f233a9SDamon Ding static const struct vop_ctrl rk3576_lit_ctrl_data = { 81972f233a9SDamon Ding .cfg_done = VOP_REG(EBC_CONFIG_DONE, 0x1, 0), 82072f233a9SDamon Ding 82172f233a9SDamon Ding .enable = VOP_REG(EBC_VOP_SYS_CTRL, 0x1, 0), 82272f233a9SDamon Ding .bcsh_r2y_en = VOP_REG(EBC_VOP_SYS_CTRL, 0x1, 1), 82372f233a9SDamon Ding .bcsh_r2y_csc_mode = VOP_REG(EBC_VOP_SYS_CTRL, 0x1, 2), 82472f233a9SDamon Ding .bt1120_yc_swap = VOP_REG(EBC_VOP_SYS_CTRL, 0x1, 6), 82572f233a9SDamon Ding .bt1120_uv_swap = VOP_REG(EBC_VOP_SYS_CTRL, 0x1, 7), 82672f233a9SDamon Ding .inf_out_en = VOP_REG(EBC_VOP_SYS_CTRL, 0x1, 8), 82772f233a9SDamon Ding 82872f233a9SDamon Ding .rgb_en = VOP_REG(EBC_VOP_DSP_CTRL0, 0x1, 0), 82972f233a9SDamon Ding .bt1120_en = VOP_REG(EBC_VOP_DSP_CTRL0, 0x1, 1), 83072f233a9SDamon Ding .bt656_en = VOP_REG(EBC_VOP_DSP_CTRL0, 0x1, 2), 83172f233a9SDamon Ding .core_dclk_div = VOP_REG(EBC_VOP_DSP_CTRL0, 0x1, 3), 83272f233a9SDamon Ding .dclk_pol = VOP_REG(EBC_VOP_DSP_CTRL0, 0x1, 4), 83372f233a9SDamon Ding .rgb_pin_pol = VOP_REG(EBC_VOP_DSP_CTRL0, 0x7, 5), 83472f233a9SDamon Ding .standby = VOP_REG(EBC_VOP_DSP_CTRL0, 0x1, 15), 83572f233a9SDamon Ding .out_dresetn = VOP_REG(EBC_VOP_DSP_CTRL0, 0x1, 31), 83672f233a9SDamon Ding 83772f233a9SDamon Ding .dsp_interlace = VOP_REG(EBC_VOP_DSP_CTRL1, 0x1, 0), 83872f233a9SDamon Ding .dsp_interlace_pol = VOP_REG(EBC_VOP_DSP_CTRL1, 0x1, 1), 83972f233a9SDamon Ding .dither_up = VOP_REG(EBC_VOP_DSP_CTRL1, 0x1, 4), 84072f233a9SDamon Ding .dither_down = VOP_REG(EBC_VOP_DSP_CTRL1, 0x7, 5), 841efd10ad6SDamon Ding .dsp_data_swap = VOP_REG(EBC_VOP_DSP_CTRL1, 0x1f, 8), 84272f233a9SDamon Ding .dsp_bg_swap = VOP_REG(EBC_VOP_DSP_CTRL1, 0x1, 8), 84372f233a9SDamon Ding .dsp_rb_swap = VOP_REG(EBC_VOP_DSP_CTRL1, 0x1, 9), 84472f233a9SDamon Ding .dsp_rg_swap = VOP_REG(EBC_VOP_DSP_CTRL1, 0x1, 10), 84572f233a9SDamon Ding .dsp_delta_swap = VOP_REG(EBC_VOP_DSP_CTRL1, 0x1, 11), 84672f233a9SDamon Ding .dsp_dummy_swap = VOP_REG(EBC_VOP_DSP_CTRL1, 0x1, 12), 84772f233a9SDamon Ding .dsp_black = VOP_REG(EBC_VOP_DSP_CTRL1, 0x1, 14), 84872f233a9SDamon Ding .dsp_blank = VOP_REG(EBC_VOP_DSP_CTRL1, 0x1, 15), 84972f233a9SDamon Ding .out_mode = VOP_REG(EBC_VOP_DSP_CTRL1, 0xf, 16), 85072f233a9SDamon Ding 85172f233a9SDamon Ding .mcu_pix_total = VOP_REG(EBC_VOP_MCU_CTRL, 0x3f, 0), 85272f233a9SDamon Ding .mcu_cs_pst = VOP_REG(EBC_VOP_MCU_CTRL, 0xf, 6), 85372f233a9SDamon Ding .mcu_cs_pend = VOP_REG(EBC_VOP_MCU_CTRL, 0x3f, 10), 85472f233a9SDamon Ding .mcu_rw_pst = VOP_REG(EBC_VOP_MCU_CTRL, 0xf, 16), 85572f233a9SDamon Ding .mcu_rw_pend = VOP_REG(EBC_VOP_MCU_CTRL, 0x3f, 20), 85672f233a9SDamon Ding .mcu_hold_mode = VOP_REG(EBC_VOP_MCU_CTRL, 0x1, 27), 85772f233a9SDamon Ding .mcu_frame_st = VOP_REG(EBC_VOP_MCU_CTRL, 0x1, 28), 85872f233a9SDamon Ding .mcu_rs = VOP_REG(EBC_VOP_MCU_CTRL, 0x1, 29), 85972f233a9SDamon Ding .mcu_bypass = VOP_REG(EBC_VOP_MCU_CTRL, 0x1, 30), 86072f233a9SDamon Ding .mcu_type = VOP_REG(EBC_VOP_MCU_CTRL, 0x1, 31), 86172f233a9SDamon Ding .mcu_rw_bypass_port = VOP_REG(EBC_MCU_RW_BYPASS_PORT, 0xffffffff, 0), 86272f233a9SDamon Ding 86372f233a9SDamon Ding .htotal_pw = VOP_REG(EBC_DSP_HTOTAL_HS_END, 0x0fff0fff, 0), 86472f233a9SDamon Ding .hact_st_end = VOP_REG(EBC_DSP_HACT_ST_END, 0x0fff0fff, 0), 86572f233a9SDamon Ding .vtotal_pw = VOP_REG(EBC_DSP_VTOTAL_VS_END, 0x0fff0fff, 0), 86672f233a9SDamon Ding .vact_st_end = VOP_REG(EBC_DSP_VACT_ST_END, 0x0fff0fff, 0), 86772f233a9SDamon Ding .vs_st_end_f1 = VOP_REG(EBC_DSP_VS_ST_END_F1, 0x0fff0fff, 0), 86872f233a9SDamon Ding .vact_st_end_f1 = VOP_REG(EBC_DSP_VACT_ST_END_F1, 0x0fff0fff, 0), 86972f233a9SDamon Ding 87072f233a9SDamon Ding .dsp_background = VOP_REG(EBC_DSP_BG, 0xffffffff, 0), 87172f233a9SDamon Ding }; 87272f233a9SDamon Ding 87372f233a9SDamon Ding static const struct vop_grf_ctrl rk3576_lit_vo0_grf_ctrl = { 87472f233a9SDamon Ding .grf_edp_ch_sel = VOP_REG(RK3576_VO0_GRF_SOC_CON9, 0x1, 10), 87572f233a9SDamon Ding .grf_hdmi_ch_sel = VOP_REG(RK3576_VO0_GRF_SOC_CON9, 0x1, 9), 87672f233a9SDamon Ding .grf_mipi_ch_sel = VOP_REG(RK3576_VO0_GRF_SOC_CON9, 0x1, 8), 87772f233a9SDamon Ding .grf_hdmi_pin_pol = VOP_REG(RK3576_VO0_GRF_SOC_CON13, 0x3, 5), 87872f233a9SDamon Ding .grf_hdmi_1to4_en = VOP_REG(RK3576_VO0_GRF_SOC_CON13, 0x1, 4), 87972f233a9SDamon Ding .grf_mipi_mode = VOP_REG(RK3576_VO0_GRF_SOC_CON13, 0x1, 3), 88072f233a9SDamon Ding .grf_mipi_pin_pol = VOP_REG(RK3576_VO0_GRF_SOC_CON13, 0x3, 1), 88149d669f5SDamon Ding .grf_mipi_1to4_en = VOP_REG(RK3576_VO0_GRF_SOC_CON13, 0x1, 0), 88272f233a9SDamon Ding }; 88372f233a9SDamon Ding 88472f233a9SDamon Ding static const struct vop_grf_ctrl rk3576_lit_grf_ctrl = { 88572f233a9SDamon Ding .grf_dclk_inv = VOP_REG(RK3576_IOC_GRF_MISC_CON8, 0x1, 9), 88672f233a9SDamon Ding .grf_vopl_sel = VOP_REG(RK3576_IOC_GRF_MISC_CON8, 0x1, 11), 88772f233a9SDamon Ding }; 88872f233a9SDamon Ding 88972f233a9SDamon Ding static const struct vop_win rk3576_lit_win2_data = { 89072f233a9SDamon Ding .dsp_info = VOP_REG(EBC_VOP_WIN_DSP_INFO, 0xffffffff, 0), 89172f233a9SDamon Ding .dsp_st = VOP_REG(EBC_VOP_WIN_DSP_ST, 0xffffffff, 0), 89272f233a9SDamon Ding 89372f233a9SDamon Ding .yrgb_mst = VOP_REG(EBC_WIN_MST2, 0xffffffff, 0), 89472f233a9SDamon Ding 89572f233a9SDamon Ding .enable = VOP_REG(EBC_WIN2_CTRL, 0x1, 0), 89672f233a9SDamon Ding 89772f233a9SDamon Ding .interlace_read = VOP_REG(EBC_VOP_SYS_CTRL, 0x1, 3), 89872f233a9SDamon Ding .format = VOP_REG(EBC_VOP_SYS_CTRL, 0x3, 4), 89972f233a9SDamon Ding 90072f233a9SDamon Ding .yrgb_vir = VOP_REG(EBC_VOP_WIN_VIR, 0x1fff, 0), 90172f233a9SDamon Ding }; 90272f233a9SDamon Ding 90372f233a9SDamon Ding static const struct vop_line_flag rk3576_vop_lit_line_flag = { 90472f233a9SDamon Ding .line_flag_num[0] = VOP_REG(EBC_LINE_FLAG, 0xfff, 0), 90572f233a9SDamon Ding .line_flag_num[1] = VOP_REG(EBC_LINE_FLAG, 0xfff, 16), 90672f233a9SDamon Ding }; 90772f233a9SDamon Ding 90872f233a9SDamon Ding const struct vop_data rk3576_vop_lit = { 90972f233a9SDamon Ding .version = VOP_VERSION(2, 0xd), 91072f233a9SDamon Ding .max_output = {1920, 1920}, 91172f233a9SDamon Ding .ctrl = &rk3576_lit_ctrl_data, 91272f233a9SDamon Ding .vo0_grf_ctrl = &rk3576_lit_vo0_grf_ctrl, 91372f233a9SDamon Ding .grf_ctrl = &rk3576_lit_grf_ctrl, 91472f233a9SDamon Ding .win = &rk3576_lit_win2_data, 91572f233a9SDamon Ding .line_flag = &rk3576_vop_lit_line_flag, 91672f233a9SDamon Ding .reg_len = EBC_VOP_INT_STATUS * 4, 91772f233a9SDamon Ding }; 91872f233a9SDamon Ding 919fe49d276SSandy Huang const struct vop_data rv1108_vop = { 920fe49d276SSandy Huang .version = VOP_VERSION(2, 4), 921fe49d276SSandy Huang .max_output = {1920, 1080}, 922fe49d276SSandy Huang .ctrl = &rk3308_ctrl_data, 923fe49d276SSandy Huang .win = &rk3366_win0_data, 924fe49d276SSandy Huang .line_flag = &rk3366_vop_lite_line_flag, 925fe49d276SSandy Huang .reg_len = RK3366_LIT_FRC_LOWER01_0 * 4, 926fe49d276SSandy Huang }; 927a144d23dSAndy Yan 928a144d23dSAndy Yan static const struct vop_win rv1126_win2_data = { 929a144d23dSAndy Yan .gate = VOP_REG(RV1126_WIN2_CTRL0, 0x1, 0), 93010a896e2SChaoyi Chen .interlace_read = VOP_REG_VER(RV1126_WIN2_CTRL0, 0x1, 1, 2, 0xf, -1), 931a144d23dSAndy Yan .enable = VOP_REG(RV1126_WIN2_CTRL0, 0x1, 4), 932a144d23dSAndy Yan .format = VOP_REG(RV1126_WIN2_CTRL0, 0x3, 5), 933a144d23dSAndy Yan .rb_swap = VOP_REG(RV1126_WIN2_CTRL0, 0x1, 20), 934a144d23dSAndy Yan .dsp_info = VOP_REG(RV1126_WIN2_DSP_INFO0, 0x0fff0fff, 0), 935a144d23dSAndy Yan .dsp_st = VOP_REG(RV1126_WIN2_DSP_ST0, 0x1fff1fff, 0), 936a144d23dSAndy Yan .yrgb_mst = VOP_REG(RV1126_WIN2_MST0, 0xffffffff, 0), 937a144d23dSAndy Yan .yrgb_vir = VOP_REG(RV1126_WIN2_VIR0_1, 0x1fff, 0), 938a144d23dSAndy Yan }; 939a144d23dSAndy Yan 940a144d23dSAndy Yan static const struct vop_ctrl rv1126_ctrl_data = { 941a144d23dSAndy Yan .standby = VOP_REG(RK3366_LIT_SYS_CTRL2, 0x1, 1), 942a144d23dSAndy Yan .axi_outstanding_max_num = VOP_REG(RK3366_LIT_SYS_CTRL1, 0x1f, 16), 943a144d23dSAndy Yan .axi_max_outstanding_en = VOP_REG(RK3366_LIT_SYS_CTRL1, 0x1, 12), 944a144d23dSAndy Yan .htotal_pw = VOP_REG(RK3366_LIT_DSP_HTOTAL_HS_END, 0x0fff0fff, 0), 945a144d23dSAndy Yan .hact_st_end = VOP_REG(RK3366_LIT_DSP_HACT_ST_END, 0x0fff0fff, 0), 946a144d23dSAndy Yan .vtotal_pw = VOP_REG(RK3366_LIT_DSP_VTOTAL_VS_END, 0x0fff0fff, 0), 947a144d23dSAndy Yan .vact_st_end = VOP_REG(RK3366_LIT_DSP_VACT_ST_END, 0x0fff0fff, 0), 948a144d23dSAndy Yan .vact_st_end_f1 = VOP_REG(RK3366_LIT_DSP_VACT_ST_END_F1, 0x0fff0fff, 0), 949a144d23dSAndy Yan .vs_st_end_f1 = VOP_REG(RK3366_LIT_DSP_VS_ST_END_F1, 0x0fff0fff, 0), 950a144d23dSAndy Yan .dsp_interlace = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 0), 951a144d23dSAndy Yan .global_regdone_en = VOP_REG(RK3366_LIT_SYS_CTRL2, 0x1, 13), 952a144d23dSAndy Yan .auto_gate_en = VOP_REG(RK3366_LIT_SYS_CTRL2, 0x1, 0), 953a144d23dSAndy Yan .dsp_layer_sel = VOP_REG(RK3366_LIT_DSP_CTRL2, 0xff, 22), 954a144d23dSAndy Yan .overlay_mode = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 4), 955a144d23dSAndy Yan .core_dclk_div = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 13), 956a144d23dSAndy Yan .dclk_ddr = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 14), 957a144d23dSAndy Yan .rgb_en = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 0), 958a144d23dSAndy Yan .rgb_pin_pol = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x7, 2), 959a144d23dSAndy Yan .hdmi_en = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 8), 960a144d23dSAndy Yan .hdmi_pin_pol = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x7, 10), 961a144d23dSAndy Yan .lvds_en = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 16), 962a144d23dSAndy Yan .lvds_pin_pol = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x7, 18), 963a144d23dSAndy Yan .mipi_en = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 24), 964a144d23dSAndy Yan .mipi_pin_pol = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x7, 26), 965a144d23dSAndy Yan .mipi_dclk_pol = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 25), 966a144d23dSAndy Yan .lvds_dclk_pol = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 17), 967a144d23dSAndy Yan .hdmi_dclk_pol = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 9), 968a144d23dSAndy Yan .rgb_dclk_pol = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 1), 969a144d23dSAndy Yan .dither_down = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 8), 970a144d23dSAndy Yan .dither_up = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 2), 971a144d23dSAndy Yan .dsp_data_swap = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1f, 9), 97232328971SDamon Ding .dsp_bg_swap = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 9), 97332328971SDamon Ding .dsp_rb_swap = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 11), 97432328971SDamon Ding .dsp_rg_swap = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 12), 9750c4bb35cSDamon Ding .yuv_clip = VOP_REG(RK3366_LIT_SYS_CTRL2, 0x1, 4), 976a144d23dSAndy Yan .dsp_ccir656_avg = VOP_REG(RK3366_LIT_SYS_CTRL2, 0x1, 5), 977a144d23dSAndy Yan .dsp_black = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 15), 978a144d23dSAndy Yan .dsp_blank = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 14), 979a144d23dSAndy Yan .dsp_outzero = VOP_REG(RK3366_LIT_SYS_CTRL2, 0x1, 3), 980a144d23dSAndy Yan .dsp_lut_en = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 5), 981a144d23dSAndy Yan .out_mode = VOP_REG(RK3366_LIT_DSP_CTRL2, 0xf, 16), 982a144d23dSAndy Yan .dsp_background = VOP_REG(RK3366_LIT_DSP_BG, 0x00ffffff, 0), 983a144d23dSAndy Yan .cfg_done = VOP_REG(RK3366_LIT_REG_CFG_DONE, 0x1, 0), 984a144d23dSAndy Yan 985a144d23dSAndy Yan .bcsh_en = VOP_REG(RK3366_LIT_BCSH_CTRL, 0x1, 0), 986a144d23dSAndy Yan .bcsh_r2y_csc_mode = VOP_REG(RK3366_LIT_BCSH_CTRL, 0x1, 1), 987a144d23dSAndy Yan .bcsh_out_mode = VOP_REG(RK3366_LIT_BCSH_CTRL, 0x3, 2), 988a144d23dSAndy Yan .bcsh_y2r_csc_mode = VOP_REG(RK3366_LIT_BCSH_CTRL, 0x3, 4), 989a144d23dSAndy Yan .bcsh_y2r_en = VOP_REG(RK3366_LIT_BCSH_CTRL, 0x1, 6), 990a144d23dSAndy Yan .bcsh_r2y_en = VOP_REG(RK3366_LIT_BCSH_CTRL, 0x1, 7), 991a144d23dSAndy Yan .bcsh_color_bar = VOP_REG(RK3366_LIT_BCSH_COL_BAR, 0xffffff, 0), 992a144d23dSAndy Yan .bcsh_brightness = VOP_REG(RK3366_LIT_BCSH_BCS, 0xff, 0), 993a144d23dSAndy Yan .bcsh_contrast = VOP_REG(RK3366_LIT_BCSH_BCS, 0x1ff, 8), 994a144d23dSAndy Yan .bcsh_sat_con = VOP_REG(RK3366_LIT_BCSH_BCS, 0x3ff, 20), 995a144d23dSAndy Yan .bcsh_sin_hue = VOP_REG(RK3366_LIT_BCSH_H, 0x1ff, 0), 996a144d23dSAndy Yan .bcsh_cos_hue = VOP_REG(RK3366_LIT_BCSH_H, 0x1ff, 16), 997a144d23dSAndy Yan 998a144d23dSAndy Yan .mcu_pix_total = VOP_REG(RK3366_LIT_MCU_CTRL, 0x3f, 0), 999a144d23dSAndy Yan .mcu_cs_pst = VOP_REG(RK3366_LIT_MCU_CTRL, 0xf, 6), 1000a144d23dSAndy Yan .mcu_cs_pend = VOP_REG(RK3366_LIT_MCU_CTRL, 0x3f, 10), 1001a144d23dSAndy Yan .mcu_rw_pst = VOP_REG(RK3366_LIT_MCU_CTRL, 0xf, 16), 1002a144d23dSAndy Yan .mcu_rw_pend = VOP_REG(RK3366_LIT_MCU_CTRL, 0x3f, 20), 1003a144d23dSAndy Yan .mcu_clk_sel = VOP_REG(RK3366_LIT_MCU_CTRL, 0x1, 26), 1004a144d23dSAndy Yan .mcu_hold_mode = VOP_REG(RK3366_LIT_MCU_CTRL, 0x1, 27), 1005a144d23dSAndy Yan .mcu_frame_st = VOP_REG(RK3366_LIT_MCU_CTRL, 0x1, 28), 1006a144d23dSAndy Yan .mcu_rs = VOP_REG(RK3366_LIT_MCU_CTRL, 0x1, 29), 1007a144d23dSAndy Yan .mcu_bypass = VOP_REG(RK3366_LIT_MCU_CTRL, 0x1, 30), 1008a144d23dSAndy Yan .mcu_type = VOP_REG(RK3366_LIT_MCU_CTRL, 0x1, 31), 1009a144d23dSAndy Yan .mcu_rw_bypass_port = VOP_REG(RK3366_LIT_MCU_RW_BYPASS_PORT, 1010a144d23dSAndy Yan 0xffffffff, 0), 1011a144d23dSAndy Yan }; 1012a144d23dSAndy Yan 1013dac93f83SChris Zhong static const struct vop_grf_ctrl rv1126_grf_ctrl = { 1014dac93f83SChris Zhong .grf_dclk_inv = VOP_REG(0x1026c, 0x1, 2), 1015dac93f83SChris Zhong }; 1016dac93f83SChris Zhong 1017a144d23dSAndy Yan const struct vop_data rv1126_vop = { 1018a144d23dSAndy Yan .version = VOP_VERSION(2, 7), 1019a144d23dSAndy Yan .max_output = {1920, 1080}, 1020a144d23dSAndy Yan .ctrl = &rv1126_ctrl_data, 1021dac93f83SChris Zhong .grf_ctrl = &rv1126_grf_ctrl, 1022a144d23dSAndy Yan .win = &rv1126_win2_data, 1023a144d23dSAndy Yan .line_flag = &rk3366_vop_lite_line_flag, 1024a144d23dSAndy Yan .reg_len = RK3366_LIT_FLAG_REG * 4, 1025a144d23dSAndy Yan }; 102654f7137bSDamon Ding 102710a896e2SChaoyi Chen static const struct vop_ctrl rv1126b_ctrl_data = { 102810a896e2SChaoyi Chen .cfg_done = VOP_REG(RK3366_LIT_REG_CFG_DONE, 0x1, 0), 102910a896e2SChaoyi Chen .dsp_background = VOP_REG(RK3366_LIT_DSP_BG, 0x00ffffff, 0), 103010a896e2SChaoyi Chen 103110a896e2SChaoyi Chen .mcu_pix_total = VOP_REG(RK3366_LIT_MCU_CTRL, 0x3f, 0), 103210a896e2SChaoyi Chen .mcu_cs_pst = VOP_REG(RK3366_LIT_MCU_CTRL, 0xf, 6), 103310a896e2SChaoyi Chen .mcu_cs_pend = VOP_REG(RK3366_LIT_MCU_CTRL, 0x3f, 10), 103410a896e2SChaoyi Chen .mcu_rw_pst = VOP_REG(RK3366_LIT_MCU_CTRL, 0xf, 16), 103510a896e2SChaoyi Chen .mcu_rw_pend = VOP_REG(RK3366_LIT_MCU_CTRL, 0x3f, 20), 103610a896e2SChaoyi Chen .mcu_clk_sel = VOP_REG(RK3366_LIT_MCU_CTRL, 0x1, 26), 103710a896e2SChaoyi Chen .mcu_hold_mode = VOP_REG(RK3366_LIT_MCU_CTRL, 0x1, 27), 103810a896e2SChaoyi Chen .mcu_frame_st = VOP_REG(RK3366_LIT_MCU_CTRL, 0x1, 28), 103910a896e2SChaoyi Chen .mcu_rs = VOP_REG(RK3366_LIT_MCU_CTRL, 0x1, 29), 104010a896e2SChaoyi Chen .mcu_bypass = VOP_REG(RK3366_LIT_MCU_CTRL, 0x1, 30), 104110a896e2SChaoyi Chen .mcu_type = VOP_REG(RK3366_LIT_MCU_CTRL, 0x1, 31), 104210a896e2SChaoyi Chen .mcu_rw_bypass_port = VOP_REG(RK3366_LIT_MCU_RW_BYPASS_PORT, 104310a896e2SChaoyi Chen 0xffffffff, 0), 104410a896e2SChaoyi Chen 104510a896e2SChaoyi Chen .axi_max_outstanding_en = VOP_REG(RK3366_LIT_SYS_CTRL1, 0x1, 12), 104610a896e2SChaoyi Chen .axi_outstanding_max_num = VOP_REG(RK3366_LIT_SYS_CTRL1, 0x1f, 16), 104710a896e2SChaoyi Chen 104810a896e2SChaoyi Chen .auto_gate_en = VOP_REG(RK3366_LIT_SYS_CTRL2, 0x1, 0), 104910a896e2SChaoyi Chen .standby = VOP_REG(RK3366_LIT_SYS_CTRL2, 0x1, 1), 105010a896e2SChaoyi Chen .dsp_outzero = VOP_REG(RK3366_LIT_SYS_CTRL2, 0x1, 3), 105110a896e2SChaoyi Chen .yuv_clip = VOP_REG(RK3366_LIT_SYS_CTRL2, 0x1, 4), 105210a896e2SChaoyi Chen .global_regdone_en = VOP_REG(RK3366_LIT_SYS_CTRL2, 0x1, 13), 105310a896e2SChaoyi Chen 105410a896e2SChaoyi Chen .rgb_en = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 0), 105510a896e2SChaoyi Chen .rgb_dclk_pol = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 1), 105610a896e2SChaoyi Chen .rgb_pin_pol = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x7, 2), 105710a896e2SChaoyi Chen .core_dclk_div = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 13), 105810a896e2SChaoyi Chen .mipi_en = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 24), 105910a896e2SChaoyi Chen .mipi_dclk_pol = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 25), 106010a896e2SChaoyi Chen .mipi_pin_pol = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x7, 26), 106110a896e2SChaoyi Chen .bt1120_yc_swap = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 30), 106210a896e2SChaoyi Chen .bt1120_en = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 31), 106310a896e2SChaoyi Chen .bt656_en = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 6), 106410a896e2SChaoyi Chen 1065*b899f9ccSChaoyi Chen .mcu_force_rdn = VOP_REG(RV1126B_DSP_CTRL1, 0x1, 21), 1066*b899f9ccSChaoyi Chen 106710a896e2SChaoyi Chen .dsp_interlace = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 0), 106810a896e2SChaoyi Chen .dither_up = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 2), 106910a896e2SChaoyi Chen .overlay_mode = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 4), 107010a896e2SChaoyi Chen .dsp_lut_en = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 5), 107110a896e2SChaoyi Chen .dither_down = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 8), 107210a896e2SChaoyi Chen .dsp_bg_swap = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 9), 107310a896e2SChaoyi Chen .dsp_data_swap = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1f, 9), 107410a896e2SChaoyi Chen .dsp_rb_swap = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 11), 107510a896e2SChaoyi Chen .dsp_rg_swap = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 12), 107610a896e2SChaoyi Chen .dsp_blank = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 14), 107710a896e2SChaoyi Chen .dsp_black = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 15), 107810a896e2SChaoyi Chen .out_mode = VOP_REG(RK3366_LIT_DSP_CTRL2, 0xf, 16), 107910a896e2SChaoyi Chen .dsp_layer_sel = VOP_REG(RK3366_LIT_DSP_CTRL2, 0xf, 22), 108010a896e2SChaoyi Chen 108110a896e2SChaoyi Chen .htotal_pw = VOP_REG(RK3366_LIT_DSP_HTOTAL_HS_END, 0x0fff0fff, 0), 108210a896e2SChaoyi Chen .hact_st_end = VOP_REG(RK3366_LIT_DSP_HACT_ST_END, 0x0fff0fff, 0), 108310a896e2SChaoyi Chen .vtotal_pw = VOP_REG(RK3366_LIT_DSP_VTOTAL_VS_END, 0x0fff0fff, 0), 108410a896e2SChaoyi Chen .vact_st_end = VOP_REG(RK3366_LIT_DSP_VACT_ST_END, 0x0fff0fff, 0), 108510a896e2SChaoyi Chen .vact_st_end_f1 = VOP_REG(RK3366_LIT_DSP_VACT_ST_END_F1, 0x0fff0fff, 0), 108610a896e2SChaoyi Chen .vs_st_end_f1 = VOP_REG(RK3366_LIT_DSP_VS_ST_END_F1, 0x0fff0fff, 0), 108710a896e2SChaoyi Chen 108810a896e2SChaoyi Chen .bcsh_en = VOP_REG(RK3366_LIT_BCSH_CTRL, 0x1, 0), 108910a896e2SChaoyi Chen .bcsh_r2y_csc_mode = VOP_REG(RK3366_LIT_BCSH_CTRL, 0x1, 1), 109010a896e2SChaoyi Chen .bcsh_out_mode = VOP_REG(RK3366_LIT_BCSH_CTRL, 0x3, 2), 109110a896e2SChaoyi Chen .bcsh_y2r_csc_mode = VOP_REG(RK3366_LIT_BCSH_CTRL, 0x3, 4), 109210a896e2SChaoyi Chen .bcsh_y2r_en = VOP_REG(RK3366_LIT_BCSH_CTRL, 0x1, 6), 109310a896e2SChaoyi Chen .bcsh_r2y_en = VOP_REG(RK3366_LIT_BCSH_CTRL, 0x1, 7), 109410a896e2SChaoyi Chen 109510a896e2SChaoyi Chen .bcsh_color_bar = VOP_REG(RK3366_LIT_BCSH_COL_BAR, 0xffffff, 0), 109610a896e2SChaoyi Chen .bcsh_brightness = VOP_REG(RK3366_LIT_BCSH_BCS, 0xff, 0), 109710a896e2SChaoyi Chen .bcsh_contrast = VOP_REG(RK3366_LIT_BCSH_BCS, 0x1ff, 8), 109810a896e2SChaoyi Chen .bcsh_sat_con = VOP_REG(RK3366_LIT_BCSH_BCS, 0x3ff, 20), 109910a896e2SChaoyi Chen .bcsh_sin_hue = VOP_REG(RK3366_LIT_BCSH_H, 0x1ff, 0), 110010a896e2SChaoyi Chen .bcsh_cos_hue = VOP_REG(RK3366_LIT_BCSH_H, 0x1ff, 16), 110110a896e2SChaoyi Chen }; 110210a896e2SChaoyi Chen 110310a896e2SChaoyi Chen static const struct vop_grf_ctrl rv1126b_grf_ctrl = { 110410a896e2SChaoyi Chen .grf_dclk_inv = VOP_REG(0x30b9c, 0x1, 0), 110510a896e2SChaoyi Chen }; 110610a896e2SChaoyi Chen 110710a896e2SChaoyi Chen const struct vop_data rv1126b_vop = { 110810a896e2SChaoyi Chen .version = VOP_VERSION(2, 0xf), 110910a896e2SChaoyi Chen .max_output = {1920, 1080}, 111010a896e2SChaoyi Chen .ctrl = &rv1126b_ctrl_data, 111110a896e2SChaoyi Chen .grf_ctrl = &rv1126b_grf_ctrl, 111210a896e2SChaoyi Chen .win = &rv1126_win2_data, 111310a896e2SChaoyi Chen .line_flag = &rk3366_vop_lite_line_flag, 111410a896e2SChaoyi Chen .reg_len = RK3366_LIT_FLAG_REG * 4, 111510a896e2SChaoyi Chen }; 111610a896e2SChaoyi Chen 111754f7137bSDamon Ding static const struct vop_ctrl rv1106_ctrl_data = { 111854f7137bSDamon Ding .standby = VOP_REG(RK3366_LIT_SYS_CTRL2, 0x1, 1), 111954f7137bSDamon Ding .axi_outstanding_max_num = VOP_REG(RK3366_LIT_SYS_CTRL1, 0x1f, 16), 112054f7137bSDamon Ding .axi_max_outstanding_en = VOP_REG(RK3366_LIT_SYS_CTRL1, 0x1, 12), 112154f7137bSDamon Ding .htotal_pw = VOP_REG(RK3366_LIT_DSP_HTOTAL_HS_END, 0x0fff0fff, 0), 112254f7137bSDamon Ding .hact_st_end = VOP_REG(RK3366_LIT_DSP_HACT_ST_END, 0x0fff0fff, 0), 112354f7137bSDamon Ding .vtotal_pw = VOP_REG(RK3366_LIT_DSP_VTOTAL_VS_END, 0x0fff0fff, 0), 112454f7137bSDamon Ding .vact_st_end = VOP_REG(RK3366_LIT_DSP_VACT_ST_END, 0x0fff0fff, 0), 112554f7137bSDamon Ding .vact_st_end_f1 = VOP_REG(RK3366_LIT_DSP_VACT_ST_END_F1, 0x0fff0fff, 0), 112654f7137bSDamon Ding .vs_st_end_f1 = VOP_REG(RK3366_LIT_DSP_VS_ST_END_F1, 0x0fff0fff, 0), 112754f7137bSDamon Ding .dsp_interlace = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 0), 112854f7137bSDamon Ding .auto_gate_en = VOP_REG(RK3366_LIT_SYS_CTRL2, 0x1, 0), 112954f7137bSDamon Ding .core_dclk_div = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 13), 113054f7137bSDamon Ding .rgb_en = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 0), 113154f7137bSDamon Ding .rgb_pin_pol = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x7, 2), 113254f7137bSDamon Ding .dither_down = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 8), 113354f7137bSDamon Ding .dither_up = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 2), 113454f7137bSDamon Ding .dsp_data_swap = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1f, 9), 113532328971SDamon Ding .dsp_bg_swap = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 9), 113632328971SDamon Ding .dsp_rb_swap = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 11), 113732328971SDamon Ding .dsp_rg_swap = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 12), 11380c4bb35cSDamon Ding .yuv_clip = VOP_REG(RK3366_LIT_SYS_CTRL2, 0x1, 4), 113954f7137bSDamon Ding .dsp_black = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 15), 114054f7137bSDamon Ding .dsp_blank = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 14), 114154f7137bSDamon Ding .dsp_outzero = VOP_REG(RK3366_LIT_SYS_CTRL2, 0x1, 3), 114254f7137bSDamon Ding .out_mode = VOP_REG(RK3366_LIT_DSP_CTRL2, 0xf, 16), 114354f7137bSDamon Ding .dsp_background = VOP_REG(RK3366_LIT_DSP_BG, 0x00ffffff, 0), 114454f7137bSDamon Ding .cfg_done = VOP_REG(RK3366_LIT_REG_CFG_DONE, 0x1, 0), 114554f7137bSDamon Ding 114654f7137bSDamon Ding .bcsh_en = VOP_REG(RK3366_LIT_BCSH_CTRL, 0x1, 0), 114754f7137bSDamon Ding .bcsh_r2y_csc_mode = VOP_REG(RK3366_LIT_BCSH_CTRL, 0x1, 1), 114854f7137bSDamon Ding .bcsh_out_mode = VOP_REG(RK3366_LIT_BCSH_CTRL, 0x3, 2), 114954f7137bSDamon Ding .bcsh_y2r_csc_mode = VOP_REG(RK3366_LIT_BCSH_CTRL, 0x3, 4), 115054f7137bSDamon Ding .bcsh_y2r_en = VOP_REG(RK3366_LIT_BCSH_CTRL, 0x1, 6), 115154f7137bSDamon Ding .bcsh_r2y_en = VOP_REG(RK3366_LIT_BCSH_CTRL, 0x1, 7), 115254f7137bSDamon Ding .bcsh_color_bar = VOP_REG(RK3366_LIT_BCSH_COL_BAR, 0xffffff, 0), 115354f7137bSDamon Ding .bcsh_brightness = VOP_REG(RK3366_LIT_BCSH_BCS, 0xff, 0), 115454f7137bSDamon Ding .bcsh_contrast = VOP_REG(RK3366_LIT_BCSH_BCS, 0x1ff, 8), 115554f7137bSDamon Ding .bcsh_sat_con = VOP_REG(RK3366_LIT_BCSH_BCS, 0x3ff, 20), 115654f7137bSDamon Ding .bcsh_sin_hue = VOP_REG(RK3366_LIT_BCSH_H, 0x1ff, 0), 115754f7137bSDamon Ding .bcsh_cos_hue = VOP_REG(RK3366_LIT_BCSH_H, 0x1ff, 16), 115854f7137bSDamon Ding 115954f7137bSDamon Ding .mcu_pix_total = VOP_REG(RK3366_LIT_MCU_CTRL, 0x3f, 0), 116054f7137bSDamon Ding .mcu_cs_pst = VOP_REG(RK3366_LIT_MCU_CTRL, 0xf, 6), 116154f7137bSDamon Ding .mcu_cs_pend = VOP_REG(RK3366_LIT_MCU_CTRL, 0x3f, 10), 116254f7137bSDamon Ding .mcu_rw_pst = VOP_REG(RK3366_LIT_MCU_CTRL, 0xf, 16), 116354f7137bSDamon Ding .mcu_rw_pend = VOP_REG(RK3366_LIT_MCU_CTRL, 0x3f, 20), 116454f7137bSDamon Ding .mcu_clk_sel = VOP_REG(RK3366_LIT_MCU_CTRL, 0x1, 26), 116554f7137bSDamon Ding .mcu_hold_mode = VOP_REG(RK3366_LIT_MCU_CTRL, 0x1, 27), 116654f7137bSDamon Ding .mcu_frame_st = VOP_REG(RK3366_LIT_MCU_CTRL, 0x1, 28), 116754f7137bSDamon Ding .mcu_rs = VOP_REG(RK3366_LIT_MCU_CTRL, 0x1, 29), 116854f7137bSDamon Ding .mcu_bypass = VOP_REG(RK3366_LIT_MCU_CTRL, 0x1, 30), 116954f7137bSDamon Ding .mcu_type = VOP_REG(RK3366_LIT_MCU_CTRL, 0x1, 31), 117054f7137bSDamon Ding .mcu_rw_bypass_port = VOP_REG(RK3366_LIT_MCU_RW_BYPASS_PORT, 117154f7137bSDamon Ding 0xffffffff, 0), 117254f7137bSDamon Ding .bt1120_yc_swap = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 30), 117354f7137bSDamon Ding .bt1120_en = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 31), 117454f7137bSDamon Ding .bt656_en = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 6), 117554f7137bSDamon Ding }; 117654f7137bSDamon Ding 117754f7137bSDamon Ding static const struct vop_grf_ctrl rv1106_grf_ctrl = { 117854f7137bSDamon Ding .grf_dclk_inv = VOP_REG(0x1000c, 0x1, 2), 117954f7137bSDamon Ding }; 118054f7137bSDamon Ding 118154f7137bSDamon Ding static const struct vop_win rv1106_win1_data = { 118254f7137bSDamon Ding .enable = VOP_REG(RK3366_LIT_WIN1_CTRL0, 0x1, 0), 118354f7137bSDamon Ding .format = VOP_REG(RK3366_LIT_WIN1_CTRL0, 0x7, 4), 118454f7137bSDamon Ding .interlace_read = VOP_REG(RK3366_LIT_WIN1_CTRL0, 0x1, 8), 118554f7137bSDamon Ding .rb_swap = VOP_REG(RK3366_LIT_WIN1_CTRL0, 0x1, 12), 118654f7137bSDamon Ding .dsp_info = VOP_REG(RK3366_LIT_WIN1_DSP_INFO, 0x0fff0fff, 0), 118754f7137bSDamon Ding .dsp_st = VOP_REG(RK3366_LIT_WIN1_DSP_ST, 0xffffffff, 0), 118854f7137bSDamon Ding .yrgb_mst = VOP_REG(RK3366_LIT_WIN1_MST, 0xffffffff, 0), 118954f7137bSDamon Ding .yrgb_vir = VOP_REG(RK3366_LIT_WIN1_VIR, 0x1fff, 0), 119054f7137bSDamon Ding 119154f7137bSDamon Ding .alpha_mode = VOP_REG(RK3366_LIT_WIN1_ALPHA_CTRL, 0x1, 1), 119254f7137bSDamon Ding .alpha_en = VOP_REG(RK3366_LIT_WIN1_ALPHA_CTRL, 0x1, 0), 119354f7137bSDamon Ding }; 119454f7137bSDamon Ding 119554f7137bSDamon Ding static const struct vop_line_flag rv1106_vop_lite_line_flag = { 119654f7137bSDamon Ding .line_flag_num[0] = VOP_REG(RK3366_LIT_LINE_FLAG, 0xfff, 0), 119754f7137bSDamon Ding .line_flag_num[1] = VOP_REG(RK3366_LIT_LINE_FLAG, 0xfff, 16), 119854f7137bSDamon Ding }; 119954f7137bSDamon Ding 120054f7137bSDamon Ding const struct vop_data rv1106_vop = { 120154f7137bSDamon Ding .version = VOP_VERSION(2, 12), 120254f7137bSDamon Ding .max_output = {1280, 1280}, 120354f7137bSDamon Ding .ctrl = &rv1106_ctrl_data, 120454f7137bSDamon Ding .grf_ctrl = &rv1106_grf_ctrl, 120554f7137bSDamon Ding .win = &rv1106_win1_data, 120654f7137bSDamon Ding .line_flag = &rv1106_vop_lite_line_flag, 120754f7137bSDamon Ding .reg_len = RK3366_LIT_FLAG_REG * 4, 120854f7137bSDamon Ding }; 1209