Enscript Output

extractedLnx/linux-2.4.25/drivers/video/sis/init301.c_SiS_EnableBridge.c

void
SiS_EnableBridge(SiS_Private *SiS_Pr, PSIS_HW_INFO HwInfo)
{
  USHORT temp=0,tempah;
#ifdef SIS315H
  USHORT temp1,pushax=0;
  BOOLEAN delaylong = FALSE;
#endif


  if(SiS_Pr->SiS_VBType & VB_SISVB) {

    if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {   /* ====== For 301B et al  ====== */

      if(HwInfo->jChipType < SIS_315H) {

#ifdef SIS300     /* 300 series */

         if(HwInfo->jChipType == SIS_300) {

	    if(SiS_CRT2IsLCD(SiS_Pr, HwInfo)) {
	       if(SiS_Pr->SiS_VBType & VB_SIS301LV302LV) {
	          SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x26,0x02);
	          if(!(SiS_CR36BIOSWord23d(SiS_Pr, HwInfo))) {
	             SiS_PanelDelay(SiS_Pr, HwInfo, 0);
	          }
	       }
	    }
	    temp = SiS_GetReg(SiS_Pr->SiS_P3c4,0x32) & 0xDF;             /* lock mode */
            if(SiS_BridgeInSlave(SiS_Pr)) {
               tempah = SiS_GetReg(SiS_Pr->SiS_P3d4,0x30);
               if(!(tempah & SetCRT2ToRAMDAC))  temp |= 0x20;
            }
            SiS_SetReg(SiS_Pr->SiS_P3c4,0x32,temp);
	    SiS_SetRegOR(SiS_Pr->SiS_P3c4,0x1E,0x20);
	    SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x00,0x1F,0x20);        /* enable VB processor */
	    SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x1F,0xC0);
	    SiS_DisplayOn(SiS_Pr);
	    if(SiS_CRT2IsLCD(SiS_Pr, HwInfo)) {
	       if(SiS_Pr->SiS_VBType & VB_SIS301LV302LV) {
	          if(!(SiS_GetReg(SiS_Pr->SiS_P3c4,0x16) & 0x10)) {
		     if(!(SiS_CR36BIOSWord23b(SiS_Pr,HwInfo))) {
		        SiS_PanelDelay(SiS_Pr, HwInfo, 1);
                     }
		     SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x26,0x01);
	 	  }
	       }
	    }

	 } else {

	    if((SiS_Pr->SiS_VBType & VB_NoLCD) &&
	       (SiS_CRT2IsLCD(SiS_Pr, HwInfo))) {
	       /* This is only for LCD output on 301B-DH via LVDS */
	       SiS_SetRegAND(SiS_Pr->SiS_P3c4,0x11,0xFB);
	       if(!(SiS_CR36BIOSWord23d(SiS_Pr,HwInfo))) {
	          SiS_PanelDelay(SiS_Pr, HwInfo, 0);
	       }
	       SiS_SetRegOR(SiS_Pr->SiS_P3c4,0x1E,0x20);   /* Enable CRT2 */
               SiS_DisplayOn(SiS_Pr);
	       SiS_UnLockCRT2(SiS_Pr,HwInfo);
	       SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x02,0xBF);
	       if(SiS_BridgeInSlave(SiS_Pr)) {
      		  SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x01,0x1F);
      	       } else {
      		  SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x01,0x1F,0x40);
               }
	       if(!(SiS_GetReg(SiS_Pr->SiS_P3c4,0x13) & 0x40)) {
	           if(!(SiS_GetReg(SiS_Pr->SiS_P3c4,0x16) & 0x10)) {
		       if(!(SiS_CR36BIOSWord23b(SiS_Pr,HwInfo))) {
		           SiS_PanelDelay(SiS_Pr, HwInfo, 1);
                       }
		       SiS_WaitVBRetrace(SiS_Pr,HwInfo);
                       SiS_SetRegANDOR(SiS_Pr->SiS_P3c4,0x11,0xF7,0x00);
                   }
	       }
            } else {
	       temp = SiS_GetReg(SiS_Pr->SiS_P3c4,0x32) & 0xDF;             /* lock mode */
               if(SiS_BridgeInSlave(SiS_Pr)) {
                  tempah = SiS_GetReg(SiS_Pr->SiS_P3d4,0x30);
                  if(!(tempah & SetCRT2ToRAMDAC))  temp |= 0x20;
               }
               SiS_SetReg(SiS_Pr->SiS_P3c4,0x32,temp);
	       SiS_SetRegOR(SiS_Pr->SiS_P3c4,0x1E,0x20);
	       SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x00,0x1F,0x20);        /* enable VB processor */
	       SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x1F,0xC0);
	       SiS_DisplayOn(SiS_Pr);
	    }

         }
#endif /* SIS300 */

      } else {

#ifdef SIS315H    /* 315 series */

	 if(IS_SIS550650740660) {		/* 550, 650, 740, 660 */

	    UCHAR r30=0, r31=0, r32=0, r33=0, cr36=0;

	    if(SiS_Pr->SiS_VBType & VB_SIS301LV302LV) {

	       if((SiS_Pr->SiS_CustomT != CUT_COMPAQ1280) &&
	          (SiS_Pr->SiS_CustomT != CUT_CLEVO1400)) {
	          SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x1f,0xef);
#ifdef SET_EMI
		  if(SiS_Pr->SiS_VBType & (VB_SIS302LV | VB_SIS302ELV)) {
	             SiS_SetReg(SiS_Pr->SiS_Part4Port,0x30,0x00);
		  }
#endif
	       }

               if(!(SiS_IsNotM650orLater(SiS_Pr,HwInfo))) {
	          tempah = 0x10;
		  if((SiS_Pr->SiS_CustomT == CUT_COMPAQ1280) ||
		     (SiS_Pr->SiS_CustomT == CUT_CLEVO1400)) {
		     if(SiS_GetReg(SiS_Pr->SiS_Part1Port,0x13) & 0x04) {
		        if((SiS_GetReg(SiS_Pr->SiS_Part2Port,0x00) & 0x0f) == 0x0c) {
			   tempah = 0x08;
			} else {
			   tempah = 0x18;
			}
		     }
		     SiS_SetReg(SiS_Pr->SiS_Part1Port,0x4c,tempah);
		  } else {
	             if(SiS_IsVAMode(SiS_Pr,HwInfo)) {
	                tempah = 0x08;
                     }
		     SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x4c,tempah);
		  }
	       }

	       if((SiS_Pr->SiS_CustomT != CUT_COMPAQ1280) &&
	          (SiS_Pr->SiS_CustomT != CUT_CLEVO1400)) {
	          SiS_SetRegByte(SiS_Pr->SiS_P3c6,0x00);
	          SiS_DisplayOff(SiS_Pr);
	          pushax = SiS_GetReg(SiS_Pr->SiS_P3c4,0x06);
	          if(IS_SIS740) {
	             SiS_SetRegAND(SiS_Pr->SiS_P3c4,0x06,0xE3);
	          }
	       }

	       if( (SiS_IsVAMode(SiS_Pr,HwInfo)) ||
	           (SiS_CRT2IsLCD(SiS_Pr, HwInfo)) ) {
                  if(!(SiS_GetReg(SiS_Pr->SiS_Part4Port,0x26) & 0x02)) {
		     if((SiS_Pr->SiS_CustomT != CUT_COMPAQ1280) &&
		        (SiS_Pr->SiS_CustomT != CUT_CLEVO1400)) {
		        SiS_PanelDelayLoop(SiS_Pr, HwInfo, 3, 2);
			SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x26,0x02);
			if(SiS_Pr->SiS_VBType & (VB_SIS302LV | VB_SIS302ELV)) {
			   SiS_GenericDelay(SiS_Pr, 0x4500);
			}
	                SiS_PanelDelayLoop(SiS_Pr, HwInfo, 3, 2);
		     } else {
		        SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x26,0x02);
			SiS_PanelDelay(SiS_Pr, HwInfo, 0);
		     }
	          }
	       }

               if((SiS_Pr->SiS_CustomT != CUT_COMPAQ1280) &&
	          (SiS_Pr->SiS_CustomT != CUT_CLEVO1400)) {
	          if(!(SiS_GetReg(SiS_Pr->SiS_P3d4,0x31) & 0x40)) {
                     SiS_PanelDelayLoop(SiS_Pr, HwInfo, 3, 10);
		     delaylong = TRUE;
		  }
	       }

	    } else if(SiS_Pr->SiS_VBType & VB_NoLCD) {

	       if(!(SiS_IsNotM650orLater(SiS_Pr,HwInfo))) {
	          SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x4c,0x10);
	       }

  	    } else if(SiS_Pr->SiS_VBType & VB_SIS301B302B) {

	       if(!(SiS_IsNotM650orLater(SiS_Pr,HwInfo))) {
	          tempah = 0x10;
		  if(SiS_GetReg(SiS_Pr->SiS_Part1Port,0x13) & 0x04) {
		     tempah = 0x18;
		     if((SiS_GetReg(SiS_Pr->SiS_Part2Port,0x00) & 0x0f) == 0x0c) {
		        tempah = 0x08;
		     }
		  }
	          SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x4c,tempah);
	       }
	       
	    }

	    if(!(SiS_IsVAMode(SiS_Pr,HwInfo))) {
               temp = SiS_GetReg(SiS_Pr->SiS_P3c4,0x32) & 0xDF;
	       if(SiS_BridgeInSlave(SiS_Pr)) {
                  tempah = SiS_GetReg(SiS_Pr->SiS_P3d4,0x30);
                  if(!(tempah & SetCRT2ToRAMDAC)) {
		     if((SiS_Pr->SiS_CustomT == CUT_COMPAQ1280) ||
		        (SiS_Pr->SiS_CustomT == CUT_CLEVO1400)) {
		        if(!(SiS_GetReg(SiS_Pr->SiS_Part1Port,0x13) & 0x04)) temp |= 0x20;
		     } else temp |= 0x20;
		  }
               }
               SiS_SetReg(SiS_Pr->SiS_P3c4,0x32,temp);

	       SiS_SetRegOR(SiS_Pr->SiS_P3c4,0x1E,0x20);                   /* enable CRT2 */
	       
	       if((SiS_Pr->SiS_VBType & VB_SIS301B302B) ||
	          (SiS_Pr->SiS_CustomT == CUT_COMPAQ1280) ||
		  (SiS_Pr->SiS_CustomT == CUT_CLEVO1400)) {
	          SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x2e,0x7f);
		  temp = SiS_GetReg(SiS_Pr->SiS_Part1Port,0x2e);
		  if(!(temp & 0x80)) {
		     SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x2e,0x80);
		  }
	       } else {
	          SiS_PanelDelay(SiS_Pr, HwInfo, 2);
	       }
	    } else {
	       SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x1e,0x20);
	    }

	    SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x00,0x1f,0x20);

	    if((SiS_Pr->SiS_VBType & VB_SIS301B302B) ||
	       (SiS_Pr->SiS_CustomT == CUT_COMPAQ1280) ||
	       (SiS_Pr->SiS_CustomT == CUT_CLEVO1400)) {
	       temp = SiS_GetReg(SiS_Pr->SiS_Part1Port,0x2e);
	       if(!(temp & 0x80)) {
		  SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x2e,0x80);
	       }
	    }

	    tempah = 0xc0;
	    if(SiS_IsDualEdge(SiS_Pr, HwInfo)) {
	       tempah = 0x80;
	       if(!(SiS_IsVAMode(SiS_Pr, HwInfo))) {
	          tempah = 0x40;
               }
	    }
            SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x1F,tempah);

	    if((SiS_Pr->SiS_VBType & VB_SIS301B302B) ||
	       (((SiS_Pr->SiS_CustomT == CUT_COMPAQ1280) ||
	         (SiS_Pr->SiS_CustomT == CUT_CLEVO1400))     &&
	        (!(SiS_WeHaveBacklightCtrl(SiS_Pr,HwInfo))))) {
               SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x00,0x7f);
	    }

	    if(SiS_Pr->SiS_VBType & VB_SIS301LV302LV) {

	       if((SiS_Pr->SiS_CustomT != CUT_COMPAQ1280) &&
	          (SiS_Pr->SiS_CustomT != CUT_CLEVO1400)) {
	          SiS_PanelDelay(SiS_Pr, HwInfo, 2);
	       }
#ifdef COMPAQ_HACK
	       if(SiS_Pr->SiS_CustomT == CUT_COMPAQ1280) {
	          SiS_PanelDelay(SiS_Pr, HwInfo, 2);
	       }
#endif

	       SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x1f,0x10);

	       if(SiS_Pr->SiS_CustomT != CUT_CLEVO1400) {
#ifdef SET_EMI
	          if(SiS_Pr->SiS_VBType & (VB_SIS302LV | VB_SIS302ELV)) {
	             SiS_SetReg(SiS_Pr->SiS_Part4Port,0x30,0x00);
		  }
#endif
	          SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x27,0x0c);
