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