Use EDID data to set screen physical size at server startup.
Screen physical size is set to a random value before the RandR code gets control, override that and reset it to a value based on the compat_output physical size (if available). If that output has no physical size, just use 96dpi as the default resolution and set the physical size as appropriate. (cherry picked from commit 843077f23a1b49bd712d931421753e3a09d4008c)
This commit is contained in:
		
							parent
							
								
									47f8361c3a
								
							
						
					
					
						commit
						bed76caa6c
					
				|  | @ -422,8 +422,28 @@ xf86RandR12CreateScreenResources (ScreenPtr pScreen) | |||
| 	} | ||||
| 	else | ||||
| 	{ | ||||
| 	    mmWidth = pScreen->mmWidth; | ||||
| 	    mmHeight = pScreen->mmHeight; | ||||
| 	    xf86OutputPtr   output = config->output[config->compat_output]; | ||||
| 	    xf86CrtcPtr	    crtc = output->crtc; | ||||
| 
 | ||||
| 	    if (crtc && crtc->mode.HDisplay && | ||||
| 		output->mm_width && output->mm_height) | ||||
| 	    { | ||||
| 		/*
 | ||||
| 		 * If the output has a mode and a declared size, use that | ||||
| 		 * to scale the screen size | ||||
| 		 */ | ||||
| 		DisplayModePtr	mode = &crtc->mode; | ||||
| 		mmWidth = output->mm_width * width / mode->HDisplay; | ||||
| 		mmHeight = output->mm_height * height / mode->VDisplay; | ||||
| 	    } | ||||
| 	    else | ||||
| 	    { | ||||
| 		/*
 | ||||
| 		 * Otherwise, just set the screen to 96dpi | ||||
| 		 */ | ||||
| 		mmWidth = width * 25.4 / 96; | ||||
| 		mmHeight = height * 25.4 / 96; | ||||
| 	    } | ||||
| 	} | ||||
| 	xf86DrvMsg(pScrn->scrnIndex, X_INFO, | ||||
| 		   "Setting screen physical size to %d x %d\n", | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue