Use the EDID info from LVDS panels :

* Read the EDID info on both port A (analog VGA monitor) and C (LVDS panel)
 * If an LVDS panel is detected, report the EDID resolutions instead of the BIOs settings

This fixes #6326, likely #5096, and possibly some others intel_extreme problems. Please test.
On the other hand, this make the screen preflet show the full list of more reported by the LVDS panel. As we don't support 
scaling, some of these modes are unuseable and lead to a garbled screen.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38329 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Adrien Destugues
2010-08-24 11:06:50 +00:00
parent 45b9ce0cd3
commit 0767bd3a8b
+15 -2
View File
@@ -158,13 +158,25 @@ create_mode_list(void)
bus.get_signals = &get_i2c_signals;
ddc2_init_timing(&bus);
if (ddc2_read_edid1(&bus, &gInfo->edid_info, NULL, NULL) == B_OK) {
status_t error = ddc2_read_edid1(&bus, &gInfo->edid_info, NULL, NULL);
if (error == B_OK) {
edid_dump(&gInfo->edid_info);
gInfo->has_edid = true;
} else {
TRACE(("intel_extreme: getting EDID failed!\n"));
TRACE(("intel_extreme: getting EDID on port A (analog) failed : %s. "
"Trying on port C (lvds)\n", strerror(error)));
bus.cookie = (void*)INTEL_I2C_IO_C;
error = ddc2_read_edid1(&bus, &gInfo->edid_info, NULL, NULL);
if (error == B_OK) {
edid_dump(&gInfo->edid_info);
gInfo->has_edid = true;
} else {
TRACE(("intel_extreme: getting EDID on port C failed : %s\n",
strerror(error)));
}
}
#if 0
// TODO: support lower modes via scaling and windowing
if (gInfo->head_mode & HEAD_MODE_LVDS_PANEL
&& ((gInfo->head_mode & HEAD_MODE_A_ANALOG) == 0)) {
@@ -185,6 +197,7 @@ create_mode_list(void)
gInfo->shared_info->mode_count = 1;
return B_OK;
}
#endif
// Otherwise return the 'real' list of modes
display_mode *list;