intel_extreme: sanitize EDID modes as well.
* Since we add those modes to our mode list, we should better accept them. * This may help with bug #9145, and #7523 if they still occur.
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2006-2010, Haiku, Inc. All Rights Reserved.
|
* Copyright 2006-2013, Haiku, Inc. All Rights Reserved.
|
||||||
* Distributed under the terms of the MIT License.
|
* Distributed under the terms of the MIT License.
|
||||||
*
|
*
|
||||||
* Support for i915 chipset and up based on the X driver,
|
* Support for i915 chipset and up based on the X driver,
|
||||||
@@ -504,6 +504,20 @@ sanitize_display_mode(display_mode& mode)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static bool
|
||||||
|
check_and_sanitize_display_mode(display_mode* mode)
|
||||||
|
{
|
||||||
|
uint16 width = mode->timing.h_display;
|
||||||
|
uint16 height = mode->timing.v_display;
|
||||||
|
|
||||||
|
// Only accept the mode if it is within the supported resolution
|
||||||
|
// TODO: sanitize_display_mode() should report resolution changes
|
||||||
|
// differently!
|
||||||
|
return !sanitize_display_mode(*mode) || (width == mode->timing.h_display
|
||||||
|
&& height == mode->timing.v_display);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// #pragma mark -
|
// #pragma mark -
|
||||||
|
|
||||||
|
|
||||||
@@ -600,8 +614,8 @@ create_mode_list(void)
|
|||||||
display_mode* list;
|
display_mode* list;
|
||||||
uint32 count = 0;
|
uint32 count = 0;
|
||||||
gInfo->mode_list_area = create_display_modes("intel extreme modes",
|
gInfo->mode_list_area = create_display_modes("intel extreme modes",
|
||||||
gInfo->has_edid ? &gInfo->edid_info : NULL, NULL, 0, NULL, 0, NULL,
|
gInfo->has_edid ? &gInfo->edid_info : NULL, NULL, 0, NULL, 0,
|
||||||
&list, &count);
|
&check_and_sanitize_display_mode, &list, &count);
|
||||||
if (gInfo->mode_list_area < B_OK)
|
if (gInfo->mode_list_area < B_OK)
|
||||||
return gInfo->mode_list_area;
|
return gInfo->mode_list_area;
|
||||||
|
|
||||||
@@ -670,7 +684,7 @@ intel_propose_display_mode(display_mode* target, const display_mode* low,
|
|||||||
|
|
||||||
// first search for the specified mode in the list, if no mode is found
|
// first search for the specified mode in the list, if no mode is found
|
||||||
// try to fix the target mode in sanitize_display_mode
|
// try to fix the target mode in sanitize_display_mode
|
||||||
// TODO: Only sanitize_display_mode should be used. However, at the moments
|
// TODO: Only sanitize_display_mode should be used. However, at the moment
|
||||||
// the mode constraints are not optimal and do not work for all
|
// the mode constraints are not optimal and do not work for all
|
||||||
// configurations.
|
// configurations.
|
||||||
for (uint32 i = 0; i < gInfo->shared_info->mode_count; i++) {
|
for (uint32 i = 0; i < gInfo->shared_info->mode_count; i++) {
|
||||||
|
|||||||
Reference in New Issue
Block a user