rk3036 lcdc: commit driver code, just pass compiling.
[firefly-linux-kernel-4.4.55.git] / include / linux / rk_screen.h
1 #ifndef _SCREEN_H
2 #define _SCREEN_H
3
4 typedef enum _REFRESH_STAGE {
5     REFRESH_PRE = 0,
6     REFRESH_END,
7
8 } REFRESH_STAGE;
9
10
11 typedef enum _MCU_IOCTL {
12     MCU_WRCMD = 0,
13     MCU_WRDATA,
14     MCU_SETBYPASS,
15
16 } MCU_IOCTL;
17
18
19 typedef enum _MCU_STATUS {
20     MS_IDLE = 0,
21     MS_MCU,
22     MS_EBOOK,
23     MS_EWAITSTART,
24     MS_EWAITEND,
25     MS_EEND,
26
27 } MCU_STATUS;
28
29 struct rk29_fb_setting_info {
30         u8 data_num;
31         u8 vsync_en;
32         u8 den_en;
33         u8 mcu_fmk_en;
34         u8 disp_on_en;
35         u8 standby_en;
36 };
37
38 struct rk29lcd_info {
39         u32 lcd_id;
40         u32 txd_pin;
41         u32 clk_pin;
42         u32 cs_pin;
43         u32     reset_pin;
44         int (*io_init)(void);
45         int (*io_deinit)(void);
46         int (*io_enable)(void);
47         int (*io_disable)(void);
48 };
49
50 struct overscan {
51         unsigned char left;
52         unsigned char top;
53         unsigned char right;
54         unsigned char bottom;
55 };
56
57 /* Screen description 
58 *type:LVDS,RGB,MIPI,MCU
59 *lvds_fromat:lvds data format,set it if the screen is lvds
60 *face:thi display output face,18bit,24bit,etc
61 *ft: the time need to display one frame time
62 */
63 struct rk_screen {
64         u16 type;
65         u16 lvds_format; 
66         u16 face;
67         u8 lcdc_id;   
68         u8 screen_id; 
69         struct fb_videomode mode;
70         u32 post_dsp_stx;
71         u32 post_dsp_sty;
72         u32 post_xsize;
73         u32 post_ysize;
74         u16 x_mirror;
75         u16 y_mirror;
76         int interlace;
77         int pixelrepeat; //For 480i/576i format, pixel is repeated twice.
78         u16 width;
79         u16 height;
80         u8  ft;
81         int *dsp_lut; 
82
83 #if defined(CONFIG_MFD_RK616)
84         u32 pll_cfg_val;  //bellow are for jettaB
85         u32 frac;
86         u16 scl_vst;
87         u16 scl_hst;
88         u16 vif_vst;
89         u16 vif_hst;
90 #endif
91         u8 hdmi_resolution;
92         u8 mcu_wrperiod;
93         u8 mcu_usefmk;
94         u8 mcu_frmrate;
95
96         u8 pin_hsync;
97         u8 pin_vsync;
98         u8 pin_den;
99         u8 pin_dclk;
100
101         /* Swap rule */
102         u8 swap_gb;
103         u8 swap_rg;
104         u8 swap_rb;
105         u8 swap_delta;
106         u8 swap_dumy;
107         
108 #if defined(CONFIG_MIPI_DSI)
109         /* MIPI DSI */
110         u8 dsi_lane;
111         u8 dsi_video_mode;
112         u32 hs_tx_clk;
113 #endif
114
115         int xpos;  //horizontal display start position on the sceen ,then can be changed by application
116         int ypos;
117         int xsize; //horizontal and vertical display size on he screen,they can be changed by application
118         int ysize;
119         struct overscan overscan;
120         struct rk_screen *ext_screen;
121         /* Operation function*/
122         int (*init)(void);
123         int (*standby)(u8 enable);
124         int (*refresh)(u8 arg);
125         int (*scandir)(u16 dir);
126         int (*disparea)(u8 area);
127         int (*sscreen_get)(struct rk_screen *screen, u8 resolution);
128         int (*sscreen_set)(struct rk_screen *screen, bool type);// 1: use scaler 0:bypass
129 };
130
131 struct rk29fb_info {
132         u32 fb_id;
133         int prop;               //display device property,like PRMRY,EXTEND
134         u32 mcu_fmk_pin;
135         struct rk29lcd_info *lcd_info;
136         int (*io_init)(struct rk29_fb_setting_info *fb_setting);
137         int (*io_deinit)(void);
138         int (*io_enable)(void);
139         int (*io_disable)(void);
140         void (*set_screen_info)(struct rk_screen *screen, struct rk29lcd_info *lcd_info );
141 };
142
143 extern void set_lcd_info(struct rk_screen *screen, struct rk29lcd_info *lcd_info);
144 extern size_t get_fb_size(void);
145
146 extern void set_tv_info(struct rk_screen *screen);
147 extern void set_hdmi_info(struct rk_screen *screen);
148
149 #endif