5e5cd30d08ed517a9e86476b6a0ebc0a84c44064
[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 refresh_mode;
66         u16 lvds_format;
67         u16 face;
68         u16 color_mode;
69         u8 lcdc_id;
70         u8 screen_id;
71         struct fb_videomode mode;
72         u32 post_dsp_stx;
73         u32 post_dsp_sty;
74         u32 post_xsize;
75         u32 post_ysize;
76         u16 x_mirror;
77         u16 y_mirror;
78         int interlace;
79         int pixelrepeat; //For 480i/576i format, pixel is repeated twice.
80         u16 width;
81         u16 height;
82         u8  ft;
83         int *dsp_lut;
84         int *cabc_lut;
85         int *cabc_gamma_base;
86
87 #if defined(CONFIG_MFD_RK616) || defined(CONFIG_LCDC_RK312X)
88         u32 pll_cfg_val;  //bellow are for jettaB
89         u32 frac;
90         u16 scl_vst;
91         u16 scl_hst;
92         u16 vif_vst;
93         u16 vif_hst;
94 #endif
95         u8 hdmi_resolution;
96         u8 mcu_wrperiod;
97         u8 mcu_usefmk;
98         u8 mcu_frmrate;
99
100         u8 pin_hsync;
101         u8 pin_vsync;
102         u8 pin_den;
103         u8 pin_dclk;
104
105         /* Swap rule */
106         u8 swap_gb;
107         u8 swap_rg;
108         u8 swap_rb;
109         u8 swap_delta;
110         u8 swap_dumy;
111         
112 #if defined(CONFIG_MIPI_DSI)
113         /* MIPI DSI */
114         u8 dsi_lane;
115         u8 dsi_video_mode;
116         u32 hs_tx_clk;
117 #endif
118
119         int xpos;  //horizontal display start position on the sceen ,then can be changed by application
120         int ypos;
121         int xsize; //horizontal and vertical display size on he screen,they can be changed by application
122         int ysize;
123         struct overscan overscan;
124         struct rk_screen *ext_screen;
125         /* Operation function*/
126         int (*init)(void);
127         int (*standby)(u8 enable);
128         int (*refresh)(u8 arg);
129         int (*scandir)(u16 dir);
130         int (*disparea)(u8 area);
131         int (*sscreen_get)(struct rk_screen *screen, u8 resolution);
132         int (*sscreen_set)(struct rk_screen *screen, bool type);// 1: use scaler 0:bypass
133 };
134
135 struct rk29fb_info {
136         u32 fb_id;
137         int prop;               //display device property,like PRMRY,EXTEND
138         u32 mcu_fmk_pin;
139         struct rk29lcd_info *lcd_info;
140         int (*io_init)(struct rk29_fb_setting_info *fb_setting);
141         int (*io_deinit)(void);
142         int (*io_enable)(void);
143         int (*io_disable)(void);
144         void (*set_screen_info)(struct rk_screen *screen, struct rk29lcd_info *lcd_info );
145 };
146
147 extern void set_lcd_info(struct rk_screen *screen, struct rk29lcd_info *lcd_info);
148 extern size_t get_fb_size(u8 reserved_fb);
149
150 extern void set_tv_info(struct rk_screen *screen);
151 extern void set_hdmi_info(struct rk_screen *screen);
152
153 #endif