1*ab3bc873SGuochun Huang /* SPDX-License-Identifier: GPL-2.0 */ 2*ab3bc873SGuochun Huang /* 3*ab3bc873SGuochun Huang * Copyright (c) 2020 Rockchip Electronics Co. Ltd. 4*ab3bc873SGuochun Huang * 5*ab3bc873SGuochun Huang * Author: Guochun Huang <hero.huang@rock-chips.com> 6*ab3bc873SGuochun Huang */ 7*ab3bc873SGuochun Huang 8*ab3bc873SGuochun Huang #ifndef RK628_DSI_H 9*ab3bc873SGuochun Huang #define RK628_DSI_H 10*ab3bc873SGuochun Huang #include "rk628.h" 11*ab3bc873SGuochun Huang 12*ab3bc873SGuochun Huang #define DSI0_BASE 0x50000 13*ab3bc873SGuochun Huang #define DSI1_BASE 0x60000 14*ab3bc873SGuochun Huang 15*ab3bc873SGuochun Huang #define DSI_VERSION 0x0000 16*ab3bc873SGuochun Huang #define DSI_PWR_UP 0x0004 17*ab3bc873SGuochun Huang #define RESET 0 18*ab3bc873SGuochun Huang #define POWER_UP BIT(0) 19*ab3bc873SGuochun Huang #define DSI_CLKMGR_CFG 0x0008 20*ab3bc873SGuochun Huang #define TO_CLK_DIVISION(x) UPDATE(x, 15, 8) 21*ab3bc873SGuochun Huang #define TX_ESC_CLK_DIVISION(x) UPDATE(x, 7, 0) 22*ab3bc873SGuochun Huang #define DSI_DPI_VCID 0x000c 23*ab3bc873SGuochun Huang #define DPI_VID(x) UPDATE(x, 1, 0) 24*ab3bc873SGuochun Huang #define DSI_DPI_COLOR_CODING 0x0010 25*ab3bc873SGuochun Huang #define LOOSELY18_EN BIT(8) 26*ab3bc873SGuochun Huang #define DPI_COLOR_CODING(x) UPDATE(x, 3, 0) 27*ab3bc873SGuochun Huang #define DSI_DPI_CFG_POL 0x0014 28*ab3bc873SGuochun Huang #define COLORM_ACTIVE_LOW BIT(4) 29*ab3bc873SGuochun Huang #define SHUTD_ACTIVE_LOW BIT(3) 30*ab3bc873SGuochun Huang #define HSYNC_ACTIVE_LOW BIT(2) 31*ab3bc873SGuochun Huang #define VSYNC_ACTIVE_LOW BIT(1) 32*ab3bc873SGuochun Huang #define DATAEN_ACTIVE_LOW BIT(0) 33*ab3bc873SGuochun Huang #define DSI_DPI_LP_CMD_TIM 0x0018 34*ab3bc873SGuochun Huang #define OUTVACT_LPCMD_TIME(x) UPDATE(x, 23, 16) 35*ab3bc873SGuochun Huang #define INVACT_LPCMD_TIME(x) UPDATE(x, 7, 0) 36*ab3bc873SGuochun Huang #define DSI_PCKHDL_CFG 0x002c 37*ab3bc873SGuochun Huang #define CRC_RX_EN BIT(4) 38*ab3bc873SGuochun Huang #define ECC_RX_EN BIT(3) 39*ab3bc873SGuochun Huang #define BTA_EN BIT(2) 40*ab3bc873SGuochun Huang #define EOTP_RX_EN BIT(1) 41*ab3bc873SGuochun Huang #define EOTP_TX_EN BIT(0) 42*ab3bc873SGuochun Huang #define DSI_GEN_VCID 0x0030 43*ab3bc873SGuochun Huang #define DSI_MODE_CFG 0x0034 44*ab3bc873SGuochun Huang #define CMD_VIDEO_MODE(x) UPDATE(x, 0, 0) 45*ab3bc873SGuochun Huang #define DSI_VID_MODE_CFG 0x0038 46*ab3bc873SGuochun Huang #define VPG_EN BIT(16) 47*ab3bc873SGuochun Huang #define LP_CMD_EN BIT(15) 48*ab3bc873SGuochun Huang #define FRAME_BTA_ACK_EN BIT(14) 49*ab3bc873SGuochun Huang #define LP_HFP_EN BIT(13) 50*ab3bc873SGuochun Huang #define LP_HBP_EN BIT(12) 51*ab3bc873SGuochun Huang #define LP_VACT_EN BIT(11) 52*ab3bc873SGuochun Huang #define LP_VFP_EN BIT(10) 53*ab3bc873SGuochun Huang #define LP_VBP_EN BIT(9) 54*ab3bc873SGuochun Huang #define LP_VSA_EN BIT(8) 55*ab3bc873SGuochun Huang #define VID_MODE_TYPE(x) UPDATE(x, 1, 0) 56*ab3bc873SGuochun Huang #define DSI_VID_PKT_SIZE 0x003c 57*ab3bc873SGuochun Huang #define VID_PKT_SIZE(x) UPDATE(x, 13, 0) 58*ab3bc873SGuochun Huang #define DSI_VID_NUM_CHUNKS 0x0040 59*ab3bc873SGuochun Huang #define DSI_VID_NULL_SIZE 0x0044 60*ab3bc873SGuochun Huang #define DSI_VID_HSA_TIME 0x0048 61*ab3bc873SGuochun Huang #define VID_HSA_TIME(x) UPDATE(x, 11, 0) 62*ab3bc873SGuochun Huang #define DSI_VID_HBP_TIME 0x004c 63*ab3bc873SGuochun Huang #define VID_HBP_TIME(x) UPDATE(x, 11, 0) 64*ab3bc873SGuochun Huang #define DSI_VID_HLINE_TIME 0x0050 65*ab3bc873SGuochun Huang #define VID_HLINE_TIME(x) UPDATE(x, 14, 0) 66*ab3bc873SGuochun Huang #define DSI_VID_VSA_LINES 0x0054 67*ab3bc873SGuochun Huang #define VSA_LINES(x) UPDATE(x, 9, 0) 68*ab3bc873SGuochun Huang #define DSI_VID_VBP_LINES 0x0058 69*ab3bc873SGuochun Huang #define VBP_LINES(x) UPDATE(x, 9, 0) 70*ab3bc873SGuochun Huang #define DSI_VID_VFP_LINES 0x005c 71*ab3bc873SGuochun Huang #define VFP_LINES(x) UPDATE(x, 9, 0) 72*ab3bc873SGuochun Huang #define DSI_VID_VACTIVE_LINES 0x0060 73*ab3bc873SGuochun Huang #define V_ACTIVE_LINES(x) UPDATE(x, 13, 0) 74*ab3bc873SGuochun Huang #define DSI_EDPI_CMD_SIZE 0x0064 75*ab3bc873SGuochun Huang #define EDPI_ALLOWED_CMD_SIZE(x) UPDATE(x, 15, 0) 76*ab3bc873SGuochun Huang #define DSI_CMD_MODE_CFG 0x0068 77*ab3bc873SGuochun Huang #define MAX_RD_PKT_SIZE BIT(24) 78*ab3bc873SGuochun Huang #define DCS_LW_TX BIT(19) 79*ab3bc873SGuochun Huang #define DCS_SR_0P_TX BIT(18) 80*ab3bc873SGuochun Huang #define DCS_SW_1P_TX BIT(17) 81*ab3bc873SGuochun Huang #define DCS_SW_0P_TX BIT(16) 82*ab3bc873SGuochun Huang #define GEN_LW_TX BIT(14) 83*ab3bc873SGuochun Huang #define GEN_SR_2P_TX BIT(13) 84*ab3bc873SGuochun Huang #define GEN_SR_1P_TX BIT(12) 85*ab3bc873SGuochun Huang #define GEN_SR_0P_TX BIT(11) 86*ab3bc873SGuochun Huang #define GEN_SW_2P_TX BIT(10) 87*ab3bc873SGuochun Huang #define GEN_SW_1P_TX BIT(9) 88*ab3bc873SGuochun Huang #define GEN_SW_0P_TX BIT(8) 89*ab3bc873SGuochun Huang #define ACK_RQST_EN BIT(1) 90*ab3bc873SGuochun Huang #define TEAR_FX_EN BIT(0) 91*ab3bc873SGuochun Huang #define DSI_GEN_HDR 0x006c 92*ab3bc873SGuochun Huang #define GEN_WC_MSBYTE(x) UPDATE(x, 23, 16) 93*ab3bc873SGuochun Huang #define GEN_WC_LSBYTE(x) UPDATE(x, 15, 8) 94*ab3bc873SGuochun Huang #define GEN_VC(x) UPDATE(x, 7, 6) 95*ab3bc873SGuochun Huang #define GEN_DT(x) UPDATE(x, 5, 0) 96*ab3bc873SGuochun Huang #define DSI_GEN_PLD_DATA 0x0070 97*ab3bc873SGuochun Huang #define DSI_CMD_PKT_STATUS 0x0074 98*ab3bc873SGuochun Huang #define GEN_RD_CMD_BUSY BIT(6) 99*ab3bc873SGuochun Huang #define GEN_PLD_R_FULL BIT(5) 100*ab3bc873SGuochun Huang #define GEN_PLD_R_EMPTY BIT(4) 101*ab3bc873SGuochun Huang #define GEN_PLD_W_FULL BIT(3) 102*ab3bc873SGuochun Huang #define GEN_PLD_W_EMPTY BIT(2) 103*ab3bc873SGuochun Huang #define GEN_CMD_FULL BIT(1) 104*ab3bc873SGuochun Huang #define GEN_CMD_EMPTY BIT(0) 105*ab3bc873SGuochun Huang #define DSI_TO_CNT_CFG 0x0078 106*ab3bc873SGuochun Huang #define HSTX_TO_CNT(x) UPDATE(x, 31, 16) 107*ab3bc873SGuochun Huang #define LPRX_TO_CNT(x) UPDATE(x, 15, 0) 108*ab3bc873SGuochun Huang #define DSI_HS_RD_TO_CNT 0x007c 109*ab3bc873SGuochun Huang #define HS_RD_TO_CNT(x) UPDATE(x, 15, 0) 110*ab3bc873SGuochun Huang #define DSI_LP_RD_TO_CNT 0x0080 111*ab3bc873SGuochun Huang #define LP_RD_TO_CNT(x) UPDATE(x, 15, 0) 112*ab3bc873SGuochun Huang #define DSI_HS_WR_TO_CNT 0x0084 113*ab3bc873SGuochun Huang #define HS_WR_TO_CNT(x) UPDATE(x, 15, 0) 114*ab3bc873SGuochun Huang #define DSI_LP_WR_TO_CNT 0x0088 115*ab3bc873SGuochun Huang #define LP_WR_TO_CNT(x) UPDATE(x, 15, 0) 116*ab3bc873SGuochun Huang #define DSI_BTA_TO_CNT 0x008c 117*ab3bc873SGuochun Huang #define BTA_TO_CNT(x) UPDATE(x, 15, 0) 118*ab3bc873SGuochun Huang #define DSI_SDF_3D 0x0090 119*ab3bc873SGuochun Huang #define DSI_LPCLK_CTRL 0x0094 120*ab3bc873SGuochun Huang #define AUTO_CLKLANE_CTRL BIT(1) 121*ab3bc873SGuochun Huang #define PHY_TXREQUESTCLKHS BIT(0) 122*ab3bc873SGuochun Huang #define DSI_PHY_TMR_LPCLK_CFG 0x0098 123*ab3bc873SGuochun Huang #define PHY_CLKHS2LP_TIME(x) UPDATE(x, 25, 16) 124*ab3bc873SGuochun Huang #define PHY_CLKLP2HS_TIME(x) UPDATE(x, 9, 0) 125*ab3bc873SGuochun Huang #define DSI_PHY_TMR_CFG 0x009c 126*ab3bc873SGuochun Huang #define PHY_HS2LP_TIME(x) UPDATE(x, 31, 24) 127*ab3bc873SGuochun Huang #define PHY_LP2HS_TIME(x) UPDATE(x, 23, 16) 128*ab3bc873SGuochun Huang #define MAX_RD_TIME(x) UPDATE(x, 14, 0) 129*ab3bc873SGuochun Huang #define DSI_PHY_RSTZ 0x00a0 130*ab3bc873SGuochun Huang #define PHY_FORCEPLL BIT(3) 131*ab3bc873SGuochun Huang #define PHY_ENABLECLK BIT(2) 132*ab3bc873SGuochun Huang #define PHY_RSTZ BIT(1) 133*ab3bc873SGuochun Huang #define PHY_SHUTDOWNZ BIT(0) 134*ab3bc873SGuochun Huang #define DSI_PHY_IF_CFG 0x00a4 135*ab3bc873SGuochun Huang #define PHY_STOP_WAIT_TIME(x) UPDATE(x, 15, 8) 136*ab3bc873SGuochun Huang #define N_LANES(x) UPDATE(x, 1, 0) 137*ab3bc873SGuochun Huang #define DSI_PHY_STATUS 0x00b0 138*ab3bc873SGuochun Huang #define PHY_STOPSTATE3LANE BIT(11) 139*ab3bc873SGuochun Huang #define PHY_STOPSTATE2LANE BIT(9) 140*ab3bc873SGuochun Huang #define PHY_STOPSTATE1LANE BIT(7) 141*ab3bc873SGuochun Huang #define PHY_STOPSTATE0LANE BIT(4) 142*ab3bc873SGuochun Huang #define PHY_STOPSTATECLKLANE BIT(2) 143*ab3bc873SGuochun Huang #define PHY_LOCK BIT(0) 144*ab3bc873SGuochun Huang #define PHY_STOPSTATELANE (PHY_STOPSTATE0LANE | \ 145*ab3bc873SGuochun Huang PHY_STOPSTATECLKLANE) 146*ab3bc873SGuochun Huang #define DSI_INT_ST0 0x00bc 147*ab3bc873SGuochun Huang #define DSI_INT_ST1 0x00c0 148*ab3bc873SGuochun Huang #define DSI_INT_MSK0 0x00c4 149*ab3bc873SGuochun Huang #define DSI_INT_MSK1 0x00c8 150*ab3bc873SGuochun Huang #define DSI_INT_FORCE0 0x00d8 151*ab3bc873SGuochun Huang #define DSI_INT_FORCE1 0x00dc 152*ab3bc873SGuochun Huang #define DSI_MAX_REGISTER DSI_INT_FORCE1 153*ab3bc873SGuochun Huang 154*ab3bc873SGuochun Huang int rk628_dsi_parse(struct rk628 *rk628, ofnode dsi_np); 155*ab3bc873SGuochun Huang void rk628_mipi_dsi_pre_enable(struct rk628 *rk628); 156*ab3bc873SGuochun Huang void rk628_mipi_dsi_enable(struct rk628 *rk628); 157*ab3bc873SGuochun Huang void rk628_dsi_disable(struct rk628 *rk628); 158*ab3bc873SGuochun Huang void rk628_mipi_dsi_create_debugfs_file(struct rk628 *rk628); 159*ab3bc873SGuochun Huang #endif 160