1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /*
3 * Copyright (c) 2016 Linaro Limited.
4 * Copyright (c) 2014-2016 Hisilicon Limited.
5 */
6
7 #ifndef __DW_DSI_REG_H__
8 #define __DW_DSI_REG_H__
9
10 #define MASK(x) (BIT(x) - 1)
11 #define DEFAULT_MAX_TX_ESC_CLK (10 * 1000000UL) //for hikey960
12 /*
13 * regs
14 */
15 #define PWR_UP 0x04 /* Core power-up */
16 #define RESET 0
17 #define POWERUP BIT(0)
18 #define PHY_IF_CFG 0xA4 /* D-PHY interface configuration */
19 #define CLKMGR_CFG 0x08 /* the internal clock dividers */
20 #define PHY_RSTZ 0xA0 /* D-PHY reset control */
21 #define PHY_ENABLECLK BIT(2)
22 #define PHY_UNRSTZ BIT(1)
23 #define PHY_UNSHUTDOWNZ BIT(0)
24 #define PHY_TST_CTRL0 0xB4 /* D-PHY test interface control 0 */
25 #define PHY_TST_CTRL1 0xB8 /* D-PHY test interface control 1 */
26 #define CLK_TLPX 0x10
27 #define CLK_THS_PREPARE 0x11
28 #define CLK_THS_ZERO 0x12
29 #define CLK_THS_TRAIL 0x13
30 #define CLK_TWAKEUP 0x14
31 #define DATA_TLPX(x) (0x20 + ((x) << 4))
32 #define DATA_THS_PREPARE(x) (0x21 + ((x) << 4))
33 #define DATA_THS_ZERO(x) (0x22 + ((x) << 4))
34 #define DATA_THS_TRAIL(x) (0x23 + ((x) << 4))
35 #define DATA_TTA_GO(x) (0x24 + ((x) << 4))
36 #define DATA_TTA_GET(x) (0x25 + ((x) << 4))
37 #define DATA_TWAKEUP(x) (0x26 + ((x) << 4))
38 #define PHY_CFG_I 0x60
39 #define PHY_CFG_PLL_I 0x63
40 #define PHY_CFG_PLL_II 0x64
41 #define PHY_CFG_PLL_III 0x65
42 #define PHY_CFG_PLL_IV 0x66
43 #define PHY_CFG_PLL_V 0x67
44 #define DPI_COLOR_CODING 0x10 /* DPI color coding */
45 #define DPI_CFG_POL 0x14 /* DPI polarity configuration */
46 #define VID_HSA_TIME 0x48 /* Horizontal Sync Active time */
47 #define VID_HBP_TIME 0x4C /* Horizontal Back Porch time */
48 #define VID_HLINE_TIME 0x50 /* Line time */
49 #define VID_VSA_LINES 0x54 /* Vertical Sync Active period */
50 #define VID_VBP_LINES 0x58 /* Vertical Back Porch period */
51 #define VID_VFP_LINES 0x5C /* Vertical Front Porch period */
52 #define VID_VACTIVE_LINES 0x60 /* Vertical resolution */
53 #define VID_PKT_SIZE 0x3C /* Video packet size */
54 #define VID_MODE_CFG 0x38 /* Video mode configuration */
55 /***************************for hikey960***********************************/
56 #define GEN_HDR 0x6c
57 #define GEN_HDATA(data) (((data) & 0xffff) << 8)
58 #define GEN_HDATA_MASK (0xffff << 8)
59 #define GEN_HTYPE(type) (((type) & 0xff) << 0)
60 #define GEN_HTYPE_MASK 0xff
61 #define GEN_PLD_DATA 0x70
62 #define CMD_PKT_STATUS 0x74
63 #define GEN_CMD_EMPTY BIT(0)
64 #define GEN_CMD_FULL BIT(1)
65 #define GEN_PLD_W_EMPTY BIT(2)
66 #define GEN_PLD_W_FULL BIT(3)
67 #define GEN_PLD_R_EMPTY BIT(4)
68 #define GEN_PLD_R_FULL BIT(5)
69 #define GEN_RD_CMD_BUSY BIT(6)
70 #define CMD_MODE_CFG 0x68
71 #define MAX_RD_PKT_SIZE_LP BIT(24)
72 #define DCS_LW_TX_LP BIT(19)
73 #define DCS_SR_0P_TX_LP BIT(18)
74 #define DCS_SW_1P_TX_LP BIT(17)
75 #define DCS_SW_0P_TX_LP BIT(16)
76 #define GEN_LW_TX_LP BIT(14)
77 #define GEN_SR_2P_TX_LP BIT(13)
78 #define GEN_SR_1P_TX_LP BIT(12)
79 #define GEN_SR_0P_TX_LP BIT(11)
80 #define GEN_SW_2P_TX_LP BIT(10)
81 #define GEN_SW_1P_TX_LP BIT(9)
82 #define GEN_SW_0P_TX_LP BIT(8)
83 #define EN_ACK_RQST BIT(1)
84 #define EN_TEAR_FX BIT(0)
85 #define CMD_PKT_STATUS_TIMEOUT_US 20000
86 #define CMD_MODE_ALL_LP (MAX_RD_PKT_SIZE_LP | \
87 DCS_LW_TX_LP | \
88 DCS_SR_0P_TX_LP | \
89 DCS_SW_1P_TX_LP | \
90 DCS_SW_0P_TX_LP | \
91 GEN_LW_TX_LP | \
92 GEN_SR_2P_TX_LP | \
93 GEN_SR_1P_TX_LP | \
94 GEN_SR_0P_TX_LP | \
95 GEN_SW_2P_TX_LP | \
96 GEN_SW_1P_TX_LP | \
97 GEN_SW_0P_TX_LP)
98 /***************************for hikey960***********************************/
99 #define PHY_TMR_CFG 0x9C /* Data lanes timing configuration */
100 #define BTA_TO_CNT 0x8C /* Response timeout definition */
101 #define PHY_TMR_LPCLK_CFG 0x98 /* clock lane timing configuration */
102 #define CLK_DATA_TMR_CFG 0xCC
103 #define LPCLK_CTRL 0x94 /* Low-power in clock lane */
104 #define PHY_TXREQUESTCLKHS BIT(0)
105 #define MODE_CFG 0x34 /* Video or Command mode selection */
106 #define PHY_STATUS 0xB0 /* D-PHY PPI status interface */
107
108 #define PHY_STOP_WAIT_TIME 0x30
109
110 /*
111 * regs relevant enum
112 */
113 enum dpi_color_coding {
114 DSI_24BITS_1 = 5,
115 };
116
117 enum dsi_video_mode_type {
118 DSI_NON_BURST_SYNC_PULSES = 0,
119 DSI_NON_BURST_SYNC_EVENTS,
120 DSI_BURST_SYNC_PULSES_1,
121 DSI_BURST_SYNC_PULSES_2
122 };
123
124 enum dsi_work_mode {
125 DSI_VIDEO_MODE = 0,
126 DSI_COMMAND_MODE
127 };
128
129 /*
130 * Register Write/Read Helper functions
131 */
dw_update_bits(void __iomem * addr,u32 bit_start,u32 mask,u32 val)132 static inline void dw_update_bits(void __iomem *addr, u32 bit_start,
133 u32 mask, u32 val)
134 {
135 u32 tmp, orig;
136
137 orig = readl(addr);
138 tmp = orig & ~(mask << bit_start);
139 tmp |= (val & mask) << bit_start;
140 writel(tmp, addr);
141 }
142
143 #endif /* __DW_DRM_DSI_H__ */
144