xref: /openbmc/u-boot/arch/arm/include/asm/arch-rockchip/rockchip_mipi_dsi.h (revision 83d290c56fab2d38cd1ab4c4cc7099559c1d5046)
1*83d290c5STom Rini /* SPDX-License-Identifier: GPL-2.0+ */
21c398404SEric Gao /*
31c398404SEric Gao  * Copyright (C) 2017 Fuzhou Rockchip Electronics Co., Ltd
41c398404SEric Gao  * author: Eric Gao <eric.gao@rock-chips.com>
51c398404SEric Gao  */
61c398404SEric Gao 
71c398404SEric Gao #ifndef ROCKCHIP_MIPI_DSI_H
81c398404SEric Gao #define ROCKCHIP_MIPI_DSI_H
91c398404SEric Gao 
101c398404SEric Gao /*
111c398404SEric Gao  * All these mipi controller register declaration provide reg address offset,
121c398404SEric Gao  * bits width, bit offset for a specified register bits. With these message, we
131c398404SEric Gao  * can set or clear every bits individually for a 32bit widthregister. We use
141c398404SEric Gao  * DSI_HOST_BITS macro definition to combinat these message using the following
151c398404SEric Gao  * format: val(32bit) = addr(16bit) | width(8bit) | offest(8bit)
161c398404SEric Gao  * For example:
171c398404SEric Gao  *    #define SHUTDOWNZ           DSI_HOST_BITS(0x004, 1, 0)
181c398404SEric Gao  * means SHUTDOWNZ is a signal reg bit with bit offset qual 0,and it's reg addr
191c398404SEric Gao  * offset is 0x004.The conbinat result  = (0x004 << 16) | (1 << 8) | 0
201c398404SEric Gao  */
211c398404SEric Gao #define ADDR_SHIFT 16
221c398404SEric Gao #define BITS_SHIFT 8
231c398404SEric Gao #define OFFSET_SHIFT 0
241c398404SEric Gao #define DSI_HOST_BITS(addr, bits, bit_offset) \
251c398404SEric Gao ((addr << ADDR_SHIFT) | (bits << BITS_SHIFT) | (bit_offset << OFFSET_SHIFT))
261c398404SEric Gao 
271c398404SEric Gao /* DWC_DSI_VERSION_0x3133302A */
281c398404SEric Gao #define VERSION				DSI_HOST_BITS(0x000, 32, 0)
291c398404SEric Gao #define SHUTDOWNZ			DSI_HOST_BITS(0x004, 1, 0)
301c398404SEric Gao #define TO_CLK_DIVISION		DSI_HOST_BITS(0x008, 8, 8)
311c398404SEric Gao #define TX_ESC_CLK_DIVISION	DSI_HOST_BITS(0x008, 8, 0)
321c398404SEric Gao #define DPI_VCID			DSI_HOST_BITS(0x00c, 2, 0)
331c398404SEric Gao #define EN18_LOOSELY		DSI_HOST_BITS(0x010, 1, 8)
341c398404SEric Gao #define DPI_COLOR_CODING	DSI_HOST_BITS(0x010, 4, 0)
351c398404SEric Gao #define COLORM_ACTIVE_LOW	DSI_HOST_BITS(0x014, 1, 4)
361c398404SEric Gao #define SHUTD_ACTIVE_LOW	DSI_HOST_BITS(0x014, 1, 3)
371c398404SEric Gao #define HSYNC_ACTIVE_LOW	DSI_HOST_BITS(0x014, 1, 2)
381c398404SEric Gao #define VSYNC_ACTIVE_LOW	DSI_HOST_BITS(0x014, 1, 1)
391c398404SEric Gao #define DATAEN_ACTIVE_LOW	DSI_HOST_BITS(0x014, 1, 0)
401c398404SEric Gao #define OUTVACT_LPCMD_TIME	DSI_HOST_BITS(0x018, 8, 16)
411c398404SEric Gao #define INVACT_LPCMD_TIME	DSI_HOST_BITS(0x018, 8, 0)
421c398404SEric Gao #define CRC_RX_EN			DSI_HOST_BITS(0x02c, 1, 4)
431c398404SEric Gao #define ECC_RX_EN			DSI_HOST_BITS(0x02c, 1, 3)
441c398404SEric Gao #define BTA_EN				DSI_HOST_BITS(0x02c, 1, 2)
451c398404SEric Gao #define EOTP_RX_EN			DSI_HOST_BITS(0x02c, 1, 1)
461c398404SEric Gao #define EOTP_TX_EN			DSI_HOST_BITS(0x02c, 1, 0)
471c398404SEric Gao #define GEN_VID_RX			DSI_HOST_BITS(0x030, 2, 0)
481c398404SEric Gao #define CMD_VIDEO_MODE		DSI_HOST_BITS(0x034, 1, 0)
491c398404SEric Gao #define VPG_ORIENTATION		DSI_HOST_BITS(0x038, 1, 24)
501c398404SEric Gao #define VPG_MODE			DSI_HOST_BITS(0x038, 1, 20)
511c398404SEric Gao #define VPG_EN				DSI_HOST_BITS(0x038, 1, 16)
521c398404SEric Gao #define LP_CMD_EN			DSI_HOST_BITS(0x038, 1, 15)
531c398404SEric Gao #define FRAME_BTA_ACK_EN	DSI_HOST_BITS(0x038, 1, 14)
541c398404SEric Gao #define LP_HFP_EN			DSI_HOST_BITS(0x038, 1, 13)
551c398404SEric Gao #define LP_HBP_EN			DSI_HOST_BITS(0x038, 1, 12)
561c398404SEric Gao #define LP_VACT_EN			DSI_HOST_BITS(0x038, 1, 11)
571c398404SEric Gao #define LP_VFP_EN			DSI_HOST_BITS(0x038, 1, 10)
581c398404SEric Gao #define LP_VBP_EN			DSI_HOST_BITS(0x038, 1, 9)
591c398404SEric Gao #define LP_VSA_EN			DSI_HOST_BITS(0x038, 1, 8)
601c398404SEric Gao #define VID_MODE_TYPE		DSI_HOST_BITS(0x038, 2, 0)
611c398404SEric Gao #define VID_PKT_SIZE		DSI_HOST_BITS(0x03c, 14, 0)
621c398404SEric Gao #define NUM_CHUNKS			DSI_HOST_BITS(0x040, 13, 0)
631c398404SEric Gao #define NULL_PKT_SIZE		DSI_HOST_BITS(0x044, 13, 0)
641c398404SEric Gao #define VID_HSA_TIME		DSI_HOST_BITS(0x048, 12, 0)
651c398404SEric Gao #define VID_HBP_TIME		DSI_HOST_BITS(0x04c, 12, 0)
661c398404SEric Gao #define VID_HLINE_TIME		DSI_HOST_BITS(0x050, 15, 0)
671c398404SEric Gao #define VID_VSA_LINES		DSI_HOST_BITS(0x054, 10, 0)
681c398404SEric Gao #define VID_VBP_LINES		DSI_HOST_BITS(0x058, 10, 0)
691c398404SEric Gao #define VID_VFP_LINES		DSI_HOST_BITS(0x05c, 10, 0)
701c398404SEric Gao #define VID_ACTIVE_LINES	DSI_HOST_BITS(0x060, 14, 0)
711c398404SEric Gao #define EDPI_CMD_SIZE		DSI_HOST_BITS(0x064, 16, 0)
721c398404SEric Gao #define MAX_RD_PKT_SIZE		DSI_HOST_BITS(0x068, 1, 24)
731c398404SEric Gao #define DCS_LW_TX			DSI_HOST_BITS(0x068, 1, 19)
741c398404SEric Gao #define DCS_SR_0P_TX		DSI_HOST_BITS(0x068, 1, 18)
751c398404SEric Gao #define DCS_SW_1P_TX		DSI_HOST_BITS(0x068, 1, 17)
761c398404SEric Gao #define DCS_SW_0P_TX		DSI_HOST_BITS(0x068, 1, 16)
771c398404SEric Gao #define GEN_LW_TX			DSI_HOST_BITS(0x068, 1, 14)
781c398404SEric Gao #define GEN_SR_2P_TX		DSI_HOST_BITS(0x068, 1, 13)
791c398404SEric Gao #define GEN_SR_1P_TX		DSI_HOST_BITS(0x068, 1, 12)
801c398404SEric Gao #define GEN_SR_0P_TX		DSI_HOST_BITS(0x068, 1, 11)
811c398404SEric Gao #define GEN_SW_2P_TX		DSI_HOST_BITS(0x068, 1, 10)
821c398404SEric Gao #define GEN_SW_1P_TX		DSI_HOST_BITS(0x068, 1, 9)
831c398404SEric Gao #define GEN_SW_0P_TX		DSI_HOST_BITS(0x068, 1, 8)
841c398404SEric Gao #define ACK_RQST_EN			DSI_HOST_BITS(0x068, 1, 1)
851c398404SEric Gao #define TEAR_FX_EN			DSI_HOST_BITS(0x068, 1, 0)
861c398404SEric Gao #define GEN_WC_MSBYTE		DSI_HOST_BITS(0x06c, 14, 16)
871c398404SEric Gao #define GEN_WC_LSBYTE		DSI_HOST_BITS(0x06c, 8, 8)
881c398404SEric Gao #define GEN_VC				DSI_HOST_BITS(0x06c, 2, 6)
891c398404SEric Gao #define GEN_DT				DSI_HOST_BITS(0x06c, 6, 0)
901c398404SEric Gao #define GEN_PLD_DATA		DSI_HOST_BITS(0x070, 32, 0)
911c398404SEric Gao #define GEN_RD_CMD_BUSY		DSI_HOST_BITS(0x074, 1, 6)
921c398404SEric Gao #define GEN_PLD_R_FULL		DSI_HOST_BITS(0x074, 1, 5)
931c398404SEric Gao #define GEN_PLD_R_EMPTY		DSI_HOST_BITS(0x074, 1, 4)
941c398404SEric Gao #define GEN_PLD_W_FULL		DSI_HOST_BITS(0x074, 1, 3)
951c398404SEric Gao #define GEN_PLD_W_EMPTY		DSI_HOST_BITS(0x074, 1, 2)
961c398404SEric Gao #define GEN_CMD_FULL		DSI_HOST_BITS(0x074, 1, 1)
971c398404SEric Gao #define GEN_CMD_EMPTY		DSI_HOST_BITS(0x074, 1, 0)
981c398404SEric Gao #define HSTX_TO_CNT			DSI_HOST_BITS(0x078, 16, 16)
991c398404SEric Gao #define LPRX_TO_CNT			DSI_HOST_BITS(0x078, 16, 0)
1001c398404SEric Gao #define HS_RD_TO_CNT		DSI_HOST_BITS(0x07c, 16, 0)
1011c398404SEric Gao #define LP_RD_TO_CNT		DSI_HOST_BITS(0x080, 16, 0)
1021c398404SEric Gao #define PRESP_TO_MODE		DSI_HOST_BITS(0x084, 1, 24)
1031c398404SEric Gao #define HS_WR_TO_CNT		DSI_HOST_BITS(0x084, 16, 0)
1041c398404SEric Gao #define LP_WR_TO_CNT		DSI_HOST_BITS(0x088, 16, 0)
1051c398404SEric Gao #define BTA_TO_CNT			DSI_HOST_BITS(0x08c, 16, 0)
1061c398404SEric Gao #define AUTO_CLKLANE_CTRL	DSI_HOST_BITS(0x094, 1, 1)
1071c398404SEric Gao #define PHY_TXREQUESTCLKHS	DSI_HOST_BITS(0x094, 1, 0)
1081c398404SEric Gao #define PHY_HS2LP_TIME_CLK_LANE	DSI_HOST_BITS(0x098, 10, 16)
1091c398404SEric Gao #define PHY_HS2HS_TIME_CLK_LANE	DSI_HOST_BITS(0x098, 10, 0)
1101c398404SEric Gao #define PHY_HS2LP_TIME		DSI_HOST_BITS(0x09c, 8, 24)
1111c398404SEric Gao #define PHY_LP2HS_TIME		DSI_HOST_BITS(0x09c, 8, 16)
1121c398404SEric Gao #define MAX_RD_TIME			DSI_HOST_BITS(0x09c, 15, 0)
1131c398404SEric Gao #define PHY_FORCEPLL		DSI_HOST_BITS(0x0a0, 1, 3)
1141c398404SEric Gao #define PHY_ENABLECLK		DSI_HOST_BITS(0x0a0, 1, 2)
1151c398404SEric Gao #define PHY_RSTZ			DSI_HOST_BITS(0x0a0, 1, 1)
1161c398404SEric Gao #define PHY_SHUTDOWNZ		DSI_HOST_BITS(0x0a0, 1, 0)
1171c398404SEric Gao #define PHY_STOP_WAIT_TIME	DSI_HOST_BITS(0x0a4, 8, 8)
1181c398404SEric Gao #define N_LANES				DSI_HOST_BITS(0x0a4, 2, 0)
1191c398404SEric Gao #define PHY_TXEXITULPSLAN	DSI_HOST_BITS(0x0a8, 1, 3)
1201c398404SEric Gao #define PHY_TXREQULPSLAN	DSI_HOST_BITS(0x0a8, 1, 2)
1211c398404SEric Gao #define PHY_TXEXITULPSCLK	DSI_HOST_BITS(0x0a8, 1, 1)
1221c398404SEric Gao #define PHY_TXREQULPSCLK	DSI_HOST_BITS(0x0a8, 1, 0)
1231c398404SEric Gao #define PHY_TX_TRIGGERS		DSI_HOST_BITS(0x0ac, 4, 0)
1241c398404SEric Gao #define PHYSTOPSTATECLKLANE	DSI_HOST_BITS(0x0b0, 1, 2)
1251c398404SEric Gao #define PHYLOCK				DSI_HOST_BITS(0x0b0, 1, 0)
1261c398404SEric Gao #define PHY_TESTCLK			DSI_HOST_BITS(0x0b4, 1, 1)
1271c398404SEric Gao #define PHY_TESTCLR			DSI_HOST_BITS(0x0b4, 1, 0)
1281c398404SEric Gao #define PHY_TESTEN			DSI_HOST_BITS(0x0b8, 1, 16)
1291c398404SEric Gao #define PHY_TESTDOUT		DSI_HOST_BITS(0x0b8, 8, 8)
1301c398404SEric Gao #define PHY_TESTDIN			DSI_HOST_BITS(0x0b8, 8, 0)
1311c398404SEric Gao #define PHY_TEST_CTRL1		DSI_HOST_BITS(0x0b8, 17, 0)
1321c398404SEric Gao #define PHY_TEST_CTRL0		DSI_HOST_BITS(0x0b4, 2, 0)
1331c398404SEric Gao #define INT_ST0				DSI_HOST_BITS(0x0bc, 21, 0)
1341c398404SEric Gao #define INT_ST1				DSI_HOST_BITS(0x0c0, 18, 0)
1351c398404SEric Gao #define INT_MKS0			DSI_HOST_BITS(0x0c4, 21, 0)
1361c398404SEric Gao #define INT_MKS1			DSI_HOST_BITS(0x0c8, 18, 0)
1371c398404SEric Gao #define INT_FORCE0			DSI_HOST_BITS(0x0d8, 21, 0)
1381c398404SEric Gao #define INT_FORCE1			DSI_HOST_BITS(0x0dc, 18, 0)
1391c398404SEric Gao 
1401c398404SEric Gao #define CODE_HS_RX_CLOCK	0x34
1411c398404SEric Gao #define CODE_HS_RX_LANE0	0x44
1421c398404SEric Gao #define CODE_HS_RX_LANE1	0x54
1431c398404SEric Gao #define CODE_HS_RX_LANE2	0x84
1441c398404SEric Gao #define CODE_HS_RX_LANE3	0x94
1451c398404SEric Gao 
1461c398404SEric Gao #define CODE_PLL_VCORANGE_VCOCAP	0x10
1471c398404SEric Gao #define CODE_PLL_CPCTRL	0x11
1481c398404SEric Gao #define CODE_PLL_LPF_CP 0x12
1491c398404SEric Gao #define CODE_PLL_INPUT_DIV_RAT	0x17
1501c398404SEric Gao #define CODE_PLL_LOOP_DIV_RAT	0x18
1511c398404SEric Gao #define CODE_PLL_INPUT_LOOP_DIV_RAT	0x19
1521c398404SEric Gao #define CODE_BANDGAP_BIAS_CTRL	0x20
1531c398404SEric Gao #define CODE_TERMINATION_CTRL	0x21
1541c398404SEric Gao #define CODE_AFE_BIAS_BANDGAP_ANOLOG 0x22
1551c398404SEric Gao 
1561c398404SEric Gao #define CODE_HSTXDATALANEREQUSETSTATETIME	0x70
1571c398404SEric Gao #define CODE_HSTXDATALANEPREPARESTATETIME	0x71
1581c398404SEric Gao #define CODE_HSTXDATALANEHSZEROSTATETIME	0x72
1591c398404SEric Gao 
1601c398404SEric Gao /* Transmission mode between vop and MIPI controller */
1611c398404SEric Gao enum vid_mode_type_t {
1621c398404SEric Gao 	NON_BURST_SYNC_PLUSE = 0,
1631c398404SEric Gao 	NON_BURST_SYNC_EVENT,
1641c398404SEric Gao 	BURST_MODE,
1651c398404SEric Gao };
1661c398404SEric Gao 
1671c398404SEric Gao enum cmd_video_mode {
1681c398404SEric Gao 	VIDEO_MODE = 0,
1691c398404SEric Gao 	CMD_MODE,
1701c398404SEric Gao };
1711c398404SEric Gao 
1721c398404SEric Gao /* Indicate MIPI DSI color mode */
1731c398404SEric Gao enum dpi_color_coding {
1741c398404SEric Gao 	DPI_16BIT_CFG_1 = 0,
1751c398404SEric Gao 	DPI_16BIT_CFG_2,
1761c398404SEric Gao 	DPI_16BIT_CFG_3,
1771c398404SEric Gao 	DPI_18BIT_CFG_1,
1781c398404SEric Gao 	DPI_18BIT_CFG_2,
1791c398404SEric Gao 	DPI_24BIT,
1801c398404SEric Gao 	DPI_20BIT_YCBCR_422_LP,
1811c398404SEric Gao 	DPI_24BIT_YCBCR_422,
1821c398404SEric Gao 	DPI_16BIT_YCBCR_422,
1831c398404SEric Gao 	DPI_30BIT,
1841c398404SEric Gao 	DPI_36BIT,
1851c398404SEric Gao 	DPI_12BIT_YCBCR_420,
1861c398404SEric Gao };
1871c398404SEric Gao 
1881c398404SEric Gao /* Indicate which VOP the MIPI DSI use, bit or little one */
1891c398404SEric Gao enum  vop_id {
1901c398404SEric Gao 	VOP_B = 0,
1911c398404SEric Gao 	VOP_L,
1921c398404SEric Gao };
1931c398404SEric Gao 
1941c398404SEric Gao #endif /* end of ROCKCHIP_MIPI_DSI_H */
195