#ifdef SET_EMI
	          if(SiS_Pr->SiS_VBType & (VB_SIS302LV | VB_SIS302ELV)) {

		     cr36 = SiS_GetReg(SiS_Pr->SiS_P3d4,0x36);

		     /*                                              (P4_30|0x40)  */
		     /* Compal 1400x1050: 0x05, 0x60, 0x00                YES  (1.10.7w;  CR36=69)      */
		     /* Compal 1400x1050: 0x0d, 0x70, 0x40                YES  (1.10.7x;  CR36=69)      */
		     /* Acer   1280x1024: 0x12, 0xd0, 0x6b                NO   (1.10.9k;  CR36=73)      */
		     /* Compaq 1280x1024: 0x0d, 0x70, 0x6b                YES  (1.12.04b; CR36=03)      */
		     /* Clevo   1024x768: 0x05, 0x60, 0x33                NO   (1.10.8e;  CR36=12, DL!) */
		     /* Clevo   1024x768: 0x0d, 0x70, 0x40 (if type == 3) YES  (1.10.8y;  CR36=?2)      */
		     /* Clevo   1024x768: 0x05, 0x60, 0x33 (if type != 3) YES  (1.10.8y;  CR36=?2)      */
		     /* Asus    1024x768: ?                                ?   (1.10.8o;  CR36=?2)      */
		     /* Asus    1024x768: 0x08, 0x10, 0x3c (problematic)  YES  (1.10.8q;  CR36=22)      */

		     if(SiS_Pr->HaveEMI) {
		        r30 = SiS_Pr->EMI_30;
			r31 = SiS_Pr->EMI_31;
			r32 = SiS_Pr->EMI_32;
			r33 = SiS_Pr->EMI_33;
		     } else {
		        r30 = 0;
		     }

		     /* EMI_30 is read at driver start; however, the BIOS sets this
		      * (if it is used) only if the LCD is in use. In case we caught
		      * the machine while on TV output, this bit is not set and we
		      * don't know if it should be set - hence our detection is wrong.
		      * Work-around this here:
		      */

		     if((!SiS_Pr->HaveEMI) || (!SiS_Pr->HaveEMILCD)) {
		        if((cr36 & 0x0f) == 0x02) {			/* 1024x768 */
		           r30 |= 0x40;
			   if(SiS_Pr->SiS_CustomT == CUT_CLEVO1024) {
			      r30 &= ~0x40;
			   }
		        } else if((cr36 & 0x0f) == 0x03) {		/* 1280x1024 */
		           r30 |= 0x40;
			   if(SiS_Pr->SiS_CustomT != CUT_COMPAQ1280) {
			      r30 &= ~0x40;
			   }
		        } else if((cr36 & 0x0f) == 0x09) {		/* 1400x1050 */
		           r30 |= 0x40;
		        } else if((cr36 & 0x0f) == 0x0b) {		/* 1600x1200 - unknown */
		           r30 |= 0x40;
		        }
                     }

		     if(!SiS_Pr->HaveEMI) {
		        if((cr36 & 0x0f) == 0x02) {
			   if((cr36 & 0xf0) == 0x30) {
			      r31 = 0x0d; r32 = 0x70; r33 = 0x40;
			   } else {
			      r31 = 0x05; r32 = 0x60; r33 = 0x33;
			   }
		        } else if((cr36 & 0x0f) == 0x03) {
			   if(SiS_Pr->SiS_CustomT == CUT_COMPAQ1280) {
			      r31 = 0x0d; r32 = 0x70; r33 = 0x6b;
			   } else {
			      r31 = 0x12; r32 = 0xd0; r33 = 0x6b;
			   }
			} else if((cr36 & 0x0f) == 0x09) {
			   if(SiS_Pr->SiS_CustomT == CUT_COMPAL1400_2) {
			      r31 = 0x0d; r32 = 0x70; r33 = 0x40;  /* BIOS values */
			   } else {
			      r31 = 0x05; r32 = 0x60; r33 = 0x00;
			   }
			} else {
			   r31 = 0x05; r32 = 0x60; r33 = 0x00;
			}
		     }

		     /* BIOS values don't work so well sometimes */
		     if(!SiS_Pr->OverruleEMI) {
#ifdef COMPAL_HACK
		        if(SiS_Pr->SiS_CustomT == CUT_COMPAL1400_2) {
		           if((cr36 & 0x0f) == 0x09) {
			      r30 = 0x60; r31 = 0x05; r32 = 0x60; r33 = 0x00;
			   }
 		        }
#endif
#ifdef COMPAQ_HACK
		        if(SiS_Pr->SiS_CustomT == CUT_COMPAQ1280) {
		           if((cr36 & 0x0f) == 0x03) {
			      r30 = 0x20; r31 = 0x12; r32 = 0xd0; r33 = 0x6b;     /* rev 1 */
			   }
			}
#endif
#ifdef ASUS_HACK
		        if(SiS_Pr->SiS_CustomT == CUT_ASUSA2H_2) {
		           if((cr36 & 0x0f) == 0x02) {
			      /* r30 = 0x60; r31 = 0x05; r32 = 0x60; r33 = 0x33;  */   /* rev 2 */
			      /* r30 = 0x20; r31 = 0x05; r32 = 0x60; r33 = 0x33;  */   /* rev 3 */
			      /* r30 = 0x60; r31 = 0x0d; r32 = 0x70; r33 = 0x40;  */   /* rev 4 */
			      /* r30 = 0x20; r31 = 0x0d; r32 = 0x70; r33 = 0x40;  */   /* rev 5 */
			   }
			}
#endif
 		     }
		     if(!(SiS_Pr->OverruleEMI && (!r30) && (!r31) && (!r32) && (!r33))) {
		        SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x30,0x20);
		     }
		     SiS_SetReg(SiS_Pr->SiS_Part4Port,0x31,r31);
		     SiS_SetReg(SiS_Pr->SiS_Part4Port,0x32,r32);
		     SiS_SetReg(SiS_Pr->SiS_Part4Port,0x33,r33);
		     if(!(SiS_Pr->OverruleEMI && (!r30) && (!r31) && (!r32) && (!r33))) {
		        SiS_SetReg(SiS_Pr->SiS_Part4Port,0x34,0x10);
		     } else {
		        SiS_SetReg(SiS_Pr->SiS_Part4Port,0x34,0x00);
		     }
		     if( (SiS_IsVAMode(SiS_Pr,HwInfo)) ||
	                 (SiS_CRT2IsLCD(SiS_Pr, HwInfo)) ) {
	                if(r30 & 0x40) {
		           SiS_PanelDelayLoop(SiS_Pr, HwInfo, 3, 5);
			   if(delaylong) {
			      SiS_PanelDelayLoop(SiS_Pr, HwInfo, 3, 5);
			      delaylong = FALSE;
			   }
			   SiS_WaitVBRetrace(SiS_Pr,HwInfo);
			   if(SiS_Pr->SiS_CustomT == CUT_ASUSA2H_2) {
			      SiS_GenericDelay(SiS_Pr, 0x500);
			   }
	                   SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x30,0x40);
	                }
		     }
		  }
