summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/lx_output.c31
1 files changed, 29 insertions, 2 deletions
diff --git a/src/lx_output.c b/src/lx_output.c
index 17634d4..cd1809b 100644
--- a/src/lx_output.c
+++ b/src/lx_output.c
@@ -152,8 +152,35 @@ lx_output_restore(xf86OutputPtr output)
static int
lx_output_mode_valid(xf86OutputPtr output, DisplayModePtr pMode)
{
- /* FIXME: Mode validation code should be placed here for the modes
- * that geode can not support */
+ ScrnInfoPtr pScrni = output->scrn;
+ GeodeRec *pGeode = GEODEPTR(pScrni);
+
+ /* DCON Panel specific resolution - OLPC's one */
+ if (pGeode->Output & OUTPUT_DCON) {
+ if (pGeode->panelMode->HDisplay == 1200 &&
+ pGeode->panelMode->VDisplay == 900)
+ return MODE_OK;
+ }
+
+ if ((pGeode->Output & OUTPUT_PANEL) &&
+ gfx_is_panel_mode_supported(pGeode->panelMode->HDisplay,
+ pGeode->panelMode->VDisplay,
+ pMode->HDisplay,
+ pMode->VDisplay,
+ pScrni->bitsPerPixel) != -1) {
+
+ return MODE_OK;
+ }
+
+ if (gfx_is_display_mode_supported(pMode->HDisplay,
+ pMode->VDisplay,
+ pScrni->bitsPerPixel,
+ GeodeGetRefreshRate(pMode)) != -1) {
+ return MODE_OK;
+ }
+
+ if (pMode->type & (M_T_DRIVER | M_T_PREFERRED))
+ return MODE_OK;
return MODE_OK;
}