trident_i2c.c revision 95b296d0
195b296d0Smrg/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/trident/trident_i2c.c,v 1.2 1999/01/23 09:55:59 dawes Exp $ */ 295b296d0Smrg 395b296d0Smrg#ifdef HAVE_CONFIG_H 495b296d0Smrg#include "config.h" 595b296d0Smrg#endif 695b296d0Smrg 795b296d0Smrg#include "xf86.h" 895b296d0Smrg#include "xf86_OSproc.h" 995b296d0Smrg#include "compiler.h" 1095b296d0Smrg 1195b296d0Smrg#include "xf86Pci.h" 1295b296d0Smrg#include "xf86PciInfo.h" 1395b296d0Smrg 1495b296d0Smrg#include "vgaHW.h" 1595b296d0Smrg 1695b296d0Smrg#include "trident.h" 1795b296d0Smrg#include "trident_regs.h" 1895b296d0Smrg 1995b296d0Smrgstatic void 2095b296d0SmrgTRIDENTI2CPutBits(I2CBusPtr b, int clock, int data) { 2195b296d0Smrg unsigned int reg = 0x0C; 2295b296d0Smrg TRIDENTPtr pTrident = ((TRIDENTPtr)b->DriverPrivate.ptr); 2395b296d0Smrg int vgaIOBase = VGAHWPTR(pTrident->pScrn)->IOBase; 2495b296d0Smrg 2595b296d0Smrg#if 0 2695b296d0Smrg if(!TRIDENTI2CSwitchToBus(b)) 2795b296d0Smrg return FALSE; 2895b296d0Smrg#endif 2995b296d0Smrg 3095b296d0Smrg if(clock) reg |= 2; 3195b296d0Smrg if(data) reg |= 1; 3295b296d0Smrg OUTB(vgaIOBase + 4, I2C); 3395b296d0Smrg OUTB(vgaIOBase + 5, reg); 3495b296d0Smrg#if 0 3595b296d0Smrg ErrorF("TRIDENTI2CPutBits: %d %d\n", clock, data); 3695b296d0Smrg#endif 3795b296d0Smrg} 3895b296d0Smrg 3995b296d0Smrgstatic void 4095b296d0SmrgTRIDENTI2CGetBits(I2CBusPtr b, int *clock, int *data) { 4195b296d0Smrg unsigned int reg; 4295b296d0Smrg TRIDENTPtr pTrident = ((TRIDENTPtr)b->DriverPrivate.ptr); 4395b296d0Smrg int vgaIOBase = VGAHWPTR(pTrident->pScrn)->IOBase; 4495b296d0Smrg 4595b296d0Smrg#if 0 4695b296d0Smrg if(!TRIDENTI2CSwitchToBus(b)) 4795b296d0Smrg return FALSE; 4895b296d0Smrg#endif 4995b296d0Smrg 5095b296d0Smrg OUTB(vgaIOBase + 4, I2C); 5195b296d0Smrg reg = INB(vgaIOBase + 5); 5295b296d0Smrg *clock = (reg & 0x02) != 0; 5395b296d0Smrg *data = (reg & 0x01) != 0; 5495b296d0Smrg#if 0 5595b296d0Smrg ErrorF("TRIDENTI2CGetBits: %d %d\n", *clock, *data); 5695b296d0Smrg#endif 5795b296d0Smrg} 5895b296d0Smrg 5995b296d0SmrgBool 6095b296d0SmrgTRIDENTI2CInit(ScreenPtr pScreen) 6195b296d0Smrg{ 6295b296d0Smrg ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum]; 6395b296d0Smrg TRIDENTPtr pTrident = TRIDENTPTR(pScrn); 6495b296d0Smrg I2CBusPtr I2CPtr; 6595b296d0Smrg 6695b296d0Smrg I2CPtr = xf86CreateI2CBusRec(); 6795b296d0Smrg 6895b296d0Smrg pTrident->DDC = I2CPtr; 6995b296d0Smrg 7095b296d0Smrg I2CPtr->BusName = "DDC"; 7195b296d0Smrg I2CPtr->scrnIndex = pScrn->scrnIndex; 7295b296d0Smrg I2CPtr->I2CPutBits = TRIDENTI2CPutBits; 7395b296d0Smrg I2CPtr->I2CGetBits = TRIDENTI2CGetBits; 7495b296d0Smrg I2CPtr->DriverPrivate.ptr = pTrident; 7595b296d0Smrg 7695b296d0Smrg if(!xf86I2CBusInit(I2CPtr)) 7795b296d0Smrg return FALSE; 7895b296d0Smrg 7995b296d0Smrg return TRUE; 8095b296d0Smrg} 81