rk fb:add more screen property
[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
51 /* Screen description 
52 *type:LVDS,RGB,MIPI,MCU
53 *lvds_fromat:lvds data format,set it if the screen is lvds
54 *face:thi display output face,18bit,24bit,etc
55 *ft: the time need to display one frame time
56 */
57 struct rk_screen {
58         u16 type;
59         u16 lvds_format; 
60         u16 face;
61         u8 lcdc_id;   
62         u8 screen_id; 
63         struct fb_videomode mode;
64         u16 width;
65         u16 height;
66         u8  ft;
67         int *dsp_lut; 
68
69 #if defined(CONFIG_MFD_RK616)
70         u32 pll_cfg_val;  //bellow are for jettaB
71         u32 frac;
72         u16 scl_vst;
73         u16 scl_hst;
74         u16 vif_vst;
75         u16 vif_hst;
76 #endif
77         u8 hdmi_resolution;
78         u8 mcu_wrperiod;
79         u8 mcu_usefmk;
80         u8 mcu_frmrate;
81
82         u8 pin_hsync;
83         u8 pin_vsync;
84         u8 pin_den;
85         u8 pin_dclk;
86
87         /* Swap rule */
88         u8 swap_gb;
89         u8 swap_rg;
90         u8 swap_rb;
91         u8 swap_delta;
92         u8 swap_dumy;
93         
94 #if defined(CONFIG_MIPI_DSI)
95         /* MIPI DSI */
96         u8 dsi_lane;
97         u8 dsi_video_mode;
98         u32 hs_tx_clk;
99 #endif
100
101         int xpos;  //horizontal display start position on the sceen ,then can be changed by application
102         int ypos;
103         int xsize; //horizontal and vertical display size on he screen,they can be changed by application
104         int ysize;
105         struct rk_screen *ext_screen;
106         /* Operation function*/
107         int (*init)(void);
108         int (*standby)(u8 enable);
109         int (*refresh)(u8 arg);
110         int (*scandir)(u16 dir);
111         int (*disparea)(u8 area);
112         int (*sscreen_get)(struct rk_screen *screen, u8 resolution);
113         int (*sscreen_set)(struct rk_screen *screen, bool type);// 1: use scaler 0:bypass
114 };
115
116 struct rk29fb_info {
117         u32 fb_id;
118         int prop;               //display device property,like PRMRY,EXTEND
119         u32 mcu_fmk_pin;
120         struct rk29lcd_info *lcd_info;
121         int (*io_init)(struct rk29_fb_setting_info *fb_setting);
122         int (*io_deinit)(void);
123         int (*io_enable)(void);
124         int (*io_disable)(void);
125         void (*set_screen_info)(struct rk_screen *screen, struct rk29lcd_info *lcd_info );
126 };
127
128 extern void set_lcd_info(struct rk_screen *screen, struct rk29lcd_info *lcd_info);
129 extern size_t get_fb_size(void);
130
131 extern void set_tv_info(struct rk_screen *screen);
132 extern void set_hdmi_info(struct rk_screen *screen);
133
134 #endif