void fbdevHWSetVideoModes(ScrnInfoPtr pScrn) { char **modename; DisplayModePtr mode, this, last = pScrn->modes; if (NULL == pScrn->display->modes) return; pScrn->virtualX = pScrn->display->virtualX; pScrn->virtualY = pScrn->display->virtualY; for (modename = pScrn->display->modes; *modename != NULL; modename++) { for (mode = pScrn->monitor->Modes; mode != NULL; mode = mode->next) { if (0 == strcmp(mode->name, *modename)) { if (fbdevHWSetMode(pScrn, mode, TRUE)) break; xf86DrvMsg(pScrn->scrnIndex, X_INFO, "\tmode \"%s\" test failed\n", *modename); } } if (NULL == mode) { xf86DrvMsg(pScrn->scrnIndex, X_INFO, "\tmode \"%s\" not found\n", *modename); continue; } xf86DrvMsg(pScrn->scrnIndex, X_INFO, "\tmode \"%s\" ok\n", *modename); if (pScrn->virtualX < mode->HDisplay) pScrn->virtualX = mode->HDisplay; if (pScrn->virtualY < mode->VDisplay) pScrn->virtualY = mode->VDisplay; if (NULL == pScrn->modes) { this = pScrn->modes = xf86DuplicateMode(mode); this->next = this; this->prev = this; } else { this = xf86DuplicateMode(mode); this->next = pScrn->modes; this->prev = last; last->next = this; pScrn->modes->prev = this; } last = this; } }
static DisplayModePtr i830_dvo_get_modes(xf86OutputPtr output) { ScrnInfoPtr scrn = output->scrn; intel_screen_private *intel = intel_get_screen_private(scrn); I830OutputPrivatePtr intel_output = output->driver_private; DisplayModePtr modes; /* We should probably have an i2c driver get_modes function for those * devices which will have a fixed set of modes determined by the chip * (TV-out, for example), but for now with just TMDS and LVDS, that's not * the case. */ modes = i830_ddc_get_modes(output); if (modes != NULL) return modes; if (intel_output->i2c_drv->vid_rec->get_modes) { modes = intel_output->i2c_drv->vid_rec->get_modes (intel_output->i2c_drv->dev_priv); if (modes != NULL) return modes; } if (intel->lvds_fixed_mode != NULL) return xf86DuplicateMode(intel->lvds_fixed_mode); return NULL; }
static void didDMTTiming(int i, unsigned char *x, void *closure) { MonPtr mon = closure; mon->Modes = xf86ModesAdd(mon->Modes, xf86DuplicateMode(DMTModes + *x)); }
static DisplayModePtr imxDisplayGetBuiltinMode(ScrnInfoPtr pScrn) { DisplayModePtr builtinMode = xf86DuplicateMode(fbdevHWGetBuildinMode(pScrn)); if (NULL != builtinMode->name) { free(builtinMode->name); } builtinMode->name = strdup(IMX_DISPLAY_MODE_BUILTIN); return builtinMode; }
static DisplayModePtr G80SorGetLVDSModes(xf86OutputPtr output) { G80OutputPrivPtr pPriv = output->driver_private; /* If an EDID was read during detection, use the modes from that. */ DisplayModePtr modes = G80OutputGetDDCModes(output); if(modes) return modes; /* Otherwise, feed in the mode we read during initialization. */ return xf86DuplicateMode(pPriv->nativeMode); }
static Bool G80SorTMDSModeFixup(xf86OutputPtr output, DisplayModePtr mode, DisplayModePtr adjusted_mode) { int scrnIndex = output->scrn->scrnIndex; G80OutputPrivPtr pPriv = output->driver_private; DisplayModePtr modes = output->probed_modes; xf86DeleteMode(&pPriv->nativeMode, pPriv->nativeMode); if(modes) { // Find the preferred mode and use that as the "native" mode. // If no preferred mode is available, use the first one. DisplayModePtr mode; // Find the preferred mode. for(mode = modes; mode; mode = mode->next) { if(mode->type & M_T_PREFERRED) { xf86DrvMsgVerb(scrnIndex, X_INFO, 5, "%s: preferred mode is %s\n", output->name, mode->name); break; } } // XXX: May not want to allow scaling if no preferred mode is found. if(!mode) { mode = modes; xf86DrvMsgVerb(scrnIndex, X_INFO, 5, "%s: no preferred mode found, using %s\n", output->name, mode->name); } pPriv->nativeMode = xf86DuplicateMode(mode); G80CrtcDoModeFixup(pPriv->nativeMode, mode); } return G80SorModeFixup(output, mode, adjusted_mode); }
void vmwareAddDefaultMode(ScrnInfoPtr pScrn, uint32 dwidth, uint32 dheight) { DisplayModePtr *monitorModes = &pScrn->monitor->Modes; DisplayModePtr modes = NULL; if (monitorModes == NULL || *monitorModes == NULL) { goto out_err; } #ifdef HAVE_XORG_SERVER_1_2_0 if (dwidth && dheight) { MonPtr monitor = pScrn->monitor; DisplayModePtr mode = NULL; DisplayModeRec dynamic = { MODEPREFIX, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, MODESUFFIX }; unsigned dispModeCount = 0; char **dispModeList; char *dynModeName; char name[80]; VMWAREPtr pVMWARE = VMWAREPTR(pScrn); /* First, add the default mode name to the display mode * requests. */ snprintf(name, sizeof(name), VMW_DEFLT_MODE_NAME, dwidth, dheight); dynModeName = xnfstrdup(name); if (!dynModeName || !pScrn->display) goto out_err; if (pScrn->display->modes) { dispModeList = pScrn->display->modes; while(*dispModeList) dispModeList++; dispModeCount = (unsigned)(((size_t)dispModeList - (size_t)pScrn->display->modes) / sizeof(*dispModeList)); } dispModeList = xnfcalloc(dispModeCount + 2, sizeof(*dispModeList)); if (!dispModeList) goto out_err; memcpy(dispModeList, pScrn->display->modes, dispModeCount * sizeof(*dispModeList)); dispModeList[dispModeCount] = dynModeName; pScrn->display->modes = dispModeList; /* Then, add the default mode itself. */ dynamic.name = name; dynamic.HDisplay = dwidth; dynamic.HSyncStart = dynamic.HDisplay + 1; dynamic.HSyncEnd = dynamic.HSyncStart + 1; dynamic.HTotal = dynamic.HSyncEnd * 5 / 4; dynamic.VDisplay = dheight; dynamic.VSyncStart = dynamic.VDisplay + 1; dynamic.VSyncEnd = dynamic.VSyncStart + 1; dynamic.VTotal = dynamic.VSyncEnd + 1; if (monitor->nVrefresh > 0) dynamic.VRefresh = monitor->vrefresh[0].lo; else dynamic.VRefresh = 60; dynamic.Clock = dynamic.VRefresh * dynamic.VTotal * dynamic.HTotal / 1000; mode = xf86DuplicateMode(&dynamic); modes = xf86ModesAdd(modes, mode); if (dispModeCount == 0) { /* * Set up a large virtual size, so that we allow also * setting modes larger than the initial mode. * * We might also want to consider the case where * dispModeCount != 0, but the requested display modes * are not available. This is sufficient for now. */ if (pScrn->display->virtualX == 0) pScrn->display->virtualX = pVMWARE->maxWidth; if (pScrn->display->virtualY == 0) pScrn->display->virtualY = pVMWARE->maxHeight; } } *monitorModes = xf86ModesAdd(*monitorModes, modes); #else (void) modes; #endif return; out_err: xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "Failed to add default mode."); }