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