diff --git a/src/add-ons/accelerants/nvidia/engine/nv_crtc.c b/src/add-ons/accelerants/nvidia/engine/nv_crtc.c index 771253bb98..a582c268f9 100644 --- a/src/add-ons/accelerants/nvidia/engine/nv_crtc.c +++ b/src/add-ons/accelerants/nvidia/engine/nv_crtc.c @@ -443,8 +443,14 @@ status_t nv_crtc_dpms(bool display, bool h, bool v) /* end synchronous reset if display should be enabled */ SEQW(RESET, 0x03); - /* powerup both LVDS (laptop panellink) and TMDS (DVI panellink) transmitters */ - if (si->ps.tmds1_active) DACW(FP_DEBUG0, (DACR(FP_DEBUG0) & 0xcfffffff)); + if (si->ps.tmds1_active) + { + /* powerup both LVDS (laptop panellink) and TMDS (DVI panellink) + * internal transmitters... */ + DACW(FP_DEBUG0, (DACR(FP_DEBUG0) & 0xcfffffff)); + /* ... and powerup external TMDS transmitter if it exists */ + CRTCW(LCD, (CRTCR(LCD) | 0x10)); + } LOG(4,("display on, ")); } @@ -452,8 +458,14 @@ status_t nv_crtc_dpms(bool display, bool h, bool v) { SEQW(CLKMODE, (temp | 0x20)); - /* powerdown both LVDS (laptop panellink) and TMDS (DVI panellink) transmitters */ - if (si->ps.tmds1_active) DACW(FP_DEBUG0, (DACR(FP_DEBUG0) | 0x30000000)); + if (si->ps.tmds1_active) + { + /* powerdown both LVDS (laptop panellink) and TMDS (DVI panellink) + * internal transmitters... */ + DACW(FP_DEBUG0, (DACR(FP_DEBUG0) | 0x30000000)); + /* ... and powerdown external TMDS transmitter if it exists */ + CRTCW(LCD, (CRTCR(LCD) & 0xef)); + } LOG(4,("display off, ")); } diff --git a/src/add-ons/accelerants/nvidia/engine/nv_crtc2.c b/src/add-ons/accelerants/nvidia/engine/nv_crtc2.c index ad00a120c8..b39912ac91 100644 --- a/src/add-ons/accelerants/nvidia/engine/nv_crtc2.c +++ b/src/add-ons/accelerants/nvidia/engine/nv_crtc2.c @@ -426,8 +426,14 @@ status_t nv_crtc2_dpms(bool display, bool h, bool v) /* end synchronous reset if display should be enabled */ SEQW(RESET, 0x03); - /* powerup both LVDS (laptop panellink) and TMDS (DVI panellink) transmitters */ - if (si->ps.tmds2_active) DAC2W(FP_DEBUG0, (DAC2R(FP_DEBUG0) & 0xcfffffff)); + if (si->ps.tmds2_active) + { + /* powerup both LVDS (laptop panellink) and TMDS (DVI panellink) + * internal transmitters... */ + DAC2W(FP_DEBUG0, (DAC2R(FP_DEBUG0) & 0xcfffffff)); + /* ... and powerup external TMDS transmitter if it exists */ + CRTC2W(LCD, (CRTC2R(LCD) | 0x10)); + } LOG(4,("display on, ")); } @@ -435,8 +441,14 @@ status_t nv_crtc2_dpms(bool display, bool h, bool v) { SEQW(CLKMODE, (temp | 0x20)); - /* powerdown both LVDS (laptop panellink) and TMDS (DVI panellink) transmitters */ - if (si->ps.tmds2_active) DAC2W(FP_DEBUG0, (DAC2R(FP_DEBUG0) | 0x30000000)); + if (si->ps.tmds2_active) + { + /* powerdown both LVDS (laptop panellink) and TMDS (DVI panellink) + * internal transmitters... */ + DAC2W(FP_DEBUG0, (DAC2R(FP_DEBUG0) | 0x30000000)); + /* ... and powerdown external TMDS transmitter if it exists */ + CRTC2W(LCD, (CRTC2R(LCD) & 0xef)); + } LOG(4,("display off, ")); }