aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/video/omap2/dss
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/video/omap2/dss')
-rw-r--r--drivers/video/omap2/dss/dispc.c43
-rw-r--r--drivers/video/omap2/dss/dpi.c2
-rw-r--r--drivers/video/omap2/dss/dsi.c4
-rw-r--r--drivers/video/omap2/dss/dss.h3
-rw-r--r--drivers/video/omap2/dss/hdmi.c3
-rw-r--r--drivers/video/omap2/dss/rfbi.c4
-rw-r--r--drivers/video/omap2/dss/sdi.c2
-rw-r--r--drivers/video/omap2/dss/venc.c7
8 files changed, 37 insertions, 31 deletions
diff --git a/drivers/video/omap2/dss/dispc.c b/drivers/video/omap2/dss/dispc.c
index ac9bf750e77..d6a4b31fa0b 100644
--- a/drivers/video/omap2/dss/dispc.c
+++ b/drivers/video/omap2/dss/dispc.c
@@ -992,7 +992,7 @@ static void dispc_mgr_set_lcd_size(enum omap_channel channel, u16 width,
992 dispc_write_reg(DISPC_SIZE_MGR(channel), val); 992 dispc_write_reg(DISPC_SIZE_MGR(channel), val);
993} 993}
994 994
995void dispc_set_digit_size(u16 width, u16 height) 995static void dispc_mgr_set_digit_size(u16 width, u16 height)
996{ 996{
997 u32 val; 997 u32 val;
998 BUG_ON((width > (1 << 11)) || (height > (1 << 11))); 998 BUG_ON((width > (1 << 11)) || (height > (1 << 11)));
@@ -2341,37 +2341,42 @@ static void _dispc_mgr_set_lcd_timings(enum omap_channel channel, int hsw,
2341} 2341}
2342 2342
2343/* change name to mode? */ 2343/* change name to mode? */
2344void dispc_mgr_set_lcd_timings(enum omap_channel channel, 2344void dispc_mgr_set_timings(enum omap_channel channel,
2345 struct omap_video_timings *timings) 2345 struct omap_video_timings *timings)
2346{ 2346{
2347 unsigned xtot, ytot; 2347 unsigned xtot, ytot;
2348 unsigned long ht, vt; 2348 unsigned long ht, vt;
2349 2349
2350 if (!_dispc_lcd_timings_ok(timings->hsw, timings->hfp, 2350 DSSDBG("channel %d xres %u yres %u\n", channel, timings->x_res,
2351 timings->hbp, timings->vsw, 2351 timings->y_res);
2352 timings->vfp, timings->vbp)) 2352
2353 BUG(); 2353 if (dispc_mgr_is_lcd(channel)) {
2354 if (!dispc_lcd_timings_ok(timings))
2355 BUG();
2354 2356
2355 _dispc_mgr_set_lcd_timings(channel, timings->hsw, timings->hfp, 2357 _dispc_mgr_set_lcd_timings(channel, timings->hsw, timings->hfp,
2356 timings->hbp, timings->vsw, timings->vfp, 2358 timings->hbp, timings->vsw, timings->vfp,
2357 timings->vbp); 2359 timings->vbp);
2358 2360
2359 dispc_mgr_set_lcd_size(channel, timings->x_res, timings->y_res); 2361 dispc_mgr_set_lcd_size(channel, timings->x_res, timings->y_res);
2360 2362
2361 xtot = timings->x_res + timings->hfp + timings->hsw + timings->hbp; 2363 xtot = timings->x_res + timings->hfp + timings->hsw +
2362 ytot = timings->y_res + timings->vfp + timings->vsw + timings->vbp; 2364 timings->hbp;
2365 ytot = timings->y_res + timings->vfp + timings->vsw +
2366 timings->vbp;
2363 2367
2364 ht = (timings->pixel_clock * 1000) / xtot; 2368 ht = (timings->pixel_clock * 1000) / xtot;
2365 vt = (timings->pixel_clock * 1000) / xtot / ytot; 2369 vt = (timings->pixel_clock * 1000) / xtot / ytot;
2366 2370
2367 DSSDBG("channel %d xres %u yres %u\n", channel, timings->x_res, 2371 DSSDBG("pck %u\n", timings->pixel_clock);
2368 timings->y_res); 2372 DSSDBG("hsw %d hfp %d hbp %d vsw %d vfp %d vbp %d\n",
2369 DSSDBG("pck %u\n", timings->pixel_clock);
2370 DSSDBG("hsw %d hfp %d hbp %d vsw %d vfp %d vbp %d\n",
2371 timings->hsw, timings->hfp, timings->hbp, 2373 timings->hsw, timings->hfp, timings->hbp,
2372 timings->vsw, timings->vfp, timings->vbp); 2374 timings->vsw, timings->vfp, timings->vbp);
2373 2375
2374 DSSDBG("hsync %luHz, vsync %luHz\n", ht, vt); 2376 DSSDBG("hsync %luHz, vsync %luHz\n", ht, vt);
2377 } else {
2378 dispc_mgr_set_digit_size(timings->x_res, timings->y_res);
2379 }
2375} 2380}
2376 2381
2377static void dispc_mgr_set_lcd_divisor(enum omap_channel channel, u16 lck_div, 2382static void dispc_mgr_set_lcd_divisor(enum omap_channel channel, u16 lck_div,
diff --git a/drivers/video/omap2/dss/dpi.c b/drivers/video/omap2/dss/dpi.c
index faaf305fda2..7dd7f9d2590 100644
--- a/drivers/video/omap2/dss/dpi.c
+++ b/drivers/video/omap2/dss/dpi.c
@@ -156,7 +156,7 @@ static int dpi_set_mode(struct omap_dss_device *dssdev)
156 t->pixel_clock = pck; 156 t->pixel_clock = pck;
157 } 157 }
158 158
159 dispc_mgr_set_lcd_timings(dssdev->manager->id, t); 159 dispc_mgr_set_timings(dssdev->manager->id, t);
160 160
161 return 0; 161 return 0;
162} 162}
diff --git a/drivers/video/omap2/dss/dsi.c b/drivers/video/omap2/dss/dsi.c
index 0d2c53f4271..b6cf03cc922 100644
--- a/drivers/video/omap2/dss/dsi.c
+++ b/drivers/video/omap2/dss/dsi.c
@@ -4219,12 +4219,12 @@ static int dsi_display_init_dispc(struct omap_dss_device *dssdev)
4219 dispc_mgr_enable_stallmode(dssdev->manager->id, true); 4219 dispc_mgr_enable_stallmode(dssdev->manager->id, true);
4220 dispc_mgr_enable_fifohandcheck(dssdev->manager->id, 1); 4220 dispc_mgr_enable_fifohandcheck(dssdev->manager->id, 1);
4221 4221
4222 dispc_mgr_set_lcd_timings(dssdev->manager->id, &timings); 4222 dispc_mgr_set_timings(dssdev->manager->id, &timings);
4223 } else { 4223 } else {
4224 dispc_mgr_enable_stallmode(dssdev->manager->id, false); 4224 dispc_mgr_enable_stallmode(dssdev->manager->id, false);
4225 dispc_mgr_enable_fifohandcheck(dssdev->manager->id, 0); 4225 dispc_mgr_enable_fifohandcheck(dssdev->manager->id, 0);
4226 4226
4227 dispc_mgr_set_lcd_timings(dssdev->manager->id, 4227 dispc_mgr_set_timings(dssdev->manager->id,
4228 &dssdev->panel.timings); 4228 &dssdev->panel.timings);
4229 } 4229 }
4230 4230
diff --git a/drivers/video/omap2/dss/dss.h b/drivers/video/omap2/dss/dss.h
index e8dea7485f7..da91822b596 100644
--- a/drivers/video/omap2/dss/dss.h
+++ b/drivers/video/omap2/dss/dss.h
@@ -407,7 +407,6 @@ void dispc_disable_sidle(void);
407void dispc_lcd_enable_signal_polarity(bool act_high); 407void dispc_lcd_enable_signal_polarity(bool act_high);
408void dispc_lcd_enable_signal(bool enable); 408void dispc_lcd_enable_signal(bool enable);
409void dispc_pck_free_enable(bool enable); 409void dispc_pck_free_enable(bool enable);
410void dispc_set_digit_size(u16 width, u16 height);
411void dispc_enable_fifomerge(bool enable); 410void dispc_enable_fifomerge(bool enable);
412void dispc_enable_gamma_table(bool enable); 411void dispc_enable_gamma_table(bool enable);
413void dispc_set_loadmode(enum omap_dss_load_mode mode); 412void dispc_set_loadmode(enum omap_dss_load_mode mode);
@@ -442,7 +441,7 @@ void dispc_mgr_enable_stallmode(enum omap_channel channel, bool enable);
442void dispc_mgr_set_tft_data_lines(enum omap_channel channel, u8 data_lines); 441void dispc_mgr_set_tft_data_lines(enum omap_channel channel, u8 data_lines);
443void dispc_mgr_set_lcd_display_type(enum omap_channel channel, 442void dispc_mgr_set_lcd_display_type(enum omap_channel channel,
444 enum omap_lcd_display_type type); 443 enum omap_lcd_display_type type);
445void dispc_mgr_set_lcd_timings(enum omap_channel channel, 444void dispc_mgr_set_timings(enum omap_channel channel,
446 struct omap_video_timings *timings); 445 struct omap_video_timings *timings);
447void dispc_mgr_set_pol_freq(enum omap_channel channel, 446void dispc_mgr_set_pol_freq(enum omap_channel channel,
448 enum omap_panel_config config, u8 acbi, u8 acb); 447 enum omap_panel_config config, u8 acbi, u8 acb);
diff --git a/drivers/video/omap2/dss/hdmi.c b/drivers/video/omap2/dss/hdmi.c
index c4b4f6950a9..56f6e9ce126 100644
--- a/drivers/video/omap2/dss/hdmi.c
+++ b/drivers/video/omap2/dss/hdmi.c
@@ -376,8 +376,7 @@ static int hdmi_power_on(struct omap_dss_device *dssdev)
376 dispc_enable_gamma_table(0); 376 dispc_enable_gamma_table(0);
377 377
378 /* tv size */ 378 /* tv size */
379 dispc_set_digit_size(dssdev->panel.timings.x_res, 379 dispc_mgr_set_timings(dssdev->manager->id, &dssdev->panel.timings);
380 dssdev->panel.timings.y_res);
381 380
382 hdmi.ip_data.ops->video_enable(&hdmi.ip_data, 1); 381 hdmi.ip_data.ops->video_enable(&hdmi.ip_data, 1);
383 382
diff --git a/drivers/video/omap2/dss/rfbi.c b/drivers/video/omap2/dss/rfbi.c
index 97b6c4a2bce..a81ffcbfa68 100644
--- a/drivers/video/omap2/dss/rfbi.c
+++ b/drivers/video/omap2/dss/rfbi.c
@@ -320,7 +320,7 @@ static void rfbi_transfer_area(struct omap_dss_device *dssdev, u16 width,
320 320
321 DSSDBG("rfbi_transfer_area %dx%d\n", width, height); 321 DSSDBG("rfbi_transfer_area %dx%d\n", width, height);
322 322
323 dispc_mgr_set_lcd_timings(dssdev->manager->id, &timings); 323 dispc_mgr_set_timings(dssdev->manager->id, &timings);
324 324
325 dispc_mgr_enable(dssdev->manager->id, true); 325 dispc_mgr_enable(dssdev->manager->id, true);
326 326
@@ -804,7 +804,7 @@ int omap_rfbi_prepare_update(struct omap_dss_device *dssdev,
804 if (*w == 0 || *h == 0) 804 if (*w == 0 || *h == 0)
805 return -EINVAL; 805 return -EINVAL;
806 806
807 dispc_mgr_set_lcd_timings(dssdev->manager->id, &timings); 807 dispc_mgr_set_timings(dssdev->manager->id, &timings);
808 808
809 return 0; 809 return 0;
810} 810}
diff --git a/drivers/video/omap2/dss/sdi.c b/drivers/video/omap2/dss/sdi.c
index 8266ca0d666..741b8341439 100644
--- a/drivers/video/omap2/dss/sdi.c
+++ b/drivers/video/omap2/dss/sdi.c
@@ -107,7 +107,7 @@ int omapdss_sdi_display_enable(struct omap_dss_device *dssdev)
107 } 107 }
108 108
109 109
110 dispc_mgr_set_lcd_timings(dssdev->manager->id, t); 110 dispc_mgr_set_timings(dssdev->manager->id, t);
111 111
112 r = dss_set_clock_div(&dss_cinfo); 112 r = dss_set_clock_div(&dss_cinfo);
113 if (r) 113 if (r)
diff --git a/drivers/video/omap2/dss/venc.c b/drivers/video/omap2/dss/venc.c
index 13a20da8ea9..30bbb63421b 100644
--- a/drivers/video/omap2/dss/venc.c
+++ b/drivers/video/omap2/dss/venc.c
@@ -421,6 +421,7 @@ static int venc_power_on(struct omap_dss_device *dssdev)
421{ 421{
422 u32 l; 422 u32 l;
423 int r; 423 int r;
424 struct omap_video_timings timings;
424 425
425 venc_reset(); 426 venc_reset();
426 venc_write_config(venc_timings_to_config(&dssdev->panel.timings)); 427 venc_write_config(venc_timings_to_config(&dssdev->panel.timings));
@@ -440,8 +441,10 @@ static int venc_power_on(struct omap_dss_device *dssdev)
440 441
441 venc_write_reg(VENC_OUTPUT_CONTROL, l); 442 venc_write_reg(VENC_OUTPUT_CONTROL, l);
442 443
443 dispc_set_digit_size(dssdev->panel.timings.x_res, 444 timings = dssdev->panel.timings;
444 dssdev->panel.timings.y_res/2); 445 timings.y_res /= 2;
446
447 dispc_mgr_set_timings(dssdev->manager->id, &timings);
445 448
446 r = regulator_enable(venc.vdda_dac_reg); 449 r = regulator_enable(venc.vdda_dac_reg);
447 if (r) 450 if (r)