video: rockchip: lvds: rk31xx_lvds.c add support rk3366
[firefly-linux-kernel-4.4.55.git] / drivers / video / rockchip / transmitter / mipi_dsi.h
1 /*
2 drivers/video/rockchip/transmitter/mipi_dsi.h
3 */
4 #ifndef MIPI_DSI_H_
5 #define MIPI_DSI_H_
6
7 #ifdef CONFIG_MIPI_DSI_FT
8 #include "..\..\common\config.h"
9 #endif
10
11 #ifdef CONFIG_OF
12 #include <linux/of.h>
13 #include <linux/of_device.h>
14 #include <linux/of_gpio.h>
15 #include <dt-bindings/gpio/gpio.h>
16 #endif
17 #ifdef CONFIG_RK_3288_DSI_UBOOT
18 #include <linux/list.h>
19 #endif
20
21
22 //DSI DATA TYPE
23 #define DTYPE_DCS_SWRITE_0P             0x05 
24 #define DTYPE_DCS_SWRITE_1P             0x15 
25 #define DTYPE_DCS_LWRITE                0x39 
26 #define DTYPE_GEN_LWRITE                0x29 
27 #define DTYPE_GEN_SWRITE_2P             0x23 
28 #define DTYPE_GEN_SWRITE_1P             0x13
29 #define DTYPE_GEN_SWRITE_0P             0x03
30
31 //command transmit mode
32 #define HSDT                    0x00
33 #define LPDT                    0x01
34
35 //DSI DATA TYPE FLAG
36 #define DATA_TYPE_DCS                   0x00
37 #define DATA_TYPE_GEN                   0x01
38
39
40 //Video Mode
41 #define VM_NBMWSP               0x00  //Non burst mode with sync pulses
42 #define VM_NBMWSE               0x01  //Non burst mode with sync events
43 #define VM_BM                   0x02  //Burst mode
44
45 //Video Pixel Format
46 #define VPF_16BPP               0x00
47 #define VPF_18BPP               0x01     //packed
48 #define VPF_18BPPL              0x02     //loosely packed
49 #define VPF_24BPP               0x03
50
51 //Display Command Set
52 #define dcs_enter_idle_mode             0x39
53 #define dcs_enter_invert_mode           0x21
54 #define dcs_enter_normal_mode           0x13
55 #define dcs_enter_partial_mode          0x12
56 #define dcs_enter_sleep_mode            0x10
57 #define dcs_exit_idle_mode              0x38
58 #define dcs_exit_invert_mode            0x20
59 #define dcs_exit_sleep_mode             0x11
60 #define dcs_get_address_mode            0x0b
61 #define dcs_get_blue_channel            0x08
62 #define dcs_get_diagnostic_result       0x0f
63 #define dcs_get_display_mode            0x0d
64 #define dcs_get_green_channel           0x07
65 #define dcs_get_pixel_format            0x0c
66 #define dcs_get_power_mode              0x0a
67 #define dcs_get_red_channel             0x06
68 #define dcs_get_scanline                        0x45
69 #define dcs_get_signal_mode             0x0e
70 #define dcs_nop                                         0x00
71 #define dcs_read_DDB_continue           0xa8
72 #define dcs_read_DDB_start              0xa1
73 #define dcs_read_memory_continue        0x3e
74 #define dcs_read_memory_start           0x2e
75 #define dcs_set_address_mode            0x36
76 #define dcs_set_column_address          0x2a
77 #define dcs_set_display_off             0x28
78 #define dcs_set_display_on              0x29
79 #define dcs_set_gamma_curve             0x26
80 #define dcs_set_page_address            0x2b
81 #define dcs_set_partial_area            0x30
82 #define dcs_set_pixel_format            0x3a
83 #define dcs_set_scroll_area             0x33
84 #define dcs_set_scroll_start            0x37
85 #define dcs_set_tear_off                        0x34
86 #define dcs_set_tear_on                         0x35
87 #define dcs_set_tear_scanline           0x44
88 #define dcs_soft_reset                          0x01
89 #define dcs_write_LUT                           0x2d
90 #define dcs_write_memory_continue       0x3c
91 #define dcs_write_memory_start          0x2c
92
93 #ifndef MHz
94 #define MHz   1000000
95 #endif
96
97
98 #if 0
99 typedef signed char s8;
100 typedef unsigned char u8;
101
102 typedef signed short s16;
103 typedef unsigned short u16;
104
105 typedef signed int s32;
106 typedef unsigned int u32;
107
108 typedef signed long s64;
109 typedef unsigned long u64;
110 #endif
111
112
113 //iomux
114 #define OLD_RK_IOMUX 0
115
116 struct spi_t {
117         u32 cs;
118 #if OLD_RK_IOMUX        
119         char* cs_mux_name;
120 #endif  
121         int sck;
122 #if OLD_RK_IOMUX        
123         char* sck_mux_name;
124 #endif  
125         int miso;
126 #if OLD_RK_IOMUX        
127         char* miso_mux_name;
128 #endif  
129         int mosi;
130 #if OLD_RK_IOMUX        
131         char* mosi_mux_name;
132 #endif  
133 };
134
135 struct power_t {
136         int     enable_pin;    //gpio that control power
137 #if OLD_RK_IOMUX        
138         char* mux_name;
139         u32 mux_mode;
140 #endif  
141         u32 effect_value;
142         
143         char *name;
144         u32 voltage;
145         int (*enable)(void *);
146         int (*disable)(void *);
147 };
148
149 struct reset_t {
150         int     reset_pin;    //gpio that control reset
151 #if OLD_RK_IOMUX        
152         char* mux_name;
153         u32 mux_mode;
154 #endif  
155         u32 effect_value;
156         
157         u32 time_before_reset;    //ms
158         u32 time_after_reset;
159         
160         int (*do_reset)(void *);
161 };
162
163 struct tc358768_t {
164         u32 id;
165         struct reset_t reset;
166         struct power_t vddc;
167         struct power_t vddio;
168         struct power_t vdd_mipi;
169         struct i2c_client *client;
170         int (*gpio_init)(void *);
171         int (*gpio_deinit)(void *);
172         int (*power_up)(void);
173         int (*power_down)(void);
174 };
175
176
177 struct ssd2828_t {
178         u32 id;
179         struct reset_t reset;
180         struct power_t shut;
181         struct power_t vddio;
182         struct power_t vdd_mipi;
183         
184         struct spi_t spi;
185         int (*gpio_init)(void *);
186         int (*gpio_deinit)(void *);
187         int (*power_up)(void);
188         int (*power_down)(void);
189 };
190
191 struct mipi_dsi_ops {
192         u32 id;
193         char name[32];
194         void *dsi;
195         int (*get_id)(void *);
196         int (*dsi_init)(void *, u32 n);
197         int (*dsi_set_regs)(void *, void *, u32 n);
198         int (*dsi_enable_video_mode)(void *, u32 enable);
199         int (*dsi_enable_command_mode)(void *, u32 enable);
200         int (*dsi_enable_hs_clk)(void *, u32 enable);
201         int (*dsi_send_dcs_packet)(void *, unsigned char *, u32 n);
202         int (*dsi_read_dcs_packet)(void *, unsigned char *, u32 n);
203         int (*dsi_send_packet)(void *, unsigned char *, u32 n);
204     int (*dsi_is_enable)(void *, u32 enable);
205         int (*dsi_is_active)(void *);
206         int (*power_up)(void *);
207         int (*power_down)(void *);
208 };
209
210 /* Screen description */
211 struct mipi_dsi_screen {
212
213         u16 type;
214         u16 face;
215         u8 lcdc_id;    
216         u8 screen_id; 
217
218         /* Timing */
219         u32 pixclock;
220         u16 left_margin;
221         u16 right_margin;
222         u16 hsync_len;
223         u16 upper_margin;
224         u16 lower_margin;
225         u16 vsync_len;
226         
227         /* Screen size */
228         u16 x_res;
229         u16 y_res;
230         u16 width;
231         u16 height;
232         /* Pin polarity */
233         u8 pin_hsync;
234         u8 pin_vsync;
235         u8 pin_den;
236         u8 pin_dclk;
237
238         /* MIPI DSI */
239         u8 dsi_lane;
240         u8 dsi_video_mode;
241         u32 hs_tx_clk;
242         struct rk_screen *screen;
243
244         /* Operation function*/
245         int (*init)(void);
246         int (*standby)(u8 enable);
247
248 };
249
250 #define INVALID_GPIO        -1
251
252 struct dcs_cmd {
253         u8 type;
254         u8 dtype;
255     u8 dsi_id;
256     u8 cmd_len;
257         int cmds[32];
258         int delay;
259     char name[32];
260 };
261
262 struct mipi_dcs_cmd_ctr_list {
263         struct list_head list;
264         struct dcs_cmd dcs_cmd;
265 };
266
267 struct mipi_screen
268 {
269     u8 screen_init; 
270     u8 mipi_dsi_num;
271     u8 lcd_rst_atv_val;
272     u8 lcd_en_atv_val;
273     u8 dsi_lane;
274     
275     u32 hs_tx_clk;
276     u32 lcd_en_gpio;
277     u32 lcd_en_delay;
278     u32 lcd_rst_gpio;
279     u32 lcd_rst_delay;
280
281     struct list_head cmdlist_head;
282 };
283
284 int register_dsi_ops(unsigned int id, struct mipi_dsi_ops *ops);
285 int del_dsi_ops(struct mipi_dsi_ops *ops);
286 int dsi_power_up(unsigned int id);
287 int dsi_power_off(unsigned int id);
288 int dsi_probe_current_chip(unsigned int id);
289 int dsi_init(unsigned int id, u32 n);
290 int dsi_is_active(unsigned int id);
291 int dsi_enable_video_mode(unsigned int id, u32 enable);
292 int dsi_enable_command_mode(unsigned int id, u32 enable);
293 int dsi_enable_hs_clk(unsigned int id, u32 enable);
294 int dsi_set_virtual_channel(unsigned int id, u32 channel);
295
296 int dsi_set_regs(unsigned int id, void *array, u32 n);
297 int dsi_send_dcs_packet(unsigned int id, unsigned char *packet, u32 n);
298 int dsi_read_dcs_packet(unsigned int id, unsigned char *packet, u32 n);
299 int dsi_send_packet(unsigned int id, unsigned char *packet, u32 n);
300 int dsi_is_enable(unsigned int id, u32 enable);
301
302 #endif /* end of MIPI_DSI_H_ */