Author: kallisti5 Date: 2011-05-26 00:42:37 +0200 (Thu, 26 May 2011) New Revision: 41753 Changeset: https://dev.haiku-os.org/changeset/41753 Modified: haiku/trunk/src/add-ons/accelerants/radeon_hd/mode.cpp Log: temporarly disable screen blanking; setting V/H blank start/end is what was causing empty display, disabled for now; Hardware video mode setting is close! Modified: haiku/trunk/src/add-ons/accelerants/radeon_hd/mode.cpp =================================================================== --- haiku/trunk/src/add-ons/accelerants/radeon_hd/mode.cpp 2011-05-25 22:03:09 UTC (rev 41752) +++ haiku/trunk/src/add-ons/accelerants/radeon_hd/mode.cpp 2011-05-25 22:42:37 UTC (rev 41753) @@ -130,25 +130,25 @@ // Blacks the screen out, useful for mode setting -static void -CardBlankSet(int crtNumber, bool blank) -{ - int blackColorReg; - int blankControlReg; +//static void +//CardBlankSet(int crtNumber, bool blank) +//{ +// int blackColorReg; +// int blankControlReg; +// +// if (crtNumber == 1) { +// blackColorReg = D2CRTC_BLACK_COLOR; +// blankControlReg = D2CRTC_BLANK_CONTROL; +// } else { +// blackColorReg = D1CRTC_BLACK_COLOR; +// blankControlReg = D1CRTC_BLANK_CONTROL; +// } +// +// write32(blackColorReg, 0); +// write32AtMask(blankControlReg, blank ? 1 << 8 : 0, 1 << 8); +//} - if (crtNumber == 1) { - blackColorReg = D2CRTC_BLACK_COLOR; - blankControlReg = D2CRTC_BLANK_CONTROL; - } else { - blackColorReg = D1CRTC_BLACK_COLOR; - blankControlReg = D1CRTC_BLANK_CONTROL; - } - write32(blackColorReg, 0); - write32AtMask(blankControlReg, blank ? 1 << 8 : 0, 1 << 8); -} - - static void CardFBSet(int crtNumber, display_mode *mode) { @@ -223,7 +223,7 @@ uint16_t regOffset = (crtNumber == 0) ? gRegister->regOffsetCRT0 : gRegister->regOffsetCRT1; - CardBlankSet(crtNumber, true); + //CardBlankSet(crtNumber, true); display_timing& displayTiming = mode->timing; @@ -237,11 +237,11 @@ write32(regOffset + D1CRTC_H_TOTAL, displayTiming.h_total - 1); // determine blanking based on passed modeline - uint16 blankStart = displayTiming.h_display + 1; - uint16 blankEnd = displayTiming.h_total; + //uint16 blankStart = displayTiming.h_display; + //uint16 blankEnd = displayTiming.h_total; - write32(regOffset + D1CRTC_H_BLANK_START_END, - blankStart | (blankEnd << 16)); + //write32(regOffset + D1CRTC_H_BLANK_START_END, + // blankStart | (blankEnd << 16)); write32(regOffset + D1CRTC_H_SYNC_A, (displayTiming.h_sync_end - displayTiming.h_sync_start) << 16); @@ -253,11 +253,11 @@ // *** Vertical write32(regOffset + D1CRTC_V_TOTAL, displayTiming.v_total - 1); - blankStart = displayTiming.v_display; - blankEnd = displayTiming.v_total; + //blankStart = displayTiming.v_display; + //blankEnd = displayTiming.v_total; - write32(regOffset + D1CRTC_V_BLANK_START_END, - blankStart | (blankEnd << 16)); + //write32(regOffset + D1CRTC_V_BLANK_START_END, + // blankStart | (blankEnd << 16)); // Set Interlace if specified within mode line if (displayTiming.flags & B_TIMING_INTERLACED) { @@ -281,7 +281,7 @@ */ write32AtMask(regOffset + D1CRTC_COUNT_CONTROL, 0x0, 0x1); - CardBlankSet(crtNumber, false); + //CardBlankSet(crtNumber, false); } @@ -300,10 +300,16 @@ write32(regOffset + D1MODE_EXT_OVERSCAN_TOP_BOTTOM, (Overscan.OverscanTop << 16) | Overscan.OverscanBottom); */ + + // No scaling write32(regOffset + D1SCL_ENABLE, 0); write32(regOffset + D1SCL_TAP_CONTROL, 0); - write32(regOffset + D1MODE_CENTER, 2); + write32(regOffset + D1MODE_CENTER, 0); + #if 0 + // Auto scale keeping aspect ratio + write32(regOffset + D1MODE_CENTER, 1); + write32(regOffset + D1SCL_UPDATE, 0); write32(regOffset + D1SCL_FLIP_CONTROL, 0); @@ -316,6 +322,7 @@ write32(regOffset + D1SCL_VFILTER, 0x00030100); write32(regOffset + D1SCL_DITHER, 0x00001010); + #endif }