Merge remote-tracking branch 'stable/linux-3.0.y' into develop-3.0-jb
[firefly-linux-kernel-4.4.55.git] / include / linux / rk_screen.h
1 #ifndef _SCREEN_H
2 #define _SCREEN_H
3
4 #ifdef CONFIG_HDMI_DUAL_DISP
5 /* Scaler PLL CONFIG */
6 #define S_PLL_NO_1      0
7 #define S_PLL_NO_2      1
8 #define S_PLL_NO_4      2
9 #define S_PLL_NO_8      3
10 #define S_PLL_M(x)  (((x)&0xff)<<8)
11 #define S_PLL_N(x)  (((x)&0xf)<<4)
12 #define S_PLL_NO(x) ((S_PLL_NO_##x)&0x3)
13
14 enum{
15     HDMI_RATE_148500000,
16     HDMI_RATE_74250000,
17     HDMI_RATE_27000000,
18 };
19 /*     Scaler   clk setting */
20 #define SCALE_PLL(_parent_rate,_rate,_m,_n,_no) \
21         HDMI_RATE_ ## _parent_rate ##_S_RATE_ ## _rate \
22         =  S_PLL_M(_m) | S_PLL_N(_n) | S_PLL_NO(_no)    
23 #define SCALE_RATE(_parent_rate , _rate) \
24         (HDMI_RATE_ ## _parent_rate ## _S_RATE_ ## _rate)
25         
26 enum{
27     SCALE_PLL(148500000,    66000000,   16, 9,  4),
28     SCALE_PLL(148500000,    57375000,   17, 11, 4),
29     SCALE_PLL(148500000,    54000000,   16, 11, 4),    
30     SCALE_PLL(148500000,    33000000,   16, 9,  8),
31     SCALE_PLL(148500000,    30375000,   18, 11, 8),
32     SCALE_PLL(148500000,    29700000,   16, 10, 8),
33     SCALE_PLL(148500000,    25312500,   15, 11, 8),
34
35     SCALE_PLL(74250000,     66000000,   32, 9,  4),
36     SCALE_PLL(74250000,     57375000,   34, 11, 4),
37     SCALE_PLL(74250000,     54000000,   32, 11, 4),
38     SCALE_PLL(74250000,     33000000,   32, 9,  8),
39     SCALE_PLL(74250000,     30375000,   36, 11, 8),
40     SCALE_PLL(74250000,     25312500,   30, 11, 8),
41
42     SCALE_PLL(27000000,     75000000,   100, 9,  4),
43     SCALE_PLL(27000000,     72000000,   32, 3,  4),
44     SCALE_PLL(27000000,     63281250,   75, 4,  8),
45     SCALE_PLL(27000000,     54375000,   145, 9,  8),
46     SCALE_PLL(27000000,     31500000,   28, 3,  8),
47     SCALE_PLL(27000000,     30000000,   80, 9,  8),
48 };
49 #endif
50 typedef enum _SCREEN_TYPE {
51     SCREEN_NULL = 0,
52     SCREEN_RGB,
53     SCREEN_LVDS,
54         SCREEN_MCU,
55     SCREEN_TVOUT,
56     SCREEN_HDMI,
57 } SCREEN_TYPE;
58
59 typedef enum _REFRESH_STAGE {
60     REFRESH_PRE = 0,
61     REFRESH_END,
62
63 } REFRESH_STAGE;
64
65
66 typedef enum _MCU_IOCTL {
67     MCU_WRCMD = 0,
68     MCU_WRDATA,
69     MCU_SETBYPASS,
70
71 } MCU_IOCTL;
72
73
74 typedef enum _MCU_STATUS {
75     MS_IDLE = 0,
76     MS_MCU,
77     MS_EBOOK,
78     MS_EWAITSTART,
79     MS_EWAITEND,
80     MS_EEND,
81
82 } MCU_STATUS;
83
84 enum rk_disp_prop{       //display device property
85     PRMRY = 0,                     //primary display device ,like LCD screen
86     EXTEND,                        //extend display device ,like hdmi ,tv out
87 };
88
89 struct rk29lcd_info {
90         u32 lcd_id;
91         u32 txd_pin;
92         u32 clk_pin;
93         u32 cs_pin;
94         u32     reset_pin;
95         int (*io_init)(void);
96         int (*io_deinit)(void);
97 };
98
99
100 /* Screen description */
101 typedef struct rk29fb_screen {
102         /* screen type & hardware connect format & out face */
103         u16 type;
104         u16 hw_format;
105         u16 face;
106
107         /* Screen size */
108         u16 x_res;
109         u16 y_res;
110         u16 width;
111         u16 height;
112
113         u32 mode;
114         /* Timing */
115         u32 pixclock;
116         u16 left_margin;
117         u16 right_margin;
118         u16 hsync_len;
119         u16 upper_margin;
120         u16 lower_margin;
121         u16 vsync_len;
122         u8  ft; //the time need to display one frame,in ms
123 #ifdef CONFIG_HDMI_DUAL_DISP
124     /* Scaler mode Timing */
125         u32 s_pixclock;
126         u16 s_left_margin;
127         u16 s_right_margin;
128         u16 s_hsync_len;
129         u16 s_upper_margin;
130         u16 s_lower_margin;
131         u16 s_vsync_len; 
132         u16 s_hsync_st;
133         u16 s_vsync_st;
134         bool s_den_inv;
135         bool s_hv_sync_inv;
136         bool s_clk_inv;
137 #endif
138         u8 hdmi_resolution;
139             /* mcu need */
140         u8 mcu_wrperiod;
141         u8 mcu_usefmk;
142         u8 mcu_frmrate;
143
144                 /* Pin polarity */
145         u8 pin_hsync;
146         u8 pin_vsync;
147         u8 pin_den;
148         u8 pin_dclk;
149         u32 lcdc_aclk;
150         u8 pin_dispon;
151
152         /* Swap rule */
153         u8 swap_rb;
154         u8 swap_rg;
155         u8 swap_gb;
156         u8 swap_delta;
157         u8 swap_dumy;
158
159         /* Operation function*/
160         int (*init)(void);
161         int (*standby)(u8 enable);
162         int (*refresh)(u8 arg);
163         int (*scandir)(u16 dir);
164         int (*disparea)(u8 area);
165         int (*sscreen_get)(struct rk29fb_screen *screen, u8 resolution);
166         int (*sscreen_set)(struct rk29fb_screen *screen, bool type);// 1: use scaler 0:bypass
167 } rk_screen;
168
169 extern void set_lcd_info(struct rk29fb_screen *screen, struct rk29lcd_info *lcd_info);
170 extern void set_tv_info(struct rk29fb_screen *screen);
171 extern void set_hdmi_info(struct rk29fb_screen *screen);
172
173 #endif