src/via_lvds.c | 51 +++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 43 insertions(+), 8 deletions(-)
New commits: commit aba5302d9017e3ed993909cafdd1ff5b7b39779d Author: Kevin Brace <kevinbr...@gmx.com> Date: Tue Mar 29 05:03:28 2016 -0700 Checking the availability of a flat panel before starting the detection One method VIA Technologies appears to be using in order to let the device driver know the availability a flat panel is through CRT Controller Extended Register - Scratch Pad Register 2 (3X5.3B). While this method is less than perfect, it appears to be the only method available that can support all IGPs. Use of this "hint" is necessary for correctly detecting flat panels that lack I2C bus support. Signed-off-by: Kevin Brace <kevinbr...@gmx.com> diff --git a/src/via_lvds.c b/src/via_lvds.c index c057cf9..dfe2c77 100644 --- a/src/via_lvds.c +++ b/src/via_lvds.c @@ -839,6 +839,8 @@ via_lvds_detect(xf86OutputPtr output) ScrnInfoPtr pScrn = output->scrn; VIAPtr pVia = VIAPTR(pScrn); vgaHWPtr hwp = VGAHWPTR(pScrn); + CARD8 cr3b = 0x00; + CARD8 cr3b_mask = 0x00; DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Entered via_lvds_detect.\n")); @@ -876,17 +878,32 @@ via_lvds_detect(xf86OutputPtr output) status = XF86OutputStatusConnected; } } else { - if (!panel->NativeWidth || !panel->NativeHeight) + /* Apparently this is the way VIA Technologies passes */ + /* the presence of a flat panel to the device driver */ + /* via BIOS setup. */ + if (pVia->Chipset == VIA_CLE266) { + cr3b_mask = 0x08; + } else { + cr3b_mask = 0x02; + } + + cr3b = hwp->readCrtc(hwp, 0x3B) & cr3b_mask; + + if (cr3b) { ViaPanelGetNativeModeFromScratchPad(output); - if (panel->NativeWidth && panel->NativeHeight) - status = XF86OutputStatusConnected; + if (panel->NativeWidth && panel->NativeHeight) { + status = XF86OutputStatusConnected; + } + } } - DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_PROBED, - "Detected Flat Panel Screen Resolution: " - "%dx%d\n", - panel->NativeWidth, panel->NativeHeight)); + if (status == XF86OutputStatusConnected) { + DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_PROBED, + "Detected Flat Panel Screen Resolution: " + "%dx%d\n", + panel->NativeWidth, panel->NativeHeight)); + } } else { status = XF86OutputStatusConnected; } @@ -1015,13 +1032,31 @@ via_lvds_init(ScrnInfoPtr pScrn) ViaPanelInfoPtr Panel = (ViaPanelInfoPtr) xnfcalloc(sizeof(ViaPanelInfoRec), 1); OptionInfoPtr Options = xnfalloc(sizeof(ViaPanelOptions)); MessageType from = X_DEFAULT; + const char *s = NULL; VIAPtr pVia = VIAPTR(pScrn); xf86OutputPtr output = NULL; - const char *s = NULL; + vgaHWPtr hwp = VGAHWPTR(pScrn); + CARD8 cr3b = 0x00; + CARD8 cr3b_mask = 0x00; if (!Panel) return; + /* Apparently this is the way VIA Technologies passes */ + /* the presence of a flat panel to the device driver */ + /* via BIOS setup. */ + if (pVia->Chipset == VIA_CLE266) { + cr3b_mask = 0x08; + } else { + cr3b_mask = 0x02; + } + + cr3b = hwp->readCrtc(hwp, 0x3B) & cr3b_mask; + + if (!cr3b) { + return; + } + memcpy(Options, ViaPanelOptions, sizeof(ViaPanelOptions)); xf86ProcessOptions(pScrn->scrnIndex, pScrn->options, Options); _______________________________________________ Openchrome-devel mailing list Openchrome-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/openchrome-devel