diff options
Diffstat (limited to 'src/lx_output.c')
-rw-r--r-- | src/lx_output.c | 31 |
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; } |