#endif
	       }

	       if(SiS_Pr->SiS_CustomT == CUT_COMPAQ1280) {

	          if( (SiS_IsVAMode(SiS_Pr,HwInfo)) ||
	              (SiS_CRT2IsLCD(SiS_Pr, HwInfo)) ) {
		     SiS_DisplayOn(SiS_Pr);
		     SiS_PanelDelay(SiS_Pr, HwInfo, 1);
		     SiS_WaitVBRetrace(SiS_Pr, HwInfo);
		     SiS_PanelDelay(SiS_Pr, HwInfo, 3);
		     if(!(SiS_WeHaveBacklightCtrl(SiS_Pr,HwInfo))) {
		        SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x26,0x01);
	  	     }
		  }

	       } else if(SiS_Pr->SiS_CustomT == CUT_CLEVO1400) {

	          if(!(SiS_WeHaveBacklightCtrl(SiS_Pr,HwInfo))) {
	             if( (SiS_IsVAMode(SiS_Pr, HwInfo)) ||
	                 (SiS_CRT2IsLCD(SiS_Pr, HwInfo)) ) {
		        SiS_DisplayOn(SiS_Pr);
		        SiS_PanelDelay(SiS_Pr, HwInfo, 1);
		        SiS_WaitVBRetrace(SiS_Pr,HwInfo);
		        SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x26,0x01);
		     }
		  }

	       } else {

	          SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x2e,0x80);
	          if(!(SiS_WeHaveBacklightCtrl(SiS_Pr,HwInfo))) {
	             if( (SiS_IsVAMode(SiS_Pr,HwInfo)) ||
	                 ((SiS_CRT2IsLCD(SiS_Pr, HwInfo))) ) {
		        SiS_PanelDelayLoop(SiS_Pr, HwInfo, 3, 10);
		        if(delaylong) {
			   SiS_PanelDelayLoop(SiS_Pr, HwInfo, 3, 10);
		        }
                        SiS_WaitVBRetrace(SiS_Pr,HwInfo);
			if(SiS_Pr->SiS_VBType & (VB_SIS302LV | VB_SIS302ELV)) {
			   SiS_GenericDelay(SiS_Pr, 0x500);
			}
		        SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x26,0x01);
	             }
	          }

	          SiS_SetReg(SiS_Pr->SiS_P3c4,0x06,pushax);
	          SiS_DisplayOn(SiS_Pr);
	          SiS_SetRegByte(SiS_Pr->SiS_P3c6,0xff);

	          if(!(SiS_WeHaveBacklightCtrl(SiS_Pr,HwInfo))) {
	             SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x00,0x7f);
	          }

	       }

	    }

	 } else {			/* 315, 330 */

	    if(!(SiS_IsVAMode(SiS_Pr,HwInfo))) {
	       temp = SiS_GetReg(SiS_Pr->SiS_P3c4,0x32) & 0xDF;
	       if(SiS_BridgeInSlave(SiS_Pr)) {
                  tempah = SiS_GetReg(SiS_Pr->SiS_P3d4,0x30);
                  if(!(tempah & SetCRT2ToRAMDAC))  temp |= 0x20;
               }
               SiS_SetReg(SiS_Pr->SiS_P3c4,0x32,temp);

	       SiS_SetRegOR(SiS_Pr->SiS_P3c4,0x1E,0x20);                   /* enable CRT2 */

	       temp = SiS_GetReg(SiS_Pr->SiS_Part1Port,0x2E);
               if(!(temp & 0x80))
                  SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x2E,0x80);
            }

	    SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x00,0x1f,0x20);

	    if(SiS_Is301B(SiS_Pr)) {

	       temp=SiS_GetReg(SiS_Pr->SiS_Part1Port,0x2E);
               if(!(temp & 0x80))
                  SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x2E,0x80);

	       tempah = 0xc0;
	       if(SiS_IsDualEdge(SiS_Pr,HwInfo)) {
	          tempah = 0x80;
	          if(!(SiS_IsVAMode(SiS_Pr,HwInfo))) {
	             tempah = 0x40;
                  }
	       }
               SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x1F,tempah);

	       SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x00,0x7f);

	    } else {

	       SiS_VBLongWait(SiS_Pr);
               SiS_DisplayOn(SiS_Pr);
	       SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x00,0x7F);
               SiS_VBLongWait(SiS_Pr);

	    }

	 }   /* 315, 330 */

