diff --git a/src/add-ons/accelerants/intel_extreme/Ports.cpp b/src/add-ons/accelerants/intel_extreme/Ports.cpp index 961a799f56..f5a5d45e88 100644 --- a/src/add-ons/accelerants/intel_extreme/Ports.cpp +++ b/src/add-ons/accelerants/intel_extreme/Ports.cpp @@ -1022,6 +1022,24 @@ DigitalDisplayInterface::_DDCRegister() } +status_t +DigitalDisplayInterface::Power(bool enabled) +{ + TRACE("%s: %s DDI enabled: %s\n", __func__, PortName(), + enabled ? "true" : "false"); + + fPipe->Enable(enabled); + + addr_t portRegister = _PortRegister(); + uint32 state = read32(portRegister); + write32(portRegister, + enabled ? (state | DDI_BUF_CTL_ENABLE) : (state & ~DDI_BUF_CTL_ENABLE)); + read32(portRegister); + + return B_OK; +} + + bool DigitalDisplayInterface::IsConnected() { diff --git a/src/add-ons/accelerants/intel_extreme/Ports.h b/src/add-ons/accelerants/intel_extreme/Ports.h index db43b98cb4..dc2883f81e 100644 --- a/src/add-ons/accelerants/intel_extreme/Ports.h +++ b/src/add-ons/accelerants/intel_extreme/Ports.h @@ -60,7 +60,7 @@ virtual bool IsConnected() = 0; ::Pipe* GetPipe() { return fPipe; }; - status_t Power(bool enabled); +virtual status_t Power(bool enabled); bool HasEDID(); virtual status_t GetEDID(edid1_info* edid, @@ -209,6 +209,8 @@ public: virtual uint32 Type() const { return INTEL_PORT_TYPE_DVI; } +virtual status_t Power(bool enabled); + virtual bool IsConnected(); virtual status_t SetDisplayMode(display_mode* mode,