コード例 #1
0
ファイル: hpet.c プロジェクト: SebSUE/InventecMustangXavier
static void smbus_enable(int offset, int bit)
{
	unsigned int cfg = smbus_read(offset);

	cfg |= bit;
	smbus_write(offset, cfg);
}
コード例 #2
0
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];
}
コード例 #3
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] );
}
コード例 #4
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);
}
コード例 #7
0
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] );
}
コード例 #8
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;
}
コード例 #9
0
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;
}
コード例 #10
0
uint8_t i2c_helper::smbus_read_byte( )
{
    i2c_smbus_data data;
    smbus_read( 0, &data, I2C_SMBUS_BYTE );
    return data.byte;
}