1 #include <linux/fb.h>
\r
2 #include <linux/delay.h>
\r
3 #include <mach/gpio.h>
\r
4 #include <mach/iomux.h>
\r
5 #include <mach/board.h>
\r
7 #include <linux/hdmi.h>
\r
8 #include "../../rk29_fb.h"
\r
12 #define OUT_TYPE SCREEN_LVDS
\r
14 #define OUT_FORMAT LVDS_8BIT_2
\r
15 #define OUT_FACE OUT_D888_P666
\r
16 #define OUT_CLK 65000000
\r
17 #define LCDC_ACLK 500000000//312000000 //29 lcdc axi DMA ƵÂÊ
\r
30 #define LCD_WIDTH 202
\r
31 #define LCD_HEIGHT 152
\r
35 #define S_OUT_CLK SCALE_RATE(148500000,66000000) //m=16 n=9 no=4
\r
50 #define S1_OUT_CLK SCALE_RATE(148500000,54000000) //m=16 n=11 no=4
\r
53 #define S1_H_VD 1024
\r
61 #define S1_H_ST 1757
\r
65 #define S2_OUT_CLK SCALE_RATE(74250000,66000000) //m=32 n=9 no=4
\r
68 #define S2_H_VD 1024
\r
80 #define S3_OUT_CLK SCALE_RATE(74250000,54000000) // m=32 n=11 no=4
\r
83 #define S3_H_VD 1024
\r
95 #define S4_OUT_CLK SCALE_RATE(27000000,54375000) //m=145 n=9 no=8
\r
98 #define S4_H_VD 1024
\r
103 #define S4_V_VD 768
\r
107 #define S4_H_ST 435
\r
110 #define S5_OUT_CLK SCALE_RATE(27000000,72000000) //m=32 n=3 no=4
\r
111 #define S5_H_PW 100
\r
112 #define S5_H_BP 100
\r
113 #define S5_H_VD 1024
\r
118 #define S5_V_VD 768
\r
121 #define S5_H_ST 858
\r
124 #define S_DCLK_POL 0
\r
129 #ifdef CONFIG_HDMI_DUAL_DISP
\r
130 static int set_scaler_info(struct rk29fb_screen *screen, u8 hdmi_resolution)
\r
132 screen->s_clk_inv = S_DCLK_POL;
\r
133 screen->s_den_inv = 0;
\r
134 screen->s_hv_sync_inv = 0;
\r
135 switch(hdmi_resolution){
\r
136 case HDMI_1920x1080p_60Hz:
\r
137 /* Scaler Timing */
\r
138 screen->hdmi_resolution = hdmi_resolution;
\r
139 screen->s_pixclock = S_OUT_CLK;
\r
140 screen->s_hsync_len = S_H_PW;
\r
141 screen->s_left_margin = S_H_BP;
\r
142 screen->s_right_margin = S_H_FP;
\r
143 screen->s_hsync_len = S_H_PW;
\r
144 screen->s_upper_margin = S_V_BP;
\r
145 screen->s_lower_margin = S_V_FP;
\r
146 screen->s_vsync_len = S_V_PW;
\r
147 screen->s_hsync_st = S_H_ST;
\r
148 screen->s_vsync_st = S_V_ST;
\r
150 case HDMI_1920x1080p_50Hz:
\r
151 /* Scaler Timing */
\r
152 screen->hdmi_resolution = hdmi_resolution;
\r
153 screen->s_pixclock = S1_OUT_CLK;
\r
154 screen->s_hsync_len = S1_H_PW;
\r
155 screen->s_left_margin = S1_H_BP;
\r
156 screen->s_right_margin = S1_H_FP;
\r
157 screen->s_hsync_len = S1_H_PW;
\r
158 screen->s_upper_margin = S1_V_BP;
\r
159 screen->s_lower_margin = S1_V_FP;
\r
160 screen->s_vsync_len = S1_V_PW;
\r
161 screen->s_hsync_st = S1_H_ST;
\r
162 screen->s_vsync_st = S1_V_ST;
\r
164 case HDMI_1280x720p_60Hz:
\r
165 /* Scaler Timing */
\r
166 screen->hdmi_resolution = hdmi_resolution;
\r
167 screen->s_pixclock = S2_OUT_CLK;
\r
168 screen->s_hsync_len = S2_H_PW;
\r
169 screen->s_left_margin = S2_H_BP;
\r
170 screen->s_right_margin = S2_H_FP;
\r
171 screen->s_hsync_len = S2_H_PW;
\r
172 screen->s_upper_margin = S2_V_BP;
\r
173 screen->s_lower_margin = S2_V_FP;
\r
174 screen->s_vsync_len = S2_V_PW;
\r
175 screen->s_hsync_st = S2_H_ST;
\r
176 screen->s_vsync_st = S2_V_ST;
\r
178 case HDMI_1280x720p_50Hz:
\r
179 /* Scaler Timing */
\r
180 screen->hdmi_resolution = hdmi_resolution;
\r
181 screen->s_pixclock = S3_OUT_CLK;
\r
182 screen->s_hsync_len = S3_H_PW;
\r
183 screen->s_left_margin = S3_H_BP;
\r
184 screen->s_right_margin = S3_H_FP;
\r
185 screen->s_hsync_len = S3_H_PW;
\r
186 screen->s_upper_margin = S3_V_BP;
\r
187 screen->s_lower_margin = S3_V_FP;
\r
188 screen->s_vsync_len = S3_V_PW;
\r
189 screen->s_hsync_st = S3_H_ST;
\r
190 screen->s_vsync_st = S3_V_ST;
\r
192 case HDMI_720x576p_50Hz_4x3:
\r
193 case HDMI_720x576p_50Hz_16x9:
\r
194 /* Scaler Timing */
\r
195 screen->hdmi_resolution = hdmi_resolution;
\r
196 screen->s_pixclock = S4_OUT_CLK;
\r
197 screen->s_hsync_len = S4_H_PW;
\r
198 screen->s_left_margin = S4_H_BP;
\r
199 screen->s_right_margin = S4_H_FP;
\r
200 screen->s_hsync_len = S4_H_PW;
\r
201 screen->s_upper_margin = S4_V_BP;
\r
202 screen->s_lower_margin = S4_V_FP;
\r
203 screen->s_vsync_len = S4_V_PW;
\r
204 screen->s_hsync_st = S4_H_ST;
\r
205 screen->s_vsync_st = S4_V_ST;
\r
207 case HDMI_720x480p_60Hz_16x9:
\r
208 case HDMI_720x480p_60Hz_4x3:
\r
209 /* Scaler Timing */
\r
210 screen->hdmi_resolution = hdmi_resolution;
\r
211 screen->s_pixclock = S5_OUT_CLK;
\r
212 screen->s_hsync_len = S5_H_PW;
\r
213 screen->s_left_margin = S5_H_BP;
\r
214 screen->s_right_margin = S5_H_FP;
\r
215 screen->s_hsync_len = S5_H_PW;
\r
216 screen->s_upper_margin = S5_V_BP;
\r
217 screen->s_lower_margin = S5_V_FP;
\r
218 screen->s_vsync_len = S5_V_PW;
\r
219 screen->s_hsync_st = S5_H_ST;
\r
220 screen->s_vsync_st = S5_V_ST;
\r
223 printk("%s lcd not support dual display at this hdmi resolution %d \n",__func__,hdmi_resolution);
\r
231 static int set_scaler_info(struct rk29fb_screen *screen, u8 hdmi_resolution){}
\r
234 void set_lcd_info(struct rk29fb_screen *screen, struct rk29lcd_info *lcd_info )
\r
236 /* screen type & face */
\r
237 screen->type = OUT_TYPE;
\r
238 screen->face = OUT_FACE;
\r
239 screen->hw_format = OUT_FORMAT;
\r
242 screen->x_res = H_VD;
\r
243 screen->y_res = V_VD;
\r
245 screen->width = LCD_WIDTH;
\r
246 screen->height = LCD_HEIGHT;
\r
249 screen->lcdc_aclk = LCDC_ACLK;
\r
250 screen->pixclock = OUT_CLK;
\r
251 screen->left_margin = H_BP;
\r
252 screen->right_margin = H_FP;
\r
253 screen->hsync_len = H_PW;
\r
254 screen->upper_margin = V_BP;
\r
255 screen->lower_margin = V_FP;
\r
256 screen->vsync_len = V_PW;
\r
259 screen->pin_hsync = 0;
\r
260 screen->pin_vsync = 0;
\r
261 screen->pin_den = 0;
\r
262 screen->pin_dclk = DCLK_POL;
\r
265 screen->swap_rb = SWAP_RB;
\r
266 screen->swap_rg = 0;
\r
267 screen->swap_gb = 0;
\r
268 screen->swap_delta = 0;
\r
269 screen->swap_dumy = 0;
\r
271 /* Operation function*/
\r
272 screen->init = NULL;
\r
273 screen->standby = NULL;
\r
274 screen->sscreen_get = set_scaler_info;
\r
275 #ifdef CONFIG_RK610_LVDS
\r
276 screen->sscreen_set = rk610_lcd_scaler_set_param;
\r