ef404c6097523628a17db96be3211650f8dadb3e
[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,    54000000,   16, 11, 4),
29     SCALE_PLL(148500000,    33000000,   16, 9,  8),
30     SCALE_PLL(148500000,    30375000,   18, 11, 8),
31     SCALE_PLL(148500000,    29700000,   16, 10, 8),
32     SCALE_PLL(148500000,    25312500,   15, 11, 8),
33
34     SCALE_PLL(74250000,     66000000,   32, 9,  4),
35     SCALE_PLL(74250000,     54000000,   32, 11, 4),
36     SCALE_PLL(74250000,     33000000,   32, 9,  8),
37     SCALE_PLL(74250000,     30375000,   36, 11, 8),
38     SCALE_PLL(74250000,     25312500,   30, 11, 8),
39
40     SCALE_PLL(27000000,     31500000,   28, 3,  8),
41     SCALE_PLL(27000000,     30000000,   80, 9,  8),
42 };
43 #endif
44 typedef enum _SCREEN_TYPE {
45     SCREEN_NULL = 0,
46     SCREEN_RGB,
47     SCREEN_LVDS,
48         SCREEN_MCU,
49     SCREEN_TVOUT,
50     SCREEN_HDMI,
51 } SCREEN_TYPE;
52
53 typedef enum _REFRESH_STAGE {
54     REFRESH_PRE = 0,
55     REFRESH_END,
56
57 } REFRESH_STAGE;
58
59
60 typedef enum _MCU_IOCTL {
61     MCU_WRCMD = 0,
62     MCU_WRDATA,
63     MCU_SETBYPASS,
64
65 } MCU_IOCTL;
66
67
68 typedef enum _MCU_STATUS {
69     MS_IDLE = 0,
70     MS_MCU,
71     MS_EBOOK,
72     MS_EWAITSTART,
73     MS_EWAITEND,
74     MS_EEND,
75
76 } MCU_STATUS;
77
78 enum rk_disp_prop{       //display device property
79     PRMRY = 0,                     //primary display device ,like LCD screen
80     EXTEND,                        //extend display device ,like hdmi ,tv out
81 };
82
83 struct rk29lcd_info {
84         u32 lcd_id;
85         u32 txd_pin;
86         u32 clk_pin;
87         u32 cs_pin;
88         u32     reset_pin;
89         int (*io_init)(void);
90         int (*io_deinit)(void);
91 };
92
93
94 /* Screen description */
95 typedef struct rk29fb_screen {
96         /* screen type & hardware connect format & out face */
97         u16 type;
98         u16 hw_format;
99         u16 face;
100
101         /* Screen size */
102         u16 x_res;
103         u16 y_res;
104         u16 width;
105         u16 height;
106
107         u32 mode;
108         /* Timing */
109         u32 pixclock;
110         u16 left_margin;
111         u16 right_margin;
112         u16 hsync_len;
113         u16 upper_margin;
114         u16 lower_margin;
115         u16 vsync_len;
116         u8  ft; //the time need to display one frame,in ms
117 #ifdef CONFIG_HDMI_DUAL_DISP
118     /* Scaler mode Timing */
119         u32 s_pixclock;
120         u16 s_left_margin;
121         u16 s_right_margin;
122         u16 s_hsync_len;
123         u16 s_upper_margin;
124         u16 s_lower_margin;
125         u16 s_vsync_len; 
126         u16 s_hsync_st;
127         u16 s_vsync_st;
128 #endif
129         u8 hdmi_resolution;
130             /* mcu need */
131         u8 mcu_wrperiod;
132         u8 mcu_usefmk;
133         u8 mcu_frmrate;
134
135                 /* Pin polarity */
136         u8 pin_hsync;
137         u8 pin_vsync;
138         u8 pin_den;
139         u8 pin_dclk;
140         u32 lcdc_aclk;
141         u8 pin_dispon;
142
143         /* Swap rule */
144         u8 swap_rb;
145         u8 swap_rg;
146         u8 swap_gb;
147         u8 swap_delta;
148         u8 swap_dumy;
149
150         /* Operation function*/
151         int (*init)(void);
152         int (*standby)(u8 enable);
153         int (*refresh)(u8 arg);
154         int (*scandir)(u16 dir);
155         int (*disparea)(u8 area);
156         int (*sscreen_get)(struct rk29fb_screen *screen, u8 resolution);
157         int (*sscreen_set)(struct rk29fb_screen *screen, bool type);// 1: use scaler 0:bypass
158 } rk_screen;
159
160 extern void set_lcd_info(struct rk29fb_screen *screen, struct rk29lcd_info *lcd_info);
161 extern void set_tv_info(struct rk29fb_screen *screen);
162 extern void set_hdmi_info(struct rk29fb_screen *screen);
163
164 #endif