static void smbus_enable(int offset, int bit) { unsigned int cfg = smbus_read(offset); cfg |= bit; smbus_write(offset, cfg); }
uint8_t i2c_helper::smbus_read_block_data( uint8_t cmd, uint8_t *data ) { i2c_smbus_data ldata; smbus_read( cmd, &ldata, I2C_SMBUS_BLOCK_DATA ); memcpy( data, &ldata.block[1], ldata.block[0] ); return ldata.block[0]; }
std::string i2c_helper::smbus_read_block_broken( uint8_t cmd, uint8_t len ) { i2c_smbus_data data; len = len > I2C_SMBUS_BLOCK_MAX ? I2C_SMBUS_BLOCK_MAX : len; data.block[0] = len; smbus_read( cmd, &data, len == I2C_SMBUS_BLOCK_MAX ? I2C_SMBUS_I2C_BLOCK_BROKEN : I2C_SMBUS_BLOCK_DATA ); return std::string( &data.block[1], &data.block[1] + data.block[0] ); }
uint8_t i2c_helper::smbus_read_block_broken( uint8_t cmd, uint8_t *data, uint8_t length ) { i2c_smbus_data ldata; length = length > I2C_SMBUS_BLOCK_MAX ? I2C_SMBUS_BLOCK_MAX : length; ldata.block[0] = length; smbus_read( cmd, &ldata, length == I2C_SMBUS_BLOCK_MAX ? I2C_SMBUS_I2C_BLOCK_BROKEN : I2C_SMBUS_BLOCK_DATA ); memcpy( data, &ldata.block[1], ldata.block[0] ); return ldata.block[0]; }
void VIA_DumpReg(ScrnInfoPtr pScrn) { TRIDENTPtr pTrident=TRIDENTPTR(pScrn); int i,j; unsigned char bTmp; unsigned char protect; /* Unprotect */ OUTB(0x3C4, 0x11); protect = INB(0x3C5); OUTB(0x3C5, 0x92); /* SR */ for (i=0; i<16; i++) { for (j=0; j<16; j++) { OUTB(0x3c4,(16*i+j)); bTmp=INB(0x3c5); ErrorF("SR%02x=%02x ",(16*i+j),bTmp); } ErrorF("\n"); } ErrorF("\n"); /* CR */ for (i=0; i<16; i++) { for (j=0; j<16; j++) { OUTB(0x3d4,(16*i+j)); bTmp=INB(0x3d5); ErrorF("CR%02x=%02x ",(16*i+j),bTmp); } ErrorF("\n"); } ErrorF("\n"); /* GR */ for (i=0; i<16; i++) { for (j=0; j<16; j++) { OUTB(0x3ce,(16*i+j)); bTmp=INB(0x3cf); ErrorF("GR%02x=%02x ",(16*i+j),bTmp); } ErrorF("\n"); } ErrorF("\n"); /* SM */ for (i=0; i<16; i++) { for (j=0; j<16; j++) { if (pTrident->TVChipset==2) bTmp=smbus_read(pScrn,(16*i+j),TV_CH7005C_PORT); else bTmp=smbus_read(pScrn,(16*i+j),TVX_VT1621_PORT); ErrorF("SM%02x=%02x ",(16*i+j),bTmp); } ErrorF("\n"); } ErrorF("\n"); /* protect */ OUTB(0x3C4, 0x11); OUTB(0x3C5, protect); }
void VIA_SaveTVDepentVGAReg(ScrnInfoPtr pScrn) { TRIDENTPtr pTrident=TRIDENTPTR(pScrn); unsigned char protect; unsigned char bTmp; int i; unsigned char VGA_RegIdx_about_TV[VGA_REGNUM_ABOUT_TV]={ 0xD8,0XD9,/* SR */ 0X33,/* GR */ 0XC0,0XD0,0XD1,0XD2,0XD3,0XE0,0XE3,0XE4,0XE5,/* CR */ 0XE6,0XE7,0XF0,0XF1,0XF6,0XFE,0XFF }; unsigned char TV_CH7005C_RegIdx[TV_CH7005C_TVREG_NUM]={ 0X00,0X01,0X03,0X04,0X06,0X07,0X08,0X09, 0X0A,0X0B,0X0D,0X0E,0X10,0X11,0X13,0X14, 0X15,0X17,0X18,0X19,0X1A,0X1B,0X1C,0X1D, 0X1E,0X1F,0X20,0X21,0X3D }; /*ErrorF("VIAB3D: VIA_SaveTVDepentVGAReg:\n");*/ /* Unprotect */ OUTB(0x3C4, 0x11); protect = INB(0x3C5); OUTB(0x3C5, 0x92); /* Set TV Hw environment */ OUTB(0x3d4,0xc1); OUTB(0x3d5,0x41); /* SR_d8,SR_d9 */ for (i=0; i<2; i++) { OUTB(0x3c4,VGA_RegIdx_about_TV[i]); bTmp=INB(0x3c5); pTrident->DefaultTVDependVGASetting[i]=bTmp; } /* GR_33 */ OUTB(0x3ce,0x33); bTmp=INB(0x3cf); pTrident->DefaultTVDependVGASetting[2]=bTmp; /* CR_c0,d0,d1,d2,d3,e0,e3,e4,e5,e6,e7,f0,f1,f6,fe,ff */ for (i=3; i<VGA_REGNUM_ABOUT_TV; i++) { OUTB(0x3d4,VGA_RegIdx_about_TV[i]); bTmp=INB(0x3d5); pTrident->DefaultTVDependVGASetting[i]=bTmp; } switch (pTrident->TVChipset) { case 1: for (i=0; i<TVX_REG_NUM; i++) { bTmp=smbus_read(pScrn,i,TVX_VT1621_PORT); pTrident->DefaultTVDependVGASetting[VGA_REGNUM_ABOUT_TV+i]=bTmp; } break; case 2: for (i=0; i<TV_CH7005C_TVREG_NUM; i++) { bTmp=smbus_read(pScrn,TV_CH7005C_RegIdx[i],TV_CH7005C_PORT); pTrident->DefaultTVDependVGASetting[VGA_REGNUM_ABOUT_TV+i]=bTmp; } break; default: ErrorF("VIAB3D: VIA_SaveTVDepentVGAReg: Wrong Chipset setting\n"); break; } /* protect */ OUTB(0x3C4, 0x11); OUTB(0x3C5, protect); }
std::string i2c_helper::smbus_read_block_data( uint8_t cmd ) { i2c_smbus_data data; smbus_read( cmd, &data, I2C_SMBUS_BLOCK_DATA ); return std::string( &data.block[1], &data.block[1] + data.block[0] ); }
uint16_t i2c_helper::smbus_read_word_data( uint8_t cmd ) { i2c_smbus_data data; smbus_read( cmd, &data, I2C_SMBUS_WORD_DATA ); return data.word; }
uint8_t i2c_helper::smbus_read_byte_data( uint8_t cmd ) { i2c_smbus_data data; smbus_read( cmd, &data, I2C_SMBUS_BYTE_DATA ); return data.byte; }
uint8_t i2c_helper::smbus_read_byte( ) { i2c_smbus_data data; smbus_read( 0, &data, I2C_SMBUS_BYTE ); return data.byte; }