#endif /* SIS315H */

      }

    } else {	/* ============  For 301 ================ */

       if(HwInfo->jChipType < SIS_315H) {
          if(SiS_CRT2IsLCD(SiS_Pr, HwInfo)) {
             SiS_SetRegAND(SiS_Pr->SiS_P3c4,0x11,0xFB);
	     SiS_PanelDelay(SiS_Pr, HwInfo, 0);
	  }
       }

       temp = SiS_GetReg(SiS_Pr->SiS_P3c4,0x32) & 0xDF;          /* lock mode */
       if(SiS_BridgeInSlave(SiS_Pr)) {
          tempah = SiS_GetReg(SiS_Pr->SiS_P3d4,0x30);
          if(!(tempah & SetCRT2ToRAMDAC))  temp |= 0x20;
       }
       SiS_SetReg(SiS_Pr->SiS_P3c4,0x32,temp);

       SiS_SetRegOR(SiS_Pr->SiS_P3c4,0x1E,0x20);                  /* enable CRT2 */

       if(HwInfo->jChipType >= SIS_315H) {
          temp = SiS_GetReg(SiS_Pr->SiS_Part1Port,0x2E);
          if(!(temp & 0x80)) {
             SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x2E,0x80);         /* BVBDOENABLE=1 */
	  }
       }

       SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x00,0x1F,0x20);     /* enable VB processor */

       SiS_VBLongWait(SiS_Pr);
       SiS_DisplayOn(SiS_Pr);
       if(HwInfo->jChipType >= SIS_315H) {
          SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x00,0x7f);
       }
       SiS_VBLongWait(SiS_Pr);

       if(HwInfo->jChipType < SIS_315H) {
          if(SiS_CRT2IsLCD(SiS_Pr, HwInfo)) {
	     SiS_PanelDelay(SiS_Pr, HwInfo, 1);
             SiS_SetRegAND(SiS_Pr->SiS_P3c4,0x11,0xF7);
	  }
       }

    }

  } else {   /* =================== For LVDS ================== */

    if(HwInfo->jChipType < SIS_315H) {

#ifdef SIS300    /* 300 series */

       if(SiS_CRT2IsLCD(SiS_Pr, HwInfo)) {
          if(HwInfo->jChipType == SIS_730) {
	     SiS_PanelDelay(SiS_Pr, HwInfo, 1);
	     SiS_PanelDelay(SiS_Pr, HwInfo, 1);
	     SiS_PanelDelay(SiS_Pr, HwInfo, 1);
	  }
          SiS_SetRegAND(SiS_Pr->SiS_P3c4,0x11,0xFB);
	  if(!(SiS_CR36BIOSWord23d(SiS_Pr,HwInfo))) {
	     SiS_PanelDelay(SiS_Pr, HwInfo, 0);
	  }
       }

       SiS_EnableCRT2(SiS_Pr);
       SiS_DisplayOn(SiS_Pr);
       SiS_UnLockCRT2(SiS_Pr,HwInfo);
       SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x02,0xBF);
       if(SiS_BridgeInSlave(SiS_Pr)) {
      	  SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x01,0x1F);
       } else {
      	  SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x01,0x1F,0x40);
       }

       if(SiS_Pr->SiS_IF_DEF_CH70xx == 1) {
          if(!(SiS_CRT2IsLCD(SiS_Pr, HwInfo))) {
	     SiS_WaitVBRetrace(SiS_Pr, HwInfo);
	     SiS_SetCH700x(SiS_Pr,0x0B0E);
          }
       }

       if(SiS_CRT2IsLCD(SiS_Pr, HwInfo)) {
          if(!(SiS_GetReg(SiS_Pr->SiS_P3c4,0x13) & 0x40)) {
             if(!(SiS_GetReg(SiS_Pr->SiS_P3c4,0x16) & 0x10)) {
	        if(!(SiS_CR36BIOSWord23b(SiS_Pr,HwInfo))) {
	 	   SiS_PanelDelay(SiS_Pr, HwInfo, 1);
        	   SiS_PanelDelay(SiS_Pr, HwInfo, 1);
	        }
	        SiS_WaitVBRetrace(SiS_Pr, HwInfo);
                SiS_SetRegAND(SiS_Pr->SiS_P3c4,0x11,0xF7);
             }
	  }
       }

#endif  /* SIS300 */

    } else {

#ifdef SIS315H    /* 315 series */

       if(SiS_Pr->SiS_IF_DEF_CH70xx == 0) {
	  if(SiS_CRT2IsLCD(SiS_Pr, HwInfo)) {
	     SiS_SetRegAND(SiS_Pr->SiS_P3c4,0x11,0xFB);
	     SiS_PanelDelay(SiS_Pr, HwInfo, 0);
          }
       }

       SiS_EnableCRT2(SiS_Pr);
       SiS_UnLockCRT2(SiS_Pr,HwInfo);

       SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x2e,0xf7);

       if(SiS_Pr->SiS_IF_DEF_CH70xx == 2) {
          temp = SiS_GetCH701x(SiS_Pr,0x66);
	  temp &= 0x20;
	  SiS_Chrontel701xBLOff(SiS_Pr);
       }

       if(HwInfo->jChipType != SIS_550) {
          SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x2e,0x7f);
       }

       if(HwInfo->jChipType == SIS_740) {
          if(SiS_Pr->SiS_IF_DEF_CH70xx == 2) {
             if(SiS_IsLCDOrLCDA(SiS_Pr, HwInfo)) {
	   	SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x1E,0x20);
	     }
	  }
       }

       temp1 = SiS_GetReg(SiS_Pr->SiS_Part1Port,0x2E);
       if(!(temp1 & 0x80)) {
          SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x2E,0x80);
       }

       if(SiS_Pr->SiS_IF_DEF_CH70xx == 2) {
          if(temp) {
	     SiS_Chrontel701xBLOn(SiS_Pr, HwInfo);
	  }
       }

       if(SiS_Pr->SiS_IF_DEF_CH70xx == 0) {
          if(SiS_CRT2IsLCD(SiS_Pr, HwInfo)) {
	     SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x1E,0x20);
	     if(HwInfo->jChipType == SIS_550) {
		SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x1E,0x40);
		SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x1E,0x10);
	     }
	  }
       } else if(SiS_IsVAMode(SiS_Pr,HwInfo)) {
          if(HwInfo->jChipType != SIS_740) {
             SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x1E,0x20);
	  }
       }

       if(!(SiS_WeHaveBacklightCtrl(SiS_Pr,HwInfo))) {
          SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x00,0x7f);
       }

       if(SiS_Pr->SiS_IF_DEF_CH70xx == 2) {
       	  if(SiS_IsTVOrYPbPrOrScart(SiS_Pr,HwInfo)) {
             SiS_Chrontel701xOn(SiS_Pr,HwInfo);
          }
          if( (SiS_IsVAMode(SiS_Pr,HwInfo)) ||
	      (SiS_IsLCDOrLCDA(SiS_Pr,HwInfo)) ) {
             SiS_ChrontelDoSomething1(SiS_Pr,HwInfo);
          }
       }

       if(SiS_Pr->SiS_IF_DEF_CH70xx == 2) {
       	  if(!(SiS_WeHaveBacklightCtrl(SiS_Pr,HwInfo))) {
 	     if( (SiS_IsVAMode(SiS_Pr,HwInfo)) ||
	         (SiS_IsLCDOrLCDA(SiS_Pr,HwInfo)) ) {
	     	SiS_Chrontel701xBLOn(SiS_Pr, HwInfo);
	     	SiS_ChrontelInitTVVSync(SiS_Pr,HwInfo);
             }
       	  }
       } else if(SiS_Pr->SiS_IF_DEF_CH70xx == 0) {
       	  if(!(SiS_WeHaveBacklightCtrl(SiS_Pr,HwInfo))) {
	     if(SiS_CRT2IsLCD(SiS_Pr, HwInfo)) {
		SiS_PanelDelay(SiS_Pr, HwInfo, 1);
		SiS_SetRegAND(SiS_Pr->SiS_P3c4,0x11,0xF7);
	     }
	  }
       }

#endif  /* SIS315H */

    } /* 310 series */

  }  /* LVDS */

}

Generated by GNU enscript 1.6.4.