1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * Copyright (c) 2015 Google, Inc 3*4882a593Smuzhiyun * Copyright 2014 Rockchip Inc. 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * SPDX-License-Identifier: GPL-2.0+ 6*4882a593Smuzhiyun */ 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun #ifndef _ASM_ARCH_EDP_H 9*4882a593Smuzhiyun #define _ASM_ARCH_EDP_H 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun struct rk3288_edp { 12*4882a593Smuzhiyun u8 res0[0x10]; 13*4882a593Smuzhiyun u32 dp_tx_version; 14*4882a593Smuzhiyun u8 res1[0x4]; 15*4882a593Smuzhiyun u32 func_en_1; 16*4882a593Smuzhiyun u32 func_en_2; 17*4882a593Smuzhiyun u32 video_ctl_1; 18*4882a593Smuzhiyun u32 video_ctl_2; 19*4882a593Smuzhiyun u32 video_ctl_3; 20*4882a593Smuzhiyun u32 video_ctl_4; 21*4882a593Smuzhiyun u8 res2[0xc]; 22*4882a593Smuzhiyun u32 video_ctl_8; 23*4882a593Smuzhiyun u8 res3[0x4]; 24*4882a593Smuzhiyun u32 video_ctl_10; 25*4882a593Smuzhiyun u32 total_line_l; 26*4882a593Smuzhiyun u32 total_line_h; 27*4882a593Smuzhiyun u32 active_line_l; 28*4882a593Smuzhiyun u32 active_line_h; 29*4882a593Smuzhiyun u32 v_f_porch; 30*4882a593Smuzhiyun u32 vsync; 31*4882a593Smuzhiyun u32 v_b_porch; 32*4882a593Smuzhiyun u32 total_pixel_l; 33*4882a593Smuzhiyun u32 total_pixel_h; 34*4882a593Smuzhiyun u32 active_pixel_l; 35*4882a593Smuzhiyun u32 active_pixel_h; 36*4882a593Smuzhiyun u32 h_f_porch_l; 37*4882a593Smuzhiyun u32 h_f_porch_h; 38*4882a593Smuzhiyun u32 hsync_l; 39*4882a593Smuzhiyun u32 hysnc_h; 40*4882a593Smuzhiyun u32 h_b_porch_l; 41*4882a593Smuzhiyun u32 h_b_porch_h; 42*4882a593Smuzhiyun u32 vid_status; 43*4882a593Smuzhiyun u32 total_line_sta_l; 44*4882a593Smuzhiyun u32 total_line_sta_h; 45*4882a593Smuzhiyun u32 active_line_sta_l; 46*4882a593Smuzhiyun u32 active_line_sta_h; 47*4882a593Smuzhiyun u32 v_f_porch_sta; 48*4882a593Smuzhiyun u32 vsync_sta; 49*4882a593Smuzhiyun u32 v_b_porch_sta; 50*4882a593Smuzhiyun u32 total_pixel_sta_l; 51*4882a593Smuzhiyun u32 total_pixel_sta_h; 52*4882a593Smuzhiyun u32 active_pixel_sta_l; 53*4882a593Smuzhiyun u32 active_pixel_sta_h; 54*4882a593Smuzhiyun u32 h_f_porch_sta_l; 55*4882a593Smuzhiyun u32 h_f_porch_sta_h; 56*4882a593Smuzhiyun u32 hsync_sta_l; 57*4882a593Smuzhiyun u32 hsync_sta_h; 58*4882a593Smuzhiyun u32 h_b_porch_sta_l; 59*4882a593Smuzhiyun u32 h_b_porch__sta_h; 60*4882a593Smuzhiyun u8 res4[0x28]; 61*4882a593Smuzhiyun u32 pll_reg_1; 62*4882a593Smuzhiyun u8 res5[4]; 63*4882a593Smuzhiyun u32 ssc_reg; 64*4882a593Smuzhiyun u8 res6[0xc]; 65*4882a593Smuzhiyun u32 tx_common; 66*4882a593Smuzhiyun u32 tx_common2; 67*4882a593Smuzhiyun u8 res7[0x4]; 68*4882a593Smuzhiyun u32 dp_aux; 69*4882a593Smuzhiyun u32 dp_bias; 70*4882a593Smuzhiyun u32 dp_test; 71*4882a593Smuzhiyun u32 dp_pd; 72*4882a593Smuzhiyun u32 dp_reserv1; 73*4882a593Smuzhiyun u32 dp_reserv2; 74*4882a593Smuzhiyun u8 res8[0x224]; 75*4882a593Smuzhiyun u32 lane_map; 76*4882a593Smuzhiyun u8 res9[0x14]; 77*4882a593Smuzhiyun u32 analog_ctl_2; 78*4882a593Smuzhiyun u8 res10[0x48]; 79*4882a593Smuzhiyun u32 int_state; 80*4882a593Smuzhiyun u32 common_int_sta_1; 81*4882a593Smuzhiyun u32 common_int_sta_2; 82*4882a593Smuzhiyun u32 common_int_sta_3; 83*4882a593Smuzhiyun u32 common_int_sta_4; 84*4882a593Smuzhiyun u32 spdif_biphase_int_sta; 85*4882a593Smuzhiyun u8 res11[0x4]; 86*4882a593Smuzhiyun u32 dp_int_sta; 87*4882a593Smuzhiyun u32 common_int_mask_1; 88*4882a593Smuzhiyun u32 common_int_mask_2; 89*4882a593Smuzhiyun u32 common_int_mask_3; 90*4882a593Smuzhiyun u32 common_int_mask_4; 91*4882a593Smuzhiyun u8 res12[0x08]; 92*4882a593Smuzhiyun u32 int_sta_mask; 93*4882a593Smuzhiyun u32 int_ctl; 94*4882a593Smuzhiyun u8 res13[0x200]; 95*4882a593Smuzhiyun u32 sys_ctl_1; 96*4882a593Smuzhiyun u32 sys_ctl_2; 97*4882a593Smuzhiyun u32 sys_ctl_3; 98*4882a593Smuzhiyun u32 sys_ctl_4; 99*4882a593Smuzhiyun u32 dp_vid_ctl; 100*4882a593Smuzhiyun u8 res14[0x4]; 101*4882a593Smuzhiyun u32 dp_aud_ctl; 102*4882a593Smuzhiyun u8 res15[0x24]; 103*4882a593Smuzhiyun u32 pkt_send_ctl; 104*4882a593Smuzhiyun u8 res16[0x4]; 105*4882a593Smuzhiyun u32 dp_hdcp_ctl; 106*4882a593Smuzhiyun u8 res17[0x34]; 107*4882a593Smuzhiyun u32 link_bw_set; 108*4882a593Smuzhiyun u32 lane_count_set; 109*4882a593Smuzhiyun u32 dp_training_ptn_set; 110*4882a593Smuzhiyun u32 ln_link_trn_ctl[4]; 111*4882a593Smuzhiyun u8 res18[0x4]; 112*4882a593Smuzhiyun u32 dp_hw_link_training; 113*4882a593Smuzhiyun u8 res19[0x1c]; 114*4882a593Smuzhiyun u32 dp_debug_ctl; 115*4882a593Smuzhiyun u32 hpd_deglitch_l; 116*4882a593Smuzhiyun u32 hpd_deglitch_h; 117*4882a593Smuzhiyun u8 res20[0x14]; 118*4882a593Smuzhiyun u32 dp_link_debug_ctl; 119*4882a593Smuzhiyun u8 res21[0x1c]; 120*4882a593Smuzhiyun u32 m_vid_0; 121*4882a593Smuzhiyun u32 m_vid_1; 122*4882a593Smuzhiyun u32 m_vid_2; 123*4882a593Smuzhiyun u32 n_vid_0; 124*4882a593Smuzhiyun u32 n_vid_1; 125*4882a593Smuzhiyun u32 n_vid_2; 126*4882a593Smuzhiyun u32 m_vid_mon; 127*4882a593Smuzhiyun u8 res22[0x14]; 128*4882a593Smuzhiyun u32 dp_video_fifo_thrd; 129*4882a593Smuzhiyun u8 res23[0x8]; 130*4882a593Smuzhiyun u32 dp_audio_margin; 131*4882a593Smuzhiyun u8 res24[0x20]; 132*4882a593Smuzhiyun u32 dp_m_cal_ctl; 133*4882a593Smuzhiyun u32 m_vid_gen_filter_th; 134*4882a593Smuzhiyun u8 res25[0x10]; 135*4882a593Smuzhiyun u32 m_aud_gen_filter_th; 136*4882a593Smuzhiyun u8 res26[0x4]; 137*4882a593Smuzhiyun u32 aux_ch_sta; 138*4882a593Smuzhiyun u32 aux_err_num; 139*4882a593Smuzhiyun u32 aux_ch_defer_dtl; 140*4882a593Smuzhiyun u32 aux_rx_comm; 141*4882a593Smuzhiyun u32 buf_data_ctl; 142*4882a593Smuzhiyun u32 aux_ch_ctl_1; 143*4882a593Smuzhiyun u32 aux_addr_7_0; 144*4882a593Smuzhiyun u32 aux_addr_15_8; 145*4882a593Smuzhiyun u32 aux_addr_19_16; 146*4882a593Smuzhiyun u32 aux_ch_ctl_2; 147*4882a593Smuzhiyun u8 res27[0x18]; 148*4882a593Smuzhiyun u32 buf_data[16]; 149*4882a593Smuzhiyun u32 soc_general_ctl; 150*4882a593Smuzhiyun u8 res29[0x1e0]; 151*4882a593Smuzhiyun u32 pll_reg_2; 152*4882a593Smuzhiyun u32 pll_reg_3; 153*4882a593Smuzhiyun u32 pll_reg_4; 154*4882a593Smuzhiyun u8 res30[0x10]; 155*4882a593Smuzhiyun u32 pll_reg_5; 156*4882a593Smuzhiyun }; 157*4882a593Smuzhiyun check_member(rk3288_edp, pll_reg_5, 0xa00); 158*4882a593Smuzhiyun 159*4882a593Smuzhiyun /* func_en_1 */ 160*4882a593Smuzhiyun #define VID_CAP_FUNC_EN_N (0x1 << 6) 161*4882a593Smuzhiyun #define VID_FIFO_FUNC_EN_N (0x1 << 5) 162*4882a593Smuzhiyun #define AUD_FIFO_FUNC_EN_N (0x1 << 4) 163*4882a593Smuzhiyun #define AUD_FUNC_EN_N (0x1 << 3) 164*4882a593Smuzhiyun #define HDCP_FUNC_EN_N (0x1 << 2) 165*4882a593Smuzhiyun #define SW_FUNC_EN_N (0x1 << 0) 166*4882a593Smuzhiyun 167*4882a593Smuzhiyun /* func_en_2 */ 168*4882a593Smuzhiyun #define SSC_FUNC_EN_N (0x1 << 7) 169*4882a593Smuzhiyun #define AUX_FUNC_EN_N (0x1 << 2) 170*4882a593Smuzhiyun #define SERDES_FIFO_FUNC_EN_N (0x1 << 1) 171*4882a593Smuzhiyun #define LS_CLK_DOMAIN_FUNC_EN_N (0x1 << 0) 172*4882a593Smuzhiyun 173*4882a593Smuzhiyun /* video_ctl_1 */ 174*4882a593Smuzhiyun #define VIDEO_EN (0x1 << 7) 175*4882a593Smuzhiyun #define VIDEO_MUTE (0x1 << 6) 176*4882a593Smuzhiyun 177*4882a593Smuzhiyun /* video_ctl_2 */ 178*4882a593Smuzhiyun #define IN_D_RANGE_MASK (0x1 << 7) 179*4882a593Smuzhiyun #define IN_D_RANGE_SHIFT (7) 180*4882a593Smuzhiyun #define IN_D_RANGE_CEA (0x1 << 7) 181*4882a593Smuzhiyun #define IN_D_RANGE_VESA (0x0 << 7) 182*4882a593Smuzhiyun #define IN_BPC_MASK (0x7 << 4) 183*4882a593Smuzhiyun #define IN_BPC_SHIFT (4) 184*4882a593Smuzhiyun #define IN_BPC_12_BITS (0x3 << 4) 185*4882a593Smuzhiyun #define IN_BPC_10_BITS (0x2 << 4) 186*4882a593Smuzhiyun #define IN_BPC_8_BITS (0x1 << 4) 187*4882a593Smuzhiyun #define IN_BPC_6_BITS (0x0 << 4) 188*4882a593Smuzhiyun #define IN_COLOR_F_MASK (0x3 << 0) 189*4882a593Smuzhiyun #define IN_COLOR_F_SHIFT (0) 190*4882a593Smuzhiyun #define IN_COLOR_F_YCBCR444 (0x2 << 0) 191*4882a593Smuzhiyun #define IN_COLOR_F_YCBCR422 (0x1 << 0) 192*4882a593Smuzhiyun #define IN_COLOR_F_RGB (0x0 << 0) 193*4882a593Smuzhiyun 194*4882a593Smuzhiyun /* video_ctl_3 */ 195*4882a593Smuzhiyun #define IN_YC_COEFFI_MASK (0x1 << 7) 196*4882a593Smuzhiyun #define IN_YC_COEFFI_SHIFT (7) 197*4882a593Smuzhiyun #define IN_YC_COEFFI_ITU709 (0x1 << 7) 198*4882a593Smuzhiyun #define IN_YC_COEFFI_ITU601 (0x0 << 7) 199*4882a593Smuzhiyun #define VID_CHK_UPDATE_TYPE_MASK (0x1 << 4) 200*4882a593Smuzhiyun #define VID_CHK_UPDATE_TYPE_SHIFT (4) 201*4882a593Smuzhiyun #define VID_CHK_UPDATE_TYPE_1 (0x1 << 4) 202*4882a593Smuzhiyun #define VID_CHK_UPDATE_TYPE_0 (0x0 << 4) 203*4882a593Smuzhiyun 204*4882a593Smuzhiyun /* video_ctl_4 */ 205*4882a593Smuzhiyun #define BIST_EN (0x1 << 3) 206*4882a593Smuzhiyun #define BIST_WH_64 (0x1 << 2) 207*4882a593Smuzhiyun #define BIST_WH_32 (0x0 << 2) 208*4882a593Smuzhiyun #define BIST_TYPE_COLR_BAR (0x0 << 0) 209*4882a593Smuzhiyun #define BIST_TYPE_GRAY_BAR (0x1 << 0) 210*4882a593Smuzhiyun #define BIST_TYPE_MOBILE_BAR (0x2 << 0) 211*4882a593Smuzhiyun 212*4882a593Smuzhiyun /* video_ctl_8 */ 213*4882a593Smuzhiyun #define VID_HRES_TH(x) (((x) & 0xf) << 4) 214*4882a593Smuzhiyun #define VID_VRES_TH(x) (((x) & 0xf) << 0) 215*4882a593Smuzhiyun 216*4882a593Smuzhiyun /* video_ctl_10 */ 217*4882a593Smuzhiyun #define F_SEL (0x1 << 4) 218*4882a593Smuzhiyun #define INTERACE_SCAN_CFG (0x1 << 2) 219*4882a593Smuzhiyun #define INTERACD_SCAN_CFG_OFFSET 2 220*4882a593Smuzhiyun #define VSYNC_POLARITY_CFG (0x1 << 1) 221*4882a593Smuzhiyun #define VSYNC_POLARITY_CFG_OFFSET 1 222*4882a593Smuzhiyun #define HSYNC_POLARITY_CFG (0x1 << 0) 223*4882a593Smuzhiyun #define HSYNC_POLARITY_CFG_OFFSET 0 224*4882a593Smuzhiyun 225*4882a593Smuzhiyun /* dp_pd */ 226*4882a593Smuzhiyun #define PD_INC_BG (0x1 << 7) 227*4882a593Smuzhiyun #define PD_EXP_BG (0x1 << 6) 228*4882a593Smuzhiyun #define PD_AUX (0x1 << 5) 229*4882a593Smuzhiyun #define PD_PLL (0x1 << 4) 230*4882a593Smuzhiyun #define PD_CH3 (0x1 << 3) 231*4882a593Smuzhiyun #define PD_CH2 (0x1 << 2) 232*4882a593Smuzhiyun #define PD_CH1 (0x1 << 1) 233*4882a593Smuzhiyun #define PD_CH0 (0x1 << 0) 234*4882a593Smuzhiyun 235*4882a593Smuzhiyun /* pll_reg_1 */ 236*4882a593Smuzhiyun #define REF_CLK_24M (0x1 << 1) 237*4882a593Smuzhiyun #define REF_CLK_27M (0x0 << 1) 238*4882a593Smuzhiyun 239*4882a593Smuzhiyun /* line_map */ 240*4882a593Smuzhiyun #define LANE3_MAP_LOGIC_LANE_0 (0x0 << 6) 241*4882a593Smuzhiyun #define LANE3_MAP_LOGIC_LANE_1 (0x1 << 6) 242*4882a593Smuzhiyun #define LANE3_MAP_LOGIC_LANE_2 (0x2 << 6) 243*4882a593Smuzhiyun #define LANE3_MAP_LOGIC_LANE_3 (0x3 << 6) 244*4882a593Smuzhiyun #define LANE2_MAP_LOGIC_LANE_0 (0x0 << 4) 245*4882a593Smuzhiyun #define LANE2_MAP_LOGIC_LANE_1 (0x1 << 4) 246*4882a593Smuzhiyun #define LANE2_MAP_LOGIC_LANE_2 (0x2 << 4) 247*4882a593Smuzhiyun #define LANE2_MAP_LOGIC_LANE_3 (0x3 << 4) 248*4882a593Smuzhiyun #define LANE1_MAP_LOGIC_LANE_0 (0x0 << 2) 249*4882a593Smuzhiyun #define LANE1_MAP_LOGIC_LANE_1 (0x1 << 2) 250*4882a593Smuzhiyun #define LANE1_MAP_LOGIC_LANE_2 (0x2 << 2) 251*4882a593Smuzhiyun #define LANE1_MAP_LOGIC_LANE_3 (0x3 << 2) 252*4882a593Smuzhiyun #define LANE0_MAP_LOGIC_LANE_0 (0x0 << 0) 253*4882a593Smuzhiyun #define LANE0_MAP_LOGIC_LANE_1 (0x1 << 0) 254*4882a593Smuzhiyun #define LANE0_MAP_LOGIC_LANE_2 (0x2 << 0) 255*4882a593Smuzhiyun #define LANE0_MAP_LOGIC_LANE_3 (0x3 << 0) 256*4882a593Smuzhiyun 257*4882a593Smuzhiyun /* analog_ctl_2 */ 258*4882a593Smuzhiyun #define SEL_24M (0x1 << 3) 259*4882a593Smuzhiyun 260*4882a593Smuzhiyun /* common_int_sta_1 */ 261*4882a593Smuzhiyun #define VSYNC_DET (0x1 << 7) 262*4882a593Smuzhiyun #define PLL_LOCK_CHG (0x1 << 6) 263*4882a593Smuzhiyun #define SPDIF_ERR (0x1 << 5) 264*4882a593Smuzhiyun #define SPDIF_UNSTBL (0x1 << 4) 265*4882a593Smuzhiyun #define VID_FORMAT_CHG (0x1 << 3) 266*4882a593Smuzhiyun #define AUD_CLK_CHG (0x1 << 2) 267*4882a593Smuzhiyun #define VID_CLK_CHG (0x1 << 1) 268*4882a593Smuzhiyun #define SW_INT (0x1 << 0) 269*4882a593Smuzhiyun 270*4882a593Smuzhiyun /* common_int_sta_2 */ 271*4882a593Smuzhiyun #define ENC_EN_CHG (0x1 << 6) 272*4882a593Smuzhiyun #define HW_BKSV_RDY (0x1 << 3) 273*4882a593Smuzhiyun #define HW_SHA_DONE (0x1 << 2) 274*4882a593Smuzhiyun #define HW_AUTH_STATE_CHG (0x1 << 1) 275*4882a593Smuzhiyun #define HW_AUTH_DONE (0x1 << 0) 276*4882a593Smuzhiyun 277*4882a593Smuzhiyun /* common_int_sta_3 */ 278*4882a593Smuzhiyun #define AFIFO_UNDER (0x1 << 7) 279*4882a593Smuzhiyun #define AFIFO_OVER (0x1 << 6) 280*4882a593Smuzhiyun #define R0_CHK_FLAG (0x1 << 5) 281*4882a593Smuzhiyun 282*4882a593Smuzhiyun /* common_int_sta_4 */ 283*4882a593Smuzhiyun #define PSR_ACTIVE (0x1 << 7) 284*4882a593Smuzhiyun #define PSR_INACTIVE (0x1 << 6) 285*4882a593Smuzhiyun #define SPDIF_BI_PHASE_ERR (0x1 << 5) 286*4882a593Smuzhiyun #define HOTPLUG_CHG (0x1 << 2) 287*4882a593Smuzhiyun #define HPD_LOST (0x1 << 1) 288*4882a593Smuzhiyun #define PLUG (0x1 << 0) 289*4882a593Smuzhiyun 290*4882a593Smuzhiyun /* dp_int_sta */ 291*4882a593Smuzhiyun #define INT_HPD (0x1 << 6) 292*4882a593Smuzhiyun #define HW_LT_DONE (0x1 << 5) 293*4882a593Smuzhiyun #define SINK_LOST (0x1 << 3) 294*4882a593Smuzhiyun #define LINK_LOST (0x1 << 2) 295*4882a593Smuzhiyun #define RPLY_RECEIV (0x1 << 1) 296*4882a593Smuzhiyun #define AUX_ERR (0x1 << 0) 297*4882a593Smuzhiyun 298*4882a593Smuzhiyun /* int_ctl */ 299*4882a593Smuzhiyun #define SOFT_INT_CTRL (0x1 << 2) 300*4882a593Smuzhiyun #define INT_POL (0x1 << 0) 301*4882a593Smuzhiyun 302*4882a593Smuzhiyun /* sys_ctl_1 */ 303*4882a593Smuzhiyun #define DET_STA (0x1 << 2) 304*4882a593Smuzhiyun #define FORCE_DET (0x1 << 1) 305*4882a593Smuzhiyun #define DET_CTRL (0x1 << 0) 306*4882a593Smuzhiyun 307*4882a593Smuzhiyun /* sys_ctl_2 */ 308*4882a593Smuzhiyun #define CHA_CRI(x) (((x) & 0xf) << 4) 309*4882a593Smuzhiyun #define CHA_STA (0x1 << 2) 310*4882a593Smuzhiyun #define FORCE_CHA (0x1 << 1) 311*4882a593Smuzhiyun #define CHA_CTRL (0x1 << 0) 312*4882a593Smuzhiyun 313*4882a593Smuzhiyun /* sys_ctl_3 */ 314*4882a593Smuzhiyun #define HPD_STATUS (0x1 << 6) 315*4882a593Smuzhiyun #define F_HPD (0x1 << 5) 316*4882a593Smuzhiyun #define HPD_CTRL (0x1 << 4) 317*4882a593Smuzhiyun #define HDCP_RDY (0x1 << 3) 318*4882a593Smuzhiyun #define STRM_VALID (0x1 << 2) 319*4882a593Smuzhiyun #define F_VALID (0x1 << 1) 320*4882a593Smuzhiyun #define VALID_CTRL (0x1 << 0) 321*4882a593Smuzhiyun 322*4882a593Smuzhiyun /* sys_ctl_4 */ 323*4882a593Smuzhiyun #define FIX_M_AUD (0x1 << 4) 324*4882a593Smuzhiyun #define ENHANCED (0x1 << 3) 325*4882a593Smuzhiyun #define FIX_M_VID (0x1 << 2) 326*4882a593Smuzhiyun #define M_VID_UPDATE_CTRL (0x3 << 0) 327*4882a593Smuzhiyun 328*4882a593Smuzhiyun /* pll_reg_2 */ 329*4882a593Smuzhiyun #define LDO_OUTPUT_V_SEL_145 (2 << 6) 330*4882a593Smuzhiyun #define KVCO_DEFALUT (1 << 4) 331*4882a593Smuzhiyun #define CHG_PUMP_CUR_SEL_5US (1 << 2) 332*4882a593Smuzhiyun #define V2L_CUR_SEL_1MA (1 << 0) 333*4882a593Smuzhiyun 334*4882a593Smuzhiyun /* pll_reg_3 */ 335*4882a593Smuzhiyun #define LOCK_DET_CNT_SEL_256 (2 << 5) 336*4882a593Smuzhiyun #define LOOP_FILTER_RESET (0 << 4) 337*4882a593Smuzhiyun #define PALL_SSC_RESET (0 << 3) 338*4882a593Smuzhiyun #define LOCK_DET_BYPASS (0 << 2) 339*4882a593Smuzhiyun #define PLL_LOCK_DET_MODE (0 << 1) 340*4882a593Smuzhiyun #define PLL_LOCK_DET_FORCE (0 << 0) 341*4882a593Smuzhiyun 342*4882a593Smuzhiyun /* pll_reg_5 */ 343*4882a593Smuzhiyun #define REGULATOR_V_SEL_950MV (2 << 4) 344*4882a593Smuzhiyun #define STANDBY_CUR_SEL (0 << 3) 345*4882a593Smuzhiyun #define CHG_PUMP_INOUT_CTRL_1200MV (1 << 1) 346*4882a593Smuzhiyun #define CHG_PUMP_INPUT_CTRL_OP (0 << 0) 347*4882a593Smuzhiyun 348*4882a593Smuzhiyun /* ssc_reg */ 349*4882a593Smuzhiyun #define SSC_OFFSET (0 << 6) 350*4882a593Smuzhiyun #define SSC_MODE (1 << 4) 351*4882a593Smuzhiyun #define SSC_DEPTH (9 << 0) 352*4882a593Smuzhiyun 353*4882a593Smuzhiyun /* tx_common */ 354*4882a593Smuzhiyun #define TX_SWING_PRE_EMP_MODE (1 << 7) 355*4882a593Smuzhiyun #define PRE_DRIVER_PW_CTRL1 (0 << 5) 356*4882a593Smuzhiyun #define LP_MODE_CLK_REGULATOR (0 << 4) 357*4882a593Smuzhiyun #define RESISTOR_MSB_CTRL (0 << 3) 358*4882a593Smuzhiyun #define RESISTOR_CTRL (7 << 0) 359*4882a593Smuzhiyun 360*4882a593Smuzhiyun /* dp_aux */ 361*4882a593Smuzhiyun #define DP_AUX_COMMON_MODE (0 << 4) 362*4882a593Smuzhiyun #define DP_AUX_EN (0 << 3) 363*4882a593Smuzhiyun #define AUX_TERM_50OHM (3 << 0) 364*4882a593Smuzhiyun 365*4882a593Smuzhiyun /* dp_bias */ 366*4882a593Smuzhiyun #define DP_BG_OUT_SEL (4 << 4) 367*4882a593Smuzhiyun #define DP_DB_CUR_CTRL (0 << 3) 368*4882a593Smuzhiyun #define DP_BG_SEL (1 << 2) 369*4882a593Smuzhiyun #define DP_RESISTOR_TUNE_BG (2 << 0) 370*4882a593Smuzhiyun 371*4882a593Smuzhiyun /* dp_reserv2 */ 372*4882a593Smuzhiyun #define CH1_CH3_SWING_EMP_CTRL (5 << 4) 373*4882a593Smuzhiyun #define CH0_CH2_SWING_EMP_CTRL (5 << 0) 374*4882a593Smuzhiyun 375*4882a593Smuzhiyun /* dp_training_ptn_set */ 376*4882a593Smuzhiyun #define SCRAMBLING_DISABLE (0x1 << 5) 377*4882a593Smuzhiyun #define SCRAMBLING_ENABLE (0x0 << 5) 378*4882a593Smuzhiyun #define LINK_QUAL_PATTERN_SET_MASK (0x7 << 2) 379*4882a593Smuzhiyun #define LINK_QUAL_PATTERN_SET_HBR2 (0x5 << 2) 380*4882a593Smuzhiyun #define LINK_QUAL_PATTERN_SET_80BIT (0x4 << 2) 381*4882a593Smuzhiyun #define LINK_QUAL_PATTERN_SET_PRBS7 (0x3 << 2) 382*4882a593Smuzhiyun #define LINK_QUAL_PATTERN_SET_D10_2 (0x1 << 2) 383*4882a593Smuzhiyun #define LINK_QUAL_PATTERN_SET_DISABLE (0x0 << 2) 384*4882a593Smuzhiyun #define SW_TRAINING_PATTERN_SET_MASK (0x3 << 0) 385*4882a593Smuzhiyun #define SW_TRAINING_PATTERN_SET_PTN2 (0x2 << 0) 386*4882a593Smuzhiyun #define SW_TRAINING_PATTERN_SET_PTN1 (0x1 << 0) 387*4882a593Smuzhiyun #define SW_TRAINING_PATTERN_SET_DISABLE (0x0 << 0) 388*4882a593Smuzhiyun 389*4882a593Smuzhiyun /* dp_hw_link_training_ctl */ 390*4882a593Smuzhiyun #define HW_LT_ERR_CODE_MASK 0x70 391*4882a593Smuzhiyun #define HW_LT_ERR_CODE_SHIFT 4 392*4882a593Smuzhiyun #define HW_LT_EN (0x1 << 0) 393*4882a593Smuzhiyun 394*4882a593Smuzhiyun /* dp_debug_ctl */ 395*4882a593Smuzhiyun #define PLL_LOCK (0x1 << 4) 396*4882a593Smuzhiyun #define F_PLL_LOCK (0x1 << 3) 397*4882a593Smuzhiyun #define PLL_LOCK_CTRL (0x1 << 2) 398*4882a593Smuzhiyun #define POLL_EN (0x1 << 1) 399*4882a593Smuzhiyun #define PN_INV (0x1 << 0) 400*4882a593Smuzhiyun 401*4882a593Smuzhiyun /* aux_ch_sta */ 402*4882a593Smuzhiyun #define AUX_BUSY (0x1 << 4) 403*4882a593Smuzhiyun #define AUX_STATUS_MASK (0xf << 0) 404*4882a593Smuzhiyun 405*4882a593Smuzhiyun /* aux_ch_defer_ctl */ 406*4882a593Smuzhiyun #define DEFER_CTRL_EN (0x1 << 7) 407*4882a593Smuzhiyun #define DEFER_COUNT(x) (((x) & 0x7f) << 0) 408*4882a593Smuzhiyun 409*4882a593Smuzhiyun /* aux_rx_comm */ 410*4882a593Smuzhiyun #define AUX_RX_COMM_I2C_DEFER (0x2 << 2) 411*4882a593Smuzhiyun #define AUX_RX_COMM_AUX_DEFER (0x2 << 0) 412*4882a593Smuzhiyun 413*4882a593Smuzhiyun /* buffer_data_ctl */ 414*4882a593Smuzhiyun #define BUF_CLR (0x1 << 7) 415*4882a593Smuzhiyun #define BUF_HAVE_DATA (0x1 << 4) 416*4882a593Smuzhiyun #define BUF_DATA_COUNT(x) (((x) & 0xf) << 0) 417*4882a593Smuzhiyun 418*4882a593Smuzhiyun /* aux_ch_ctl_1 */ 419*4882a593Smuzhiyun #define AUX_LENGTH(x) (((x - 1) & 0xf) << 4) 420*4882a593Smuzhiyun #define AUX_TX_COMM_MASK (0xf << 0) 421*4882a593Smuzhiyun #define AUX_TX_COMM_DP_TRANSACTION (0x1 << 3) 422*4882a593Smuzhiyun #define AUX_TX_COMM_I2C_TRANSACTION (0x0 << 3) 423*4882a593Smuzhiyun #define AUX_TX_COMM_MOT (0x1 << 2) 424*4882a593Smuzhiyun #define AUX_TX_COMM_WRITE (0x0 << 0) 425*4882a593Smuzhiyun #define AUX_TX_COMM_READ (0x1 << 0) 426*4882a593Smuzhiyun 427*4882a593Smuzhiyun /* aux_ch_ctl_2 */ 428*4882a593Smuzhiyun #define PD_AUX_IDLE (0x1 << 3) 429*4882a593Smuzhiyun #define ADDR_ONLY (0x1 << 1) 430*4882a593Smuzhiyun #define AUX_EN (0x1 << 0) 431*4882a593Smuzhiyun 432*4882a593Smuzhiyun /* tx_sw_reset */ 433*4882a593Smuzhiyun #define RST_DP_TX (0x1 << 0) 434*4882a593Smuzhiyun 435*4882a593Smuzhiyun /* analog_ctl_1 */ 436*4882a593Smuzhiyun #define TX_TERMINAL_CTRL_50_OHM (0x1 << 4) 437*4882a593Smuzhiyun 438*4882a593Smuzhiyun /* analog_ctl_3 */ 439*4882a593Smuzhiyun #define DRIVE_DVDD_BIT_1_0625V (0x4 << 5) 440*4882a593Smuzhiyun #define VCO_BIT_600_MICRO (0x5 << 0) 441*4882a593Smuzhiyun 442*4882a593Smuzhiyun /* pll_filter_ctl_1 */ 443*4882a593Smuzhiyun #define PD_RING_OSC (0x1 << 6) 444*4882a593Smuzhiyun #define AUX_TERMINAL_CTRL_37_5_OHM (0x0 << 4) 445*4882a593Smuzhiyun #define AUX_TERMINAL_CTRL_45_OHM (0x1 << 4) 446*4882a593Smuzhiyun #define AUX_TERMINAL_CTRL_50_OHM (0x2 << 4) 447*4882a593Smuzhiyun #define AUX_TERMINAL_CTRL_65_OHM (0x3 << 4) 448*4882a593Smuzhiyun #define TX_CUR1_2X (0x1 << 2) 449*4882a593Smuzhiyun #define TX_CUR_16_MA (0x3 << 0) 450*4882a593Smuzhiyun 451*4882a593Smuzhiyun /* Definition for DPCD Register */ 452*4882a593Smuzhiyun #define DPCD_DPCD_REV (0x0000) 453*4882a593Smuzhiyun #define DPCD_MAX_LINK_RATE (0x0001) 454*4882a593Smuzhiyun #define DPCD_MAX_LANE_COUNT (0x0002) 455*4882a593Smuzhiyun #define DP_MAX_LANE_COUNT_MASK 0x1f 456*4882a593Smuzhiyun #define DP_TPS3_SUPPORTED (1 << 6) 457*4882a593Smuzhiyun #define DP_ENHANCED_FRAME_CAP (1 << 7) 458*4882a593Smuzhiyun 459*4882a593Smuzhiyun #define DPCD_LINK_BW_SET (0x0100) 460*4882a593Smuzhiyun #define DPCD_LANE_COUNT_SET (0x0101) 461*4882a593Smuzhiyun 462*4882a593Smuzhiyun #define DPCD_TRAINING_PATTERN_SET (0x0102) 463*4882a593Smuzhiyun #define DP_TRAINING_PATTERN_DISABLE 0 464*4882a593Smuzhiyun #define DP_TRAINING_PATTERN_1 1 465*4882a593Smuzhiyun #define DP_TRAINING_PATTERN_2 2 466*4882a593Smuzhiyun #define DP_TRAINING_PATTERN_3 3 467*4882a593Smuzhiyun #define DP_TRAINING_PATTERN_MASK 0x3 468*4882a593Smuzhiyun 469*4882a593Smuzhiyun #define DPCD_TRAINING_LANE0_SET (0x0103) 470*4882a593Smuzhiyun #define DP_TRAIN_VOLTAGE_SWING_MASK 0x3 471*4882a593Smuzhiyun #define DP_TRAIN_VOLTAGE_SWING_SHIFT 0 472*4882a593Smuzhiyun #define DP_TRAIN_MAX_SWING_REACHED (1 << 2) 473*4882a593Smuzhiyun #define DP_TRAIN_VOLTAGE_SWING_400 (0 << 0) 474*4882a593Smuzhiyun #define DP_TRAIN_VOLTAGE_SWING_600 (1 << 0) 475*4882a593Smuzhiyun #define DP_TRAIN_VOLTAGE_SWING_800 (2 << 0) 476*4882a593Smuzhiyun #define DP_TRAIN_VOLTAGE_SWING_1200 (3 << 0) 477*4882a593Smuzhiyun 478*4882a593Smuzhiyun #define DP_TRAIN_PRE_EMPHASIS_MASK (3 << 3) 479*4882a593Smuzhiyun #define DP_TRAIN_PRE_EMPHASIS_0 (0 << 3) 480*4882a593Smuzhiyun #define DP_TRAIN_PRE_EMPHASIS_3_5 (1 << 3) 481*4882a593Smuzhiyun #define DP_TRAIN_PRE_EMPHASIS_6 (2 << 3) 482*4882a593Smuzhiyun #define DP_TRAIN_PRE_EMPHASIS_9_5 (3 << 3) 483*4882a593Smuzhiyun 484*4882a593Smuzhiyun #define DP_TRAIN_PRE_EMPHASIS_SHIFT 3 485*4882a593Smuzhiyun #define DP_TRAIN_MAX_PRE_EMPHASIS_REACHED (1 << 5) 486*4882a593Smuzhiyun 487*4882a593Smuzhiyun #define DPCD_LANE0_1_STATUS (0x0202) 488*4882a593Smuzhiyun #define DPCD_LANE2_3_STATUS (0x0203) 489*4882a593Smuzhiyun #define DP_LANE_CR_DONE (1 << 0) 490*4882a593Smuzhiyun #define DP_LANE_CHANNEL_EQ_DONE (1 << 1) 491*4882a593Smuzhiyun #define DP_LANE_SYMBOL_LOCKED (1 << 2) 492*4882a593Smuzhiyun #define DP_CHANNEL_EQ_BITS (DP_LANE_CR_DONE |\ 493*4882a593Smuzhiyun DP_LANE_CHANNEL_EQ_DONE |\ 494*4882a593Smuzhiyun DP_LANE_SYMBOL_LOCKED) 495*4882a593Smuzhiyun 496*4882a593Smuzhiyun #define DPCD_LANE_ALIGN_STATUS_UPDATED (0x0204) 497*4882a593Smuzhiyun #define DP_INTERLANE_ALIGN_DONE (1 << 0) 498*4882a593Smuzhiyun #define DP_DOWNSTREAM_PORT_STATUS_CHANGED (1 << 6) 499*4882a593Smuzhiyun #define DP_LINK_STATUS_UPDATED (1 << 7) 500*4882a593Smuzhiyun 501*4882a593Smuzhiyun #define DPCD_ADJUST_REQUEST_LANE0_1 (0x0206) 502*4882a593Smuzhiyun #define DPCD_ADJUST_REQUEST_LANE2_3 (0x0207) 503*4882a593Smuzhiyun #define DP_ADJUST_VOLTAGE_SWING_LANE0_MASK 0x03 504*4882a593Smuzhiyun #define DP_ADJUST_VOLTAGE_SWING_LANE0_SHIFT 0 505*4882a593Smuzhiyun #define DP_ADJUST_PRE_EMPHASIS_LANE0_MASK 0x0c 506*4882a593Smuzhiyun #define DP_ADJUST_PRE_EMPHASIS_LANE0_SHIFT 2 507*4882a593Smuzhiyun #define DP_ADJUST_VOLTAGE_SWING_LANE1_MASK 0x30 508*4882a593Smuzhiyun #define DP_ADJUST_VOLTAGE_SWING_LANE1_SHIFT 4 509*4882a593Smuzhiyun #define DP_ADJUST_PRE_EMPHASIS_LANE1_MASK 0xc0 510*4882a593Smuzhiyun #define DP_ADJUST_PRE_EMPHASIS_LANE1_SHIFT 6 511*4882a593Smuzhiyun 512*4882a593Smuzhiyun #define DPCD_TEST_REQUEST (0x0218) 513*4882a593Smuzhiyun #define DPCD_TEST_RESPONSE (0x0260) 514*4882a593Smuzhiyun #define DPCD_TEST_EDID_CHECKSUM (0x0261) 515*4882a593Smuzhiyun #define DPCD_LINK_POWER_STATE (0x0600) 516*4882a593Smuzhiyun #define DP_SET_POWER_D0 0x1 517*4882a593Smuzhiyun #define DP_SET_POWER_D3 0x2 518*4882a593Smuzhiyun #define DP_SET_POWER_MASK 0x3 519*4882a593Smuzhiyun 520*4882a593Smuzhiyun #define AUX_ADDR_7_0(x) (((x) >> 0) & 0xff) 521*4882a593Smuzhiyun #define AUX_ADDR_15_8(x) (((x) >> 8) & 0xff) 522*4882a593Smuzhiyun #define AUX_ADDR_19_16(x) (((x) >> 16) & 0x0f) 523*4882a593Smuzhiyun 524*4882a593Smuzhiyun #define STREAM_ON_TIMEOUT 100 525*4882a593Smuzhiyun #define PLL_LOCK_TIMEOUT 10 526*4882a593Smuzhiyun #define DP_INIT_TRIES 10 527*4882a593Smuzhiyun 528*4882a593Smuzhiyun #define EDID_ADDR 0x50 529*4882a593Smuzhiyun #define EDID_LENGTH 0x80 530*4882a593Smuzhiyun #define EDID_HEADER 0x00 531*4882a593Smuzhiyun #define EDID_EXTENSION_FLAG 0x7e 532*4882a593Smuzhiyun 533*4882a593Smuzhiyun 534*4882a593Smuzhiyun enum dpcd_request { 535*4882a593Smuzhiyun DPCD_READ, 536*4882a593Smuzhiyun DPCD_WRITE, 537*4882a593Smuzhiyun }; 538*4882a593Smuzhiyun 539*4882a593Smuzhiyun enum dp_irq_type { 540*4882a593Smuzhiyun DP_IRQ_TYPE_HP_CABLE_IN, 541*4882a593Smuzhiyun DP_IRQ_TYPE_HP_CABLE_OUT, 542*4882a593Smuzhiyun DP_IRQ_TYPE_HP_CHANGE, 543*4882a593Smuzhiyun DP_IRQ_TYPE_UNKNOWN, 544*4882a593Smuzhiyun }; 545*4882a593Smuzhiyun 546*4882a593Smuzhiyun enum color_coefficient { 547*4882a593Smuzhiyun COLOR_YCBCR601, 548*4882a593Smuzhiyun COLOR_YCBCR709 549*4882a593Smuzhiyun }; 550*4882a593Smuzhiyun 551*4882a593Smuzhiyun enum dynamic_range { 552*4882a593Smuzhiyun VESA, 553*4882a593Smuzhiyun CEA 554*4882a593Smuzhiyun }; 555*4882a593Smuzhiyun 556*4882a593Smuzhiyun enum clock_recovery_m_value_type { 557*4882a593Smuzhiyun CALCULATED_M, 558*4882a593Smuzhiyun REGISTER_M 559*4882a593Smuzhiyun }; 560*4882a593Smuzhiyun 561*4882a593Smuzhiyun enum video_timing_recognition_type { 562*4882a593Smuzhiyun VIDEO_TIMING_FROM_CAPTURE, 563*4882a593Smuzhiyun VIDEO_TIMING_FROM_REGISTER 564*4882a593Smuzhiyun }; 565*4882a593Smuzhiyun 566*4882a593Smuzhiyun enum pattern_set { 567*4882a593Smuzhiyun PRBS7, 568*4882a593Smuzhiyun D10_2, 569*4882a593Smuzhiyun TRAINING_PTN1, 570*4882a593Smuzhiyun TRAINING_PTN2, 571*4882a593Smuzhiyun DP_NONE 572*4882a593Smuzhiyun }; 573*4882a593Smuzhiyun 574*4882a593Smuzhiyun enum color_space { 575*4882a593Smuzhiyun CS_RGB, 576*4882a593Smuzhiyun CS_YCBCR422, 577*4882a593Smuzhiyun CS_YCBCR444 578*4882a593Smuzhiyun }; 579*4882a593Smuzhiyun 580*4882a593Smuzhiyun enum color_depth { 581*4882a593Smuzhiyun COLOR_6, 582*4882a593Smuzhiyun COLOR_8, 583*4882a593Smuzhiyun COLOR_10, 584*4882a593Smuzhiyun COLOR_12 585*4882a593Smuzhiyun }; 586*4882a593Smuzhiyun 587*4882a593Smuzhiyun enum link_rate_type { 588*4882a593Smuzhiyun LINK_RATE_1_62GBPS = 0x06, 589*4882a593Smuzhiyun LINK_RATE_2_70GBPS = 0x0a 590*4882a593Smuzhiyun }; 591*4882a593Smuzhiyun 592*4882a593Smuzhiyun enum link_lane_count_type { 593*4882a593Smuzhiyun LANE_CNT1 = 1, 594*4882a593Smuzhiyun LANE_CNT2 = 2, 595*4882a593Smuzhiyun LANE_CNT4 = 4 596*4882a593Smuzhiyun }; 597*4882a593Smuzhiyun 598*4882a593Smuzhiyun enum link_training_state { 599*4882a593Smuzhiyun LT_START, 600*4882a593Smuzhiyun LT_CLK_RECOVERY, 601*4882a593Smuzhiyun LT_EQ_TRAINING, 602*4882a593Smuzhiyun FINISHED, 603*4882a593Smuzhiyun FAILED 604*4882a593Smuzhiyun }; 605*4882a593Smuzhiyun 606*4882a593Smuzhiyun enum voltage_swing_level { 607*4882a593Smuzhiyun VOLTAGE_LEVEL_0, 608*4882a593Smuzhiyun VOLTAGE_LEVEL_1, 609*4882a593Smuzhiyun VOLTAGE_LEVEL_2, 610*4882a593Smuzhiyun VOLTAGE_LEVEL_3, 611*4882a593Smuzhiyun }; 612*4882a593Smuzhiyun 613*4882a593Smuzhiyun enum pre_emphasis_level { 614*4882a593Smuzhiyun PRE_EMPHASIS_LEVEL_0, 615*4882a593Smuzhiyun PRE_EMPHASIS_LEVEL_1, 616*4882a593Smuzhiyun PRE_EMPHASIS_LEVEL_2, 617*4882a593Smuzhiyun PRE_EMPHASIS_LEVEL_3, 618*4882a593Smuzhiyun }; 619*4882a593Smuzhiyun 620*4882a593Smuzhiyun enum analog_power_block { 621*4882a593Smuzhiyun AUX_BLOCK, 622*4882a593Smuzhiyun CH0_BLOCK, 623*4882a593Smuzhiyun CH1_BLOCK, 624*4882a593Smuzhiyun CH2_BLOCK, 625*4882a593Smuzhiyun CH3_BLOCK, 626*4882a593Smuzhiyun ANALOG_TOTAL, 627*4882a593Smuzhiyun POWER_ALL 628*4882a593Smuzhiyun }; 629*4882a593Smuzhiyun 630*4882a593Smuzhiyun struct link_train { 631*4882a593Smuzhiyun unsigned char revision; 632*4882a593Smuzhiyun u8 link_rate; 633*4882a593Smuzhiyun u8 lane_count; 634*4882a593Smuzhiyun }; 635*4882a593Smuzhiyun 636*4882a593Smuzhiyun #endif 637