aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFlorian Tobias Schandinat <FlorianSchandinat@gmx.de>2011-04-15 17:35:25 -0400
committerFlorian Tobias Schandinat <FlorianSchandinat@gmx.de>2011-04-15 17:35:25 -0400
commitb4ce6a285b65be4fb858728b3bbe9011242b769f (patch)
tree70b19d50dc66f20b9d38160e1fceff7948304f79
parent3f086fe93f734ba76f2e130777687f81e0cbb318 (diff)
viafb: fix OLPC DCON refresh rate
This patch fixes a regression introduced by fd3cc69848b7e1873e5f12bbcdd572b20277ecf3a "viafb: remove duplicated clock storage" caused by an incosistent mode which pretended to have a higher refresh rate than it actually had. The wrong refresh rate resulted in a calculated higher pixclock which the OLPC DCON could not handle. By reducing the refresh rate to 50Hz we get close to the old pixclock which makes the OLPC display usable again. Minor other adjustments are needed as 60Hz is assumed to be a safe value which is not true for OLPC DCON. This is no problem as we only support 1200x900 on the OLPC. Signed-off-by: Florian Tobias Schandinat <FlorianSchandinat@gmx.de> Reported-by: Daniel Drake <dsd@laptop.org>
-rw-r--r--drivers/video/via/hw.c8
-rw-r--r--drivers/video/via/viamode.c2
2 files changed, 7 insertions, 3 deletions
diff --git a/drivers/video/via/hw.c b/drivers/video/via/hw.c
index dc4c778877ce..980e263f1875 100644
--- a/drivers/video/via/hw.c
+++ b/drivers/video/via/hw.c
@@ -2598,8 +2598,12 @@ int viafb_get_refresh(int hres, int vres, u32 long_refresh)
2598 best = &vmode->crtc[i]; 2598 best = &vmode->crtc[i];
2599 } 2599 }
2600 2600
2601 if (abs(best->refresh_rate - long_refresh) > 3) 2601 if (abs(best->refresh_rate - long_refresh) > 3) {
2602 return 60; 2602 if (hres == 1200 && vres == 900)
2603 return 50; /* OLPC DCON only supports 50 Hz */
2604 else
2605 return 60;
2606 }
2603 2607
2604 return best->refresh_rate; 2608 return best->refresh_rate;
2605} 2609}
diff --git a/drivers/video/via/viamode.c b/drivers/video/via/viamode.c
index 8c5bc41ff6a4..260d339b236c 100644
--- a/drivers/video/via/viamode.c
+++ b/drivers/video/via/viamode.c
@@ -606,7 +606,7 @@ static struct crt_mode_table CRTM1200x720[] = {
606/* 1200x900 (DCON) */ 606/* 1200x900 (DCON) */
607static struct crt_mode_table DCON1200x900[] = { 607static struct crt_mode_table DCON1200x900[] = {
608 /* r_rate, hsp, vsp */ 608 /* r_rate, hsp, vsp */
609 {REFRESH_60, M1200X900_R60_HSP, M1200X900_R60_VSP, 609 {REFRESH_50, M1200X900_R60_HSP, M1200X900_R60_VSP,
610 /* The correct htotal is 1240, but this doesn't raster on VX855. */ 610 /* The correct htotal is 1240, but this doesn't raster on VX855. */
611 /* Via suggested changing to a multiple of 16, hence 1264. */ 611 /* Via suggested changing to a multiple of 16, hence 1264. */
612 /* HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */ 612 /* HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */