Subject: viafb OLPC patches

This patch series contains OLPC specific patches. One fixes the
devices connected as seen by the driver and the other is a further
refresh rate reduction.
Both are required to prevent regressions of the other patch series
as we increasingly require the information of the driver to be
correct which (hopefully only on OLPC) is not the case now.

As usual all patches are also available at
git://github.com/schandinat/linux-2.6.git viafb-olpc

and will soon show up in linux-next.


Thanks,

Florian Tobias Schandinat


Subject: [PATCH 1/2] viafb: fix OLPC XO 1.5 device connection

This patch fixes the devices connected on OLPC. The OLPC panel seems
to be connected to DVP1 and LVDS2 for some reasons and if not both
are handled correct the display does not work correct or not at all.
This patch prevents regressions on the OLPC where it worked by
accident but would break in future as the driver did not know the
correct devices connected. This might also fix hardware scaling.
Hopefully the OLPC is the only device with such a requirement but it
will be certainly better to actually know what devices are actually
connected and to not work by accident.

Signed-off-by: Florian Tobias Schandinat <[email protected]>
---
drivers/video/via/hw.c | 5 +++++
1 files changed, 5 insertions(+), 0 deletions(-)

diff --git a/drivers/video/via/hw.c b/drivers/video/via/hw.c
index 980e263..b8f0110 100644
--- a/drivers/video/via/hw.c
+++ b/drivers/video/via/hw.c
@@ -20,6 +20,7 @@
*/

#include <linux/via-core.h>
+#include <asm/olpc.h>
#include "global.h"

static struct pll_config cle266_pll_config[] = {
@@ -875,6 +876,10 @@ void viafb_set_iga_path(void)
viaparinfo->chip_info->
lvds_chip_info2.output_interface);
}
+
+ /* looks like the OLPC has its display wired to DVP1 and LVDS2 */
+ if (machine_is_olpc())
+ viaparinfo->shared->iga2_devices = VIA_DVP1 | VIA_LVDS2;
}

static void set_color_register(u8 index, u8 red, u8 green, u8 blue)
--
1.6.3.2

Subject: [PATCH 2/2] viafb: reduce OLPC refresh a bit

When allowing some PLL calculation we get a frequency that seems to
be a bit higher than what the OLPC DCON likes resulting in a still
readable but not so good image. We don't really know whether this is
a problem with the calculation formula or the OLPC but as other
displays seem to be happy with the other modes adjusting the OLPC
refresh looks like the better thing. This patch prevents a
regression when dynamic PLL calculation is allowed.

Signed-off-by: Florian Tobias Schandinat <[email protected]>
---
drivers/video/via/hw.c | 2 +-
drivers/video/via/share.h | 1 +
drivers/video/via/viamode.c | 2 +-
3 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/drivers/video/via/hw.c b/drivers/video/via/hw.c
index b8f0110..56ad185 100644
--- a/drivers/video/via/hw.c
+++ b/drivers/video/via/hw.c
@@ -2605,7 +2605,7 @@ int viafb_get_refresh(int hres, int vres, u32 long_refresh)

if (abs(best->refresh_rate - long_refresh) > 3) {
if (hres == 1200 && vres == 900)
- return 50; /* OLPC DCON only supports 50 Hz */
+ return 49; /* OLPC DCON only supports 50 Hz */
else
return 60;
}
diff --git a/drivers/video/via/share.h b/drivers/video/via/share.h
index 4b7831f..62bed2b 100644
--- a/drivers/video/via/share.h
+++ b/drivers/video/via/share.h
@@ -290,6 +290,7 @@
#define HW_LAYOUT_LCD_EXTERNAL_LCD2 0x10

/* Definition Refresh Rate */
+#define REFRESH_49 49
#define REFRESH_50 50
#define REFRESH_60 60
#define REFRESH_75 75
diff --git a/drivers/video/via/viamode.c b/drivers/video/via/viamode.c
index 260d339..ccb5eec 100644
--- a/drivers/video/via/viamode.c
+++ b/drivers/video/via/viamode.c
@@ -606,7 +606,7 @@ static struct crt_mode_table CRTM1200x720[] = {
/* 1200x900 (DCON) */
static struct crt_mode_table DCON1200x900[] = {
/* r_rate, hsp, vsp */
- {REFRESH_50, M1200X900_R60_HSP, M1200X900_R60_VSP,
+ {REFRESH_49, M1200X900_R60_HSP, M1200X900_R60_VSP,
/* The correct htotal is 1240, but this doesn't raster on VX855. */
/* Via suggested changing to a multiple of 16, hence 1264. */
/* HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
--
1.6.3.2