rk fb:base version for linux3.10
[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 struct rk29_fb_setting_info {
82         u8 data_num;
83         u8 vsync_en;
84         u8 den_en;
85         u8 mcu_fmk_en;
86         u8 disp_on_en;
87         u8 standby_en;
88 };
89
90 struct rk29lcd_info {
91         u32 lcd_id;
92         u32 txd_pin;
93         u32 clk_pin;
94         u32 cs_pin;
95         u32     reset_pin;
96         int (*io_init)(void);
97         int (*io_deinit)(void);
98         int (*io_enable)(void);
99         int (*io_disable)(void);
100 };
101
102
103 /* Screen description */
104 typedef struct rk29fb_screen {
105         /* screen type & hardware connect format & out face */
106         u16 type;
107         u16 lvds_format;  //lvds data format
108         u16 face;
109         u8 lcdc_id;    //which output interface the screeen connect to
110         u8 screen_id; //screen number
111
112         /* Screen size */
113         u16 x_res;
114         u16 y_res;
115         u16 width;
116         u16 height;
117
118         u32 mode;
119         /* Timing */
120         u32 pixclock;
121         u32 fps;
122         u16 left_margin;
123         u16 right_margin;
124         u16 hsync_len;
125         u16 upper_margin;
126         u16 lower_margin;
127         u16 vsync_len;
128         u8  ft; //the time need to display one frame,in ms
129         int *dsp_lut; //display lut 
130         struct rk29fb_screen *ext_screen;
131 #if defined(CONFIG_HDMI_DUAL_DISP) || defined(CONFIG_ONE_LCDC_DUAL_OUTPUT_INF)
132     /* Scaler mode Timing */
133         u32 s_pixclock;
134         u16 s_left_margin;
135         u16 s_right_margin;
136         u16 s_hsync_len;
137         u16 s_upper_margin;
138         u16 s_lower_margin;
139         u16 s_vsync_len; 
140         u16 s_hsync_st;
141         u16 s_vsync_st;
142         bool s_den_inv;
143         bool s_hv_sync_inv;
144         bool s_clk_inv;
145 #endif
146
147 #if defined(CONFIG_MFD_RK616)
148         u32 pll_cfg_val;  //bellow are for jettaB
149         u32 frac;
150         u16 scl_vst;
151         u16 scl_hst;
152         u16 vif_vst;
153         u16 vif_hst;
154 #endif
155         u8 hdmi_resolution;
156             /* mcu need */
157         u8 mcu_wrperiod;
158         u8 mcu_usefmk;
159         u8 mcu_frmrate;
160
161                 /* Pin polarity */
162         u8 pin_hsync;
163         u8 pin_vsync;
164         u8 pin_den;
165         u8 pin_dclk;
166         u32 lcdc_aclk;
167         u8 pin_dispon;
168
169         /* Swap rule */
170         u8 swap_gb;
171         u8 swap_rg;
172         u8 swap_rb;
173         u8 swap_delta;
174         u8 swap_dumy;
175         
176 #if defined(CONFIG_MIPI_DSI)
177         /* MIPI DSI */
178         u8 dsi_lane;
179         u8 dsi_video_mode;
180         u32 hs_tx_clk;
181 #endif
182
183         int xpos;  //horizontal display start position on the sceen ,then can be changed by application
184         int ypos;
185         int xsize; //horizontal and vertical display size on he screen,they can be changed by application
186         int ysize;
187         /* Operation function*/
188         int (*init)(void);
189         int (*standby)(u8 enable);
190         int (*refresh)(u8 arg);
191         int (*scandir)(u16 dir);
192         int (*disparea)(u8 area);
193         int (*sscreen_get)(struct rk29fb_screen *screen, u8 resolution);
194         int (*sscreen_set)(struct rk29fb_screen *screen, bool type);// 1: use scaler 0:bypass
195 } rk_screen;
196
197 struct rk29fb_info {
198         u32 fb_id;
199         int prop;               //display device property,like PRMRY,EXTEND
200         u32 mcu_fmk_pin;
201         struct rk29lcd_info *lcd_info;
202         int (*io_init)(struct rk29_fb_setting_info *fb_setting);
203         int (*io_deinit)(void);
204         int (*io_enable)(void);
205         int (*io_disable)(void);
206         void (*set_screen_info)(struct rk29fb_screen *screen, struct rk29lcd_info *lcd_info );
207 };
208
209 extern void set_lcd_info(struct rk29fb_screen *screen, struct rk29lcd_info *lcd_info);
210 extern size_t get_fb_size(void);
211
212 extern void set_tv_info(struct rk29fb_screen *screen);
213 extern void set_hdmi_info(struct rk29fb_screen *screen);
214
215 #endif