2 #include <linux/rk_fb.h>
4 #if defined(CONFIG_RK_HDMI)
5 #include "../hdmi/rk_hdmi.h"
13 // if we use one lcdc with jetta for dual display,we need these configration
14 #if defined(CONFIG_ONE_LCDC_DUAL_OUTPUT_INF) && defined(CONFIG_RK_HDMI)
15 static int set_scaler_info(struct rk29fb_screen *screen, u8 hdmi_resolution)
17 #if defined(CONFIG_RK610_LVDS)
18 screen->s_clk_inv = S_DCLK_POL;
19 screen->s_den_inv = 0;
20 screen->s_hv_sync_inv = 0;
23 switch(hdmi_resolution)
25 case HDMI_1920x1080p_60Hz:
27 #if defined(CONFIG_RK610_LVDS)
28 screen->hdmi_resolution = hdmi_resolution;
29 screen->s_pixclock = S_OUT_CLK;
30 screen->s_hsync_len = S_H_PW;
31 screen->s_left_margin = S_H_BP;
32 screen->s_right_margin = S_H_FP;
33 screen->s_hsync_len = S_H_PW;
34 screen->s_upper_margin = S_V_BP;
35 screen->s_lower_margin = S_V_FP;
36 screen->s_vsync_len = S_V_PW;
37 screen->s_hsync_st = S_H_ST;
38 screen->s_vsync_st = S_V_ST;
41 //bellow are for JettaB
42 #if defined(CONFIG_RK616_LVDS)
43 screen->pll_cfg_val = S_PLL_CFG_VAL;
44 screen->frac = S_FRAC;
45 screen->scl_vst = S_SCL_VST;
46 screen->scl_hst = S_SCL_HST;
47 screen->vif_vst = S_VIF_VST;
48 screen->vif_hst = S_VIF_HST;
51 case HDMI_1920x1080p_50Hz:
53 #if defined(CONFIG_RK610_LVDS)
54 screen->hdmi_resolution = hdmi_resolution;
55 screen->s_pixclock = S1_OUT_CLK;
56 screen->s_hsync_len = S1_H_PW;
57 screen->s_left_margin = S1_H_BP;
58 screen->s_right_margin = S1_H_FP;
59 screen->s_hsync_len = S1_H_PW;
60 screen->s_upper_margin = S1_V_BP;
61 screen->s_lower_margin = S1_V_FP;
62 screen->s_vsync_len = S1_V_PW;
63 screen->s_hsync_st = S1_H_ST;
64 screen->s_vsync_st = S1_V_ST;
67 #if defined(CONFIG_RK616_LVDS)
68 screen->pll_cfg_val = S1_PLL_CFG_VAL;
69 screen->frac = S1_FRAC;
70 screen->scl_vst = S1_SCL_VST;
71 screen->scl_hst = S1_SCL_HST;
72 screen->vif_vst = S1_VIF_VST;
73 screen->vif_hst = S1_VIF_HST;
76 case HDMI_1280x720p_60Hz:
78 #if defined(CONFIG_RK610_LVDS)
79 screen->hdmi_resolution = hdmi_resolution;
80 screen->s_pixclock = S2_OUT_CLK;
81 screen->s_hsync_len = S2_H_PW;
82 screen->s_left_margin = S2_H_BP;
83 screen->s_right_margin = S2_H_FP;
84 screen->s_hsync_len = S2_H_PW;
85 screen->s_upper_margin = S2_V_BP;
86 screen->s_lower_margin = S2_V_FP;
87 screen->s_vsync_len = S2_V_PW;
88 screen->s_hsync_st = S2_H_ST;
89 screen->s_vsync_st = S2_V_ST;
92 #if defined(CONFIG_RK616_LVDS)
93 screen->pll_cfg_val = S2_PLL_CFG_VAL;
94 screen->frac = S2_FRAC;
95 screen->scl_vst = S2_SCL_VST;
96 screen->scl_hst = S2_SCL_HST;
97 screen->vif_vst = S2_VIF_VST;
98 screen->vif_hst = S2_VIF_HST;
101 case HDMI_1280x720p_50Hz:
103 #if defined(CONFIG_RK610_LVDS)
104 screen->hdmi_resolution = hdmi_resolution;
105 screen->s_pixclock = S3_OUT_CLK;
106 screen->s_hsync_len = S3_H_PW;
107 screen->s_left_margin = S3_H_BP;
108 screen->s_right_margin = S3_H_FP;
109 screen->s_hsync_len = S3_H_PW;
110 screen->s_upper_margin = S3_V_BP;
111 screen->s_lower_margin = S3_V_FP;
112 screen->s_vsync_len = S3_V_PW;
113 screen->s_hsync_st = S3_H_ST;
114 screen->s_vsync_st = S3_V_ST;
117 #if defined(CONFIG_RK616_LVDS)
118 screen->pll_cfg_val = S3_PLL_CFG_VAL;
119 screen->frac = S3_FRAC;
120 screen->scl_vst = S3_SCL_VST;
121 screen->scl_hst = S3_SCL_HST;
122 screen->vif_vst = S3_VIF_VST;
123 screen->vif_hst = S3_VIF_HST;
126 case HDMI_720x576p_50Hz_4_3:
127 case HDMI_720x576p_50Hz_16_9:
129 #if defined(CONFIG_RK610_LVDS)
130 screen->hdmi_resolution = hdmi_resolution;
131 screen->s_pixclock = S4_OUT_CLK;
132 screen->s_hsync_len = S4_H_PW;
133 screen->s_left_margin = S4_H_BP;
134 screen->s_right_margin = S4_H_FP;
135 screen->s_hsync_len = S4_H_PW;
136 screen->s_upper_margin = S4_V_BP;
137 screen->s_lower_margin = S4_V_FP;
138 screen->s_vsync_len = S4_V_PW;
139 screen->s_hsync_st = S4_H_ST;
140 screen->s_vsync_st = S4_V_ST;
143 #if defined(CONFIG_RK616_LVDS)
144 screen->pll_cfg_val = S4_PLL_CFG_VAL;
145 screen->frac = S4_FRAC;
146 screen->scl_vst = S4_SCL_VST;
147 screen->scl_hst = S4_SCL_HST;
148 screen->vif_vst = S4_VIF_VST;
149 screen->vif_hst = S4_VIF_HST;
153 case HDMI_720x480p_60Hz_16_9:
154 case HDMI_720x480p_60Hz_4_3:
156 #if defined(CONFIG_RK610_LVDS)
157 screen->hdmi_resolution = hdmi_resolution;
158 screen->s_pixclock = S5_OUT_CLK;
159 screen->s_hsync_len = S5_H_PW;
160 screen->s_left_margin = S5_H_BP;
161 screen->s_right_margin = S5_H_FP;
162 screen->s_hsync_len = S5_H_PW;
163 screen->s_upper_margin = S5_V_BP;
164 screen->s_lower_margin = S5_V_FP;
165 screen->s_vsync_len = S5_V_PW;
166 screen->s_hsync_st = S5_H_ST;
167 screen->s_vsync_st = S5_V_ST;
170 #if defined(CONFIG_RK616_LVDS)
171 screen->pll_cfg_val = S5_PLL_CFG_VAL;
172 screen->frac = S5_FRAC;
173 screen->scl_vst = S5_SCL_VST;
174 screen->scl_hst = S5_SCL_HST;
175 screen->vif_vst = S5_VIF_VST;
176 screen->vif_hst = S5_VIF_HST;
180 printk("%s lcd not support dual display at this hdmi resolution %d \n",__func__,hdmi_resolution);
188 #define set_scaler_info NULL
191 void set_lcd_info(struct rk29fb_screen *screen, struct rk29lcd_info *lcd_info )
194 #if defined(RK_USE_SCREEN_ID)
195 set_lcd_info_by_id(screen,lcd_info);
197 screen->type = SCREEN_TYPE;
198 screen->face = OUT_FACE;
199 screen->lvds_format = LVDS_FORMAT; //lvds data format
202 screen->x_res = H_VD; //screen resolution
203 screen->y_res = V_VD;
205 screen->width = LCD_WIDTH;
206 screen->height = LCD_HEIGHT;
209 screen->lcdc_aclk = LCDC_ACLK; // Timing
210 screen->pixclock = DCLK;
211 screen->left_margin = H_BP;
212 screen->right_margin = H_FP;
213 screen->hsync_len = H_PW;
214 screen->upper_margin = V_BP;
215 screen->lower_margin = V_FP;
216 screen->vsync_len = V_PW;
219 screen->pin_hsync = HSYNC_POL; //Pin polarity
220 screen->pin_vsync = VSYNC_POL;
221 screen->pin_den = DEN_POL;
222 screen->pin_dclk = DCLK_POL;
225 screen->swap_rb = SWAP_RB; // Swap rule
226 screen->swap_rg = SWAP_RG;
227 screen->swap_gb = SWAP_GB;
228 screen->swap_delta = 0;
229 screen->swap_dumy = 0;
231 #if defined(CONFIG_MIPI_DSI)
233 #if defined(MIPI_DSI_LANE)
234 screen->dsi_lane = MIPI_DSI_LANE;
236 screen->dsi_lane = 4;
238 //screen->dsi_video_mode = MIPI_DSI_VIDEO_MODE;
239 #if defined(MIPI_DSI_HS_CLK)
240 screen->hs_tx_clk = MIPI_DSI_HS_CLK;
242 screen->hs_tx_clk = 1000000000; //1GHz
248 /* Operation function*/
249 #if defined(RK_SCREEN_INIT) //some screen need to init by spi or i2c
250 screen->init = rk_lcd_init;
251 screen->standby = rk_lcd_standby;
253 gLcd_info = lcd_info;
256 #if defined(USE_RK_DSP_LUT)
257 screen->dsp_lut = dsp_lut;
260 #if defined(CONFIG_ONE_LCDC_DUAL_OUTPUT_INF)
261 screen->sscreen_get = set_scaler_info;
268 size_t get_fb_size(void)
271 #if defined(CONFIG_THREE_FB_BUFFER)
272 size = ((H_VD)*(V_VD)<<2)* 3; //three buffer
274 size = ((H_VD)*(V_VD)<<2)<<1; //two buffer
276 return ALIGN(size,SZ_1M);