intel_extreme: always assume panel on eDP on laptops.
This commit is contained in:
@@ -1245,7 +1245,6 @@ EmbeddedDisplayPort::IsConnected()
|
||||
TRACE("%s: %s PortRegister: 0x%" B_PRIxADDR "\n", __func__, PortName(),
|
||||
portRegister);
|
||||
|
||||
// fixme: Skylake and up use eDP for a seperate active VGA converter chip sometimes.
|
||||
if (!gInfo->shared_info->device_type.IsMobile()) {
|
||||
TRACE("%s: skipping eDP on non-mobile GPU\n", __func__);
|
||||
return false;
|
||||
@@ -1351,7 +1350,8 @@ DigitalDisplayInterface::IsConnected()
|
||||
TRACE("%s: %s PortRegister: 0x%" B_PRIxADDR "\n", __func__, PortName(),
|
||||
portRegister);
|
||||
|
||||
if (portRegister == 0)
|
||||
// Please note: Skylake and up (Desktop) use eDP for a seperate active VGA converter chip.
|
||||
if ((portRegister == 0) && (PortIndex() != INTEL_PORT_E)) //DP protocol has no register
|
||||
return false;
|
||||
|
||||
// Probe a little port info.
|
||||
@@ -1405,10 +1405,17 @@ DigitalDisplayInterface::IsConnected()
|
||||
break;
|
||||
}
|
||||
|
||||
if (((((pipeState & PIPE_DDI_SELECT_MASK) >> PIPE_DDI_SELECT_SHIFT) + 1) == (uint32)PortIndex())
|
||||
&& (pipeState & PIPE_DDI_FUNC_CTL_ENABLE)) {
|
||||
if ((((pipeState & PIPE_DDI_SELECT_MASK) >> PIPE_DDI_SELECT_SHIFT) + 1) == (uint32)PortIndex()) {
|
||||
// See if the BIOS enabled our output as it indicates it's in use
|
||||
if (pipeState & PIPE_DDI_FUNC_CTL_ENABLE) {
|
||||
TRACE("%s: Connected\n", __func__);
|
||||
return true;
|
||||
}
|
||||
// On laptops we always have an internal panel.. (this is on the eDP port)
|
||||
if ((gInfo->shared_info->device_type.IsMobile()) && (PortIndex() == INTEL_PORT_E)) {
|
||||
TRACE("%s: Laptop. Assuming internal panel is connected here\n", __func__);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -287,7 +287,7 @@ probe_ports()
|
||||
}
|
||||
}
|
||||
|
||||
// Digital Display Interface (for DP, HDMI and DVI)
|
||||
// Digital Display Interface (for DP, HDMI, DVI and eDP)
|
||||
if (gInfo->shared_info->device_type.HasDDI()) {
|
||||
for (int i = INTEL_PORT_B; i <= INTEL_PORT_E; i++) {
|
||||
TRACE("Probing DDI %d\n", i);
|
||||
@@ -306,18 +306,19 @@ probe_ports()
|
||||
}
|
||||
}
|
||||
|
||||
// Ensure DP_A isn't already taken (or DDI)
|
||||
// Please note that Skylake and up use eDP for a seperate active VGA converter chip.
|
||||
TRACE("Probing eDP\n");
|
||||
if (!has_connected_port((port_index)INTEL_PORT_A, INTEL_PORT_TYPE_ANY)) {
|
||||
// also always try eDP, it'll also just fail if not applicable
|
||||
Port* eDPPort = new(std::nothrow) EmbeddedDisplayPort();
|
||||
if (eDPPort == NULL)
|
||||
return B_NO_MEMORY;
|
||||
if (eDPPort->IsConnected())
|
||||
gInfo->ports[gInfo->port_count++] = eDPPort;
|
||||
else
|
||||
delete eDPPort;
|
||||
if (!gInfo->shared_info->device_type.HasDDI()) {
|
||||
// Ensure DP_A isn't already taken
|
||||
TRACE("Probing eDP\n");
|
||||
if (!has_connected_port((port_index)INTEL_PORT_A, INTEL_PORT_TYPE_ANY)) {
|
||||
// also always try eDP, it'll also just fail if not applicable
|
||||
Port* eDPPort = new(std::nothrow) EmbeddedDisplayPort();
|
||||
if (eDPPort == NULL)
|
||||
return B_NO_MEMORY;
|
||||
if (eDPPort->IsConnected())
|
||||
gInfo->ports[gInfo->port_count++] = eDPPort;
|
||||
else
|
||||
delete eDPPort;
|
||||
}
|
||||
}
|
||||
|
||||
if (!gInfo->shared_info->device_type.HasDDI()) {
|
||||
|
||||
Reference in New Issue
Block a user