lg_i2c.c revision 76888252
176888252Smrg/* (c) Itai Nahshon */ 276888252Smrg 376888252Smrg/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/cirrus/lg_i2c.c,v 1.1 1998/11/15 04:30:25 dawes Exp $ */ 476888252Smrg 576888252Smrg#ifdef HAVE_CONFIG_H 676888252Smrg#include "config.h" 776888252Smrg#endif 876888252Smrg 976888252Smrg#include "xf86.h" 1076888252Smrg#include "xf86_OSproc.h" 1176888252Smrg#include "compiler.h" 1276888252Smrg 1376888252Smrg#include "xf86Pci.h" 1476888252Smrg#include "xf86PciInfo.h" 1576888252Smrg 1676888252Smrg#include "vgaHW.h" 1776888252Smrg 1876888252Smrg#include "cir.h" 1976888252Smrg#define _LG_PRIVATE_ 2076888252Smrg#include "lg.h" 2176888252Smrg 2276888252Smrgstatic void 2376888252SmrgLgI2CPutBits(I2CBusPtr b, int clock, int data) 2476888252Smrg{ 2576888252Smrg unsigned int regval, regno; 2676888252Smrg CirPtr pCir = ((CirPtr)b->DriverPrivate.ptr); 2776888252Smrg if (b == pCir->I2CPtr1) 2876888252Smrg regno = 0x280; 2976888252Smrg else if (b == pCir->I2CPtr2) 3076888252Smrg regno = 0x282; 3176888252Smrg else 3276888252Smrg return; 3376888252Smrg 3476888252Smrg regval = 0xff7e; 3576888252Smrg if (clock) regval |= 0x0080; 3676888252Smrg if (data) regval |= 0x0001; 3776888252Smrg memww(regno, regval); 3876888252Smrg /* ErrorF("LgI2CPutBits: %d %d\n", clock, data); */ 3976888252Smrg} 4076888252Smrg 4176888252Smrgstatic void 4276888252SmrgLgI2CGetBits(I2CBusPtr b, int *clock, int *data) 4376888252Smrg{ 4476888252Smrg unsigned int regval, regno; 4576888252Smrg CirPtr pCir = ((CirPtr)b->DriverPrivate.ptr); 4676888252Smrg if (b == pCir->I2CPtr1) 4776888252Smrg regno = 0x280; 4876888252Smrg else if (b == pCir->I2CPtr2) 4976888252Smrg regno = 0x282; 5076888252Smrg else 5176888252Smrg return; 5276888252Smrg 5376888252Smrg regval = memrw(regno); 5476888252Smrg *clock = (regval & 0x8000) != 0; 5576888252Smrg *data = (regval & 0x0100) != 0; 5676888252Smrg /* ErrorF("LgI2CGetBits: %d %d\n", *clock, *data); */ 5776888252Smrg} 5876888252Smrg 5976888252SmrgBool 6076888252SmrgLgI2CInit(ScrnInfoPtr pScrn) 6176888252Smrg{ 6276888252Smrg CirPtr pCir = CIRPTR(pScrn); 6376888252Smrg I2CBusPtr I2CPtr; 6476888252Smrg 6576888252Smrg#ifdef LG_DEBUG 6676888252Smrg ErrorF("LgI2CInit\n"); 6776888252Smrg#endif 6876888252Smrg 6976888252Smrg I2CPtr = xf86CreateI2CBusRec(); 7076888252Smrg if (!I2CPtr) return FALSE; 7176888252Smrg 7276888252Smrg pCir->I2CPtr1 = I2CPtr; 7376888252Smrg 7476888252Smrg I2CPtr->BusName = "I2C bus 1"; 7576888252Smrg I2CPtr->scrnIndex = pScrn->scrnIndex; 7676888252Smrg I2CPtr->I2CPutBits = LgI2CPutBits; 7776888252Smrg I2CPtr->I2CGetBits = LgI2CGetBits; 7876888252Smrg I2CPtr->DriverPrivate.ptr = pCir; 7976888252Smrg 8076888252Smrg if (!xf86I2CBusInit(I2CPtr)) 8176888252Smrg return FALSE; 8276888252Smrg 8376888252Smrg I2CPtr = xf86CreateI2CBusRec(); 8476888252Smrg if (!I2CPtr) return FALSE; 8576888252Smrg 8676888252Smrg pCir->I2CPtr2 = I2CPtr; 8776888252Smrg 8876888252Smrg I2CPtr->BusName = "I2C bus 2"; 8976888252Smrg I2CPtr->scrnIndex = pScrn->scrnIndex; 9076888252Smrg I2CPtr->I2CPutBits = LgI2CPutBits; 9176888252Smrg I2CPtr->I2CGetBits = LgI2CGetBits; 9276888252Smrg I2CPtr->DriverPrivate.ptr = pCir; 9376888252Smrg 9476888252Smrg if (!xf86I2CBusInit(I2CPtr)) 9576888252Smrg return FALSE; 9676888252Smrg 9776888252Smrg return TRUE; 9876888252Smrg} 9976888252Smrg 100