We can be assured that a DCON device has an OLPC panel that's 152x114 mm. This adds fields to GeodeRec to allow other panels to potentially override physical width/height fields, and also allows xorg.conf to override the values.
Signed-off-by: Andres Salomon <[EMAIL PROTECTED]> --- src/geode.h | 2 ++ src/geode_dcon.c | 6 ++++++ src/lx_output.c | 11 +++++++++++ 3 files changed, 19 insertions(+), 0 deletions(-) diff --git a/src/geode.h b/src/geode.h index e748ec6..37bee2e 100644 --- a/src/geode.h +++ b/src/geode.h @@ -196,6 +196,8 @@ typedef struct _geodeRec Bool tryCompression; Bool tryHWCursor; + int mm_width, mm_height; /* physical display size */ + unsigned long CursorStartOffset; int Pitch; /* display FB pitch */ diff --git a/src/geode_dcon.c b/src/geode_dcon.c index 0baa178..13e5fd2 100644 --- a/src/geode_dcon.c +++ b/src/geode_dcon.c @@ -92,6 +92,9 @@ dcon_init(ScrnInfoPtr pScrni) { GeodeRec *pGeode = GEODEPTR(pScrni); + pGeode->mm_width = 0; + pGeode->mm_height = 0; + if (!dcon_present()) { xf86DrvMsg(pScrni->scrnIndex, X_DEFAULT, "No DCON is present\n"); return FALSE; @@ -115,6 +118,9 @@ dcon_init(ScrnInfoPtr pScrni) pGeode->panelMode->VTotal = 912; pGeode->panelMode->Flags = V_NHSYNC | V_NVSYNC; + pGeode->mm_width = 152; + pGeode->mm_height = 114; + xf86SetModeDefaultName(pGeode->panelMode); /* TODO: Print board revision once sysfs exports it. */ diff --git a/src/lx_output.c b/src/lx_output.c index 53a538a..5508477 100644 --- a/src/lx_output.c +++ b/src/lx_output.c @@ -249,6 +249,7 @@ LXSetupOutput(ScrnInfoPtr pScrni) { xf86OutputPtr output; LXOutputPrivatePtr lxpriv; + GeodePtr pGeode = GEODEPTR(pScrni); output = xf86OutputCreate(pScrni, &lx_output_funcs, "default"); @@ -267,6 +268,16 @@ LXSetupOutput(ScrnInfoPtr pScrni) GeodeI2CInit(pScrni, &lxpriv->pDDCBus, "CS5536 DDC"); + if (pScrni->monitor->widthmm && pScrni->monitor->heightmm) { + /* prioritize the admin's screen size */ + output->mm_width = pScrni->monitor->widthmm; + output->mm_height = pScrni->monitor->heightmm; + } else if (pGeode->mm_width && pGeode->mm_height) { + /* if we have a panel that we're certain of the size of, set it */ + output->mm_width = pScrni->monitor->widthmm = pGeode->mm_width; + output->mm_height = pScrni->monitor->heightmm = pGeode->mm_height; + } + /* We only have one CRTC, and this output is tied to it */ output->possible_crtcs = 1; } -- 1.5.6.5 _______________________________________________ xorg mailing list xorg@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/xorg