Separate DDC mode list creation from MonPtr creation.
This will be used by the intel driver, and likely other RandR 1.2 drivers.
This commit is contained in:
		
							parent
							
								
									fbd0944338
								
							
						
					
					
						commit
						f62ac3ec39
					
				|  | @ -204,32 +204,14 @@ DDCGuessRangesFromModes(int scrnIndex, MonPtr Monitor, DisplayModePtr Modes) | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /*
 | DisplayModePtr | ||||||
|  * Fill out MonPtr with xf86MonPtr information. | xf86DDCGetModes(int scrnIndex, xf86MonPtr DDC) | ||||||
|  */ |  | ||||||
| void |  | ||||||
| xf86DDCMonitorSet(int scrnIndex, MonPtr Monitor, xf86MonPtr DDC) |  | ||||||
| { | { | ||||||
|  |     int preferred, i; | ||||||
|     DisplayModePtr Modes = NULL, Mode; |     DisplayModePtr Modes = NULL, Mode; | ||||||
|     int i, clock; |  | ||||||
|     Bool have_hsync = FALSE, have_vrefresh = FALSE; |  | ||||||
|     int preferred; |  | ||||||
| 
 |  | ||||||
|     if (!Monitor || !DDC) |  | ||||||
|         return; |  | ||||||
| 
 |  | ||||||
|     Monitor->DDC = DDC; |  | ||||||
| 
 | 
 | ||||||
|     preferred = PREFERRED_TIMING_MODE(DDC->features.msc); |     preferred = PREFERRED_TIMING_MODE(DDC->features.msc); | ||||||
| 
 | 
 | ||||||
|     Monitor->widthmm = 10 * DDC->features.hsize; |  | ||||||
|     Monitor->heightmm = 10 * DDC->features.vsize; |  | ||||||
| 
 |  | ||||||
|     /* If this is a digital display, then we can use reduced blanking */ |  | ||||||
|     if (DDC->features.input_type) |  | ||||||
|         Monitor->reducedblanking = TRUE; |  | ||||||
|     /* Allow the user to also enable this through config */ |  | ||||||
| 
 |  | ||||||
|     /* Add established timings */ |     /* Add established timings */ | ||||||
|     Mode = DDCModesFromEstablished(scrnIndex, &DDC->timings1); |     Mode = DDCModesFromEstablished(scrnIndex, &DDC->timings1); | ||||||
|     Modes = xf86ModesAdd(Modes, Mode); |     Modes = xf86ModesAdd(Modes, Mode); | ||||||
|  | @ -238,12 +220,61 @@ xf86DDCMonitorSet(int scrnIndex, MonPtr Monitor, xf86MonPtr DDC) | ||||||
|     Mode = DDCModesFromStandardTiming(scrnIndex, DDC->timings2); |     Mode = DDCModesFromStandardTiming(scrnIndex, DDC->timings2); | ||||||
|     Modes = xf86ModesAdd(Modes, Mode); |     Modes = xf86ModesAdd(Modes, Mode); | ||||||
| 
 | 
 | ||||||
|  |     for (i = 0; i < DET_TIMINGS; i++) { | ||||||
|  | 	struct detailed_monitor_section *det_mon = &DDC->det_mon[i]; | ||||||
|  | 
 | ||||||
|  |         switch (det_mon->type) { | ||||||
|  |         case DT: | ||||||
|  |             Mode = DDCModeFromDetailedTiming(scrnIndex, | ||||||
|  |                                              &det_mon->section.d_timings, | ||||||
|  | 					     preferred); | ||||||
|  | 	    preferred = 0; | ||||||
|  |             Modes = xf86ModesAdd(Modes, Mode); | ||||||
|  |             break; | ||||||
|  |         case DS_STD_TIMINGS: | ||||||
|  |             Mode = DDCModesFromStandardTiming(scrnIndex, | ||||||
|  | 					      det_mon->section.std_t); | ||||||
|  |             Modes = xf86ModesAdd(Modes, Mode); | ||||||
|  |             break; | ||||||
|  |         default: | ||||||
|  |             break; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     return Modes; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Fill out MonPtr with xf86MonPtr information. | ||||||
|  |  */ | ||||||
|  | void | ||||||
|  | xf86DDCMonitorSet(int scrnIndex, MonPtr Monitor, xf86MonPtr DDC) | ||||||
|  | { | ||||||
|  |     DisplayModePtr Modes = NULL, Mode; | ||||||
|  |     int i, clock; | ||||||
|  |     Bool have_hsync = FALSE, have_vrefresh = FALSE; | ||||||
|  | 
 | ||||||
|  |     if (!Monitor || !DDC) | ||||||
|  |         return; | ||||||
|  | 
 | ||||||
|  |     Monitor->DDC = DDC; | ||||||
|  | 
 | ||||||
|  |     Monitor->widthmm = 10 * DDC->features.hsize; | ||||||
|  |     Monitor->heightmm = 10 * DDC->features.vsize; | ||||||
|  | 
 | ||||||
|  |     /* If this is a digital display, then we can use reduced blanking */ | ||||||
|  |     if (DDC->features.input_type) | ||||||
|  |         Monitor->reducedblanking = TRUE; | ||||||
|  |     /* Allow the user to also enable this through config */ | ||||||
|  | 
 | ||||||
|  |     Modes = xf86DDCGetModes(scrnIndex, DDC); | ||||||
|  | 
 | ||||||
|     /* Skip EDID ranges if they were specified in the config file */ |     /* Skip EDID ranges if they were specified in the config file */ | ||||||
|     have_hsync = (Monitor->nHsync != 0); |     have_hsync = (Monitor->nHsync != 0); | ||||||
|     have_vrefresh = (Monitor->nVrefresh != 0); |     have_vrefresh = (Monitor->nVrefresh != 0); | ||||||
| 
 | 
 | ||||||
|     /* Go through the detailed monitor sections */ |     /* Go through the detailed monitor sections */ | ||||||
|     for (i = 0; i < DET_TIMINGS; i++) |     for (i = 0; i < DET_TIMINGS; i++) { | ||||||
|         switch (DDC->det_mon[i].type) { |         switch (DDC->det_mon[i].type) { | ||||||
|         case DS_RANGES: |         case DS_RANGES: | ||||||
| 	    if (!have_hsync) { | 	    if (!have_hsync) { | ||||||
|  | @ -278,22 +309,11 @@ xf86DDCMonitorSet(int scrnIndex, MonPtr Monitor, xf86MonPtr DDC) | ||||||
| 	    if (clock > Monitor->maxPixClock) | 	    if (clock > Monitor->maxPixClock) | ||||||
| 		Monitor->maxPixClock = clock; | 		Monitor->maxPixClock = clock; | ||||||
| 
 | 
 | ||||||
|             break; |  | ||||||
|         case DT: |  | ||||||
|             Mode = DDCModeFromDetailedTiming(scrnIndex, |  | ||||||
|                                              &DDC->det_mon[i].section.d_timings, |  | ||||||
| 					     preferred); |  | ||||||
| 	    preferred = 0; |  | ||||||
|             Modes = xf86ModesAdd(Modes, Mode); |  | ||||||
|             break; |  | ||||||
|         case DS_STD_TIMINGS: |  | ||||||
|             Mode = DDCModesFromStandardTiming(scrnIndex, |  | ||||||
|                                              DDC->det_mon[i].section.std_t); |  | ||||||
|             Modes = xf86ModesAdd(Modes, Mode); |  | ||||||
|             break; |             break; | ||||||
|         default: |         default: | ||||||
|             break; |             break; | ||||||
|         } |         } | ||||||
|  |     } | ||||||
| 
 | 
 | ||||||
|     if (Modes) { |     if (Modes) { | ||||||
|         /* Print Modes */ |         /* Print Modes */ | ||||||
|  |  | ||||||
|  | @ -59,6 +59,8 @@ extern void xf86print_vdif( | ||||||
|     xf86vdifPtr v |     xf86vdifPtr v | ||||||
| ); | ); | ||||||
| 
 | 
 | ||||||
|  | DisplayModePtr xf86DDCGetModes(int scrnIndex, xf86MonPtr DDC); | ||||||
|  | 
 | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue