SD(io)/(e)MMC: update mmc flow, continue commit-sha19896ff517b38c2c2db17980a71dca8cd2...
[firefly-linux-kernel-4.4.55.git] / include / linux / rk_screen.h
1 #ifndef _SCREEN_H
2 #define _SCREEN_H
3
4 #define LVDS_8BIT_1     0
5 #define LVDS_8BIT_2     1
6 #define LVDS_8BIT_3     2
7 #define LVDS_6BIT       3
8 /*              lvds connect config       
9  *                                        
10  *              LVDS_8BIT_1    LVDS_8BIT_2     LVDS_8BIT_3     LVDS_6BIT
11 ----------------------------------------------------------------------
12         TX0     R0              R2              R2              R0
13         TX1     R1              R3              R3              R1
14         TX2     R2              R4              R4              R2
15 Y       TX3     R3              R5              R5              R3
16 0       TX4     R4              R6              R6              R4
17         TX6     R5              R7              R7              R5      
18         TX7     G0              G2              G2              G0
19 ----------------------------------------------------------------------
20         TX8     G1              G3              G3              G1
21         TX9     G2              G4              G4              G2
22 Y       TX12    G3              G5              G5              G3
23 1       TX13    G4              G6              G6              G4
24         TX14    G5              G7              G7              G5
25         TX15    B0              B2              B2              B0
26         TX18    B1              B3              B3              B1
27 ----------------------------------------------------------------------
28         TX19    B2              B4              B4              B2
29         TX20    B3              B5              B5              B3
30         TX21    B4              B6              B6              B4
31 Y       TX22    B5              B7              B7              B5
32 2       TX24    HSYNC           HSYNC           HSYNC           HSYNC
33         TX25    VSYNC           VSYNC           VSYNC           VSYNC
34         TX26    ENABLE          ENABLE          ENABLE          ENABLE
35 ----------------------------------------------------------------------    
36         TX27    R6              R0              GND             GND
37         TX5     R7              R1              GND             GND
38         TX10    G6              G0              GND             GND
39 Y       TX11    G7              G1              GND             GND
40 3       TX16    B6              B0              GND             GND
41         TX17    B7              B1              GND             GND
42         TX23    RSVD            RSVD            RSVD            RSVD
43 ----------------------------------------------------------------------
44 */
45
46 typedef enum _SCREEN_TYPE {
47         SCREEN_NULL = 0,
48         SCREEN_RGB,
49         SCREEN_LVDS,
50         SCREEN_MCU,
51         SCREEN_TVOUT,
52         SCREEN_HDMI,
53         SCREEN_MIPI,
54 } SCREEN_TYPE;
55
56 typedef enum _REFRESH_STAGE {
57     REFRESH_PRE = 0,
58     REFRESH_END,
59
60 } REFRESH_STAGE;
61
62
63 typedef enum _MCU_IOCTL {
64     MCU_WRCMD = 0,
65     MCU_WRDATA,
66     MCU_SETBYPASS,
67
68 } MCU_IOCTL;
69
70
71 typedef enum _MCU_STATUS {
72     MS_IDLE = 0,
73     MS_MCU,
74     MS_EBOOK,
75     MS_EWAITSTART,
76     MS_EWAITEND,
77     MS_EEND,
78
79 } MCU_STATUS;
80
81 enum rk_disp_prop{       //display device property
82     PRMRY = 1,                     //primary display device ,like LCD screen
83     EXTEND,                        //extend display device ,like hdmi ,tv out
84 };
85
86 struct rk29_fb_setting_info {
87         u8 data_num;
88         u8 vsync_en;
89         u8 den_en;
90         u8 mcu_fmk_en;
91         u8 disp_on_en;
92         u8 standby_en;
93 };
94
95 struct rk29lcd_info {
96         u32 lcd_id;
97         u32 txd_pin;
98         u32 clk_pin;
99         u32 cs_pin;
100         u32     reset_pin;
101         int (*io_init)(void);
102         int (*io_deinit)(void);
103         int (*io_enable)(void);
104         int (*io_disable)(void);
105 };
106
107
108 /* Screen description */
109 typedef struct rk29fb_screen {
110         /* screen type & hardware connect format & out face */
111         u16 type;
112         u16 lvds_format;  //lvds data format
113         u16 face;
114         u8 lcdc_id;    //which output interface the screeen connect to
115         u8 screen_id; //screen number
116
117         /* Screen size */
118         u16 x_res;
119         u16 y_res;
120         u16 width;
121         u16 height;
122
123         u32 mode;
124         /* Timing */
125         u32 pixclock;
126         u32 fps;
127         u16 left_margin;
128         u16 right_margin;
129         u16 hsync_len;
130         u16 upper_margin;
131         u16 lower_margin;
132         u16 vsync_len;
133         u8  ft; //the time need to display one frame,in ms
134         int *dsp_lut; //display lut 
135         struct rk29fb_screen *ext_screen;
136 #if defined(CONFIG_HDMI_DUAL_DISP) || defined(CONFIG_ONE_LCDC_DUAL_OUTPUT_INF)
137     /* Scaler mode Timing */
138         u32 s_pixclock;
139         u16 s_left_margin;
140         u16 s_right_margin;
141         u16 s_hsync_len;
142         u16 s_upper_margin;
143         u16 s_lower_margin;
144         u16 s_vsync_len; 
145         u16 s_hsync_st;
146         u16 s_vsync_st;
147         bool s_den_inv;
148         bool s_hv_sync_inv;
149         bool s_clk_inv;
150 #endif
151
152 #if defined(CONFIG_MFD_RK616)
153         u32 pll_cfg_val;  //bellow are for jettaB
154         u32 frac;
155         u16 scl_vst;
156         u16 scl_hst;
157         u16 vif_vst;
158         u16 vif_hst;
159 #endif
160         u8 hdmi_resolution;
161             /* mcu need */
162         u8 mcu_wrperiod;
163         u8 mcu_usefmk;
164         u8 mcu_frmrate;
165
166                 /* Pin polarity */
167         u8 pin_hsync;
168         u8 pin_vsync;
169         u8 pin_den;
170         u8 pin_dclk;
171         u32 lcdc_aclk;
172         u8 pin_dispon;
173
174         /* Swap rule */
175         u8 swap_gb;
176         u8 swap_rg;
177         u8 swap_rb;
178         u8 swap_delta;
179         u8 swap_dumy;
180         
181 #if defined(CONFIG_MIPI_DSI)
182         /* MIPI DSI */
183         u8 dsi_lane;
184         u8 dsi_video_mode;
185         u32 hs_tx_clk;
186 #endif
187
188         int xpos;  //horizontal display start position on the sceen ,then can be changed by application
189         int ypos;
190         int xsize; //horizontal and vertical display size on he screen,they can be changed by application
191         int ysize;
192         /* Operation function*/
193         int (*init)(void);
194         int (*standby)(u8 enable);
195         int (*refresh)(u8 arg);
196         int (*scandir)(u16 dir);
197         int (*disparea)(u8 area);
198         int (*sscreen_get)(struct rk29fb_screen *screen, u8 resolution);
199         int (*sscreen_set)(struct rk29fb_screen *screen, bool type);// 1: use scaler 0:bypass
200 } rk_screen;
201
202 struct rk29fb_info {
203         u32 fb_id;
204         enum rk_disp_prop prop;         //display device property,like PRMRY,EXTEND
205         u32 mcu_fmk_pin;
206         struct rk29lcd_info *lcd_info;
207         int (*io_init)(struct rk29_fb_setting_info *fb_setting);
208         int (*io_deinit)(void);
209         int (*io_enable)(void);
210         int (*io_disable)(void);
211         void (*set_screen_info)(struct rk29fb_screen *screen, struct rk29lcd_info *lcd_info );
212 };
213
214 extern void set_lcd_info(struct rk29fb_screen *screen, struct rk29lcd_info *lcd_info);
215 extern size_t get_fb_size(void);
216
217 extern void set_tv_info(struct rk29fb_screen *screen);
218 extern void set_hdmi_info(struct rk29fb_screen *screen);
219
220 #endif