1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * Copyright (C) 1998 Itai Nahshon, Michael Schimek 3*4882a593Smuzhiyun */ 4*4882a593Smuzhiyun 5*4882a593Smuzhiyun #ifndef _XF86I2C_H 6*4882a593Smuzhiyun #define _XF86I2C_H 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun #include "regionstr.h" 9*4882a593Smuzhiyun #include "xf86.h" 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun typedef unsigned char I2CByte; 12*4882a593Smuzhiyun typedef unsigned short I2CSlaveAddr; 13*4882a593Smuzhiyun 14*4882a593Smuzhiyun typedef struct _I2CBusRec *I2CBusPtr; 15*4882a593Smuzhiyun typedef struct _I2CDevRec *I2CDevPtr; 16*4882a593Smuzhiyun 17*4882a593Smuzhiyun /* I2C masters have to register themselves */ 18*4882a593Smuzhiyun 19*4882a593Smuzhiyun typedef struct _I2CBusRec { 20*4882a593Smuzhiyun char *BusName; 21*4882a593Smuzhiyun int scrnIndex; 22*4882a593Smuzhiyun ScrnInfoPtr pScrn; 23*4882a593Smuzhiyun 24*4882a593Smuzhiyun void (*I2CUDelay) (I2CBusPtr b, int usec); 25*4882a593Smuzhiyun 26*4882a593Smuzhiyun void (*I2CPutBits) (I2CBusPtr b, int scl, int sda); 27*4882a593Smuzhiyun void (*I2CGetBits) (I2CBusPtr b, int *scl, int *sda); 28*4882a593Smuzhiyun 29*4882a593Smuzhiyun /* Look at the generic routines to see how these functions should behave. */ 30*4882a593Smuzhiyun 31*4882a593Smuzhiyun Bool (*I2CStart) (I2CBusPtr b, int timeout); 32*4882a593Smuzhiyun Bool (*I2CAddress) (I2CDevPtr d, I2CSlaveAddr); 33*4882a593Smuzhiyun void (*I2CStop) (I2CDevPtr d); 34*4882a593Smuzhiyun Bool (*I2CPutByte) (I2CDevPtr d, I2CByte data); 35*4882a593Smuzhiyun Bool (*I2CGetByte) (I2CDevPtr d, I2CByte * data, Bool); 36*4882a593Smuzhiyun 37*4882a593Smuzhiyun DevUnion DriverPrivate; 38*4882a593Smuzhiyun 39*4882a593Smuzhiyun int HoldTime; /* 1 / bus clock frequency, 5 or 2 usec */ 40*4882a593Smuzhiyun 41*4882a593Smuzhiyun int BitTimeout; /* usec */ 42*4882a593Smuzhiyun int ByteTimeout; /* usec */ 43*4882a593Smuzhiyun int AcknTimeout; /* usec */ 44*4882a593Smuzhiyun int StartTimeout; /* usec */ 45*4882a593Smuzhiyun int RiseFallTime; /* usec */ 46*4882a593Smuzhiyun 47*4882a593Smuzhiyun I2CDevPtr FirstDev; 48*4882a593Smuzhiyun I2CBusPtr NextBus; 49*4882a593Smuzhiyun Bool (*I2CWriteRead) (I2CDevPtr d, I2CByte * WriteBuffer, int nWrite, 50*4882a593Smuzhiyun I2CByte * ReadBuffer, int nRead); 51*4882a593Smuzhiyun } I2CBusRec; 52*4882a593Smuzhiyun 53*4882a593Smuzhiyun #define CreateI2CBusRec xf86CreateI2CBusRec 54*4882a593Smuzhiyun extern _X_EXPORT I2CBusPtr xf86CreateI2CBusRec(void); 55*4882a593Smuzhiyun 56*4882a593Smuzhiyun #define DestroyI2CBusRec xf86DestroyI2CBusRec 57*4882a593Smuzhiyun extern _X_EXPORT void xf86DestroyI2CBusRec(I2CBusPtr pI2CBus, Bool unalloc, 58*4882a593Smuzhiyun Bool devs_too); 59*4882a593Smuzhiyun #define I2CBusInit xf86I2CBusInit 60*4882a593Smuzhiyun extern _X_EXPORT Bool xf86I2CBusInit(I2CBusPtr pI2CBus); 61*4882a593Smuzhiyun 62*4882a593Smuzhiyun extern _X_EXPORT I2CBusPtr xf86I2CFindBus(int scrnIndex, char *name); 63*4882a593Smuzhiyun extern _X_EXPORT int xf86I2CGetScreenBuses(int scrnIndex, 64*4882a593Smuzhiyun I2CBusPtr ** pppI2CBus); 65*4882a593Smuzhiyun 66*4882a593Smuzhiyun /* I2C slave devices */ 67*4882a593Smuzhiyun 68*4882a593Smuzhiyun typedef struct _I2CDevRec { 69*4882a593Smuzhiyun const char *DevName; 70*4882a593Smuzhiyun 71*4882a593Smuzhiyun int BitTimeout; /* usec */ 72*4882a593Smuzhiyun int ByteTimeout; /* usec */ 73*4882a593Smuzhiyun int AcknTimeout; /* usec */ 74*4882a593Smuzhiyun int StartTimeout; /* usec */ 75*4882a593Smuzhiyun 76*4882a593Smuzhiyun I2CSlaveAddr SlaveAddr; 77*4882a593Smuzhiyun I2CBusPtr pI2CBus; 78*4882a593Smuzhiyun I2CDevPtr NextDev; 79*4882a593Smuzhiyun DevUnion DriverPrivate; 80*4882a593Smuzhiyun } I2CDevRec; 81*4882a593Smuzhiyun 82*4882a593Smuzhiyun #define CreateI2CDevRec xf86CreateI2CDevRec 83*4882a593Smuzhiyun extern _X_EXPORT I2CDevPtr xf86CreateI2CDevRec(void); 84*4882a593Smuzhiyun extern _X_EXPORT void xf86DestroyI2CDevRec(I2CDevPtr pI2CDev, Bool unalloc); 85*4882a593Smuzhiyun 86*4882a593Smuzhiyun #define I2CDevInit xf86I2CDevInit 87*4882a593Smuzhiyun extern _X_EXPORT Bool xf86I2CDevInit(I2CDevPtr pI2CDev); 88*4882a593Smuzhiyun extern _X_EXPORT I2CDevPtr xf86I2CFindDev(I2CBusPtr, I2CSlaveAddr); 89*4882a593Smuzhiyun 90*4882a593Smuzhiyun /* See descriptions of these functions in xf86i2c.c */ 91*4882a593Smuzhiyun 92*4882a593Smuzhiyun #define I2CProbeAddress xf86I2CProbeAddress 93*4882a593Smuzhiyun extern _X_EXPORT Bool xf86I2CProbeAddress(I2CBusPtr pI2CBus, I2CSlaveAddr); 94*4882a593Smuzhiyun 95*4882a593Smuzhiyun #define I2C_WriteRead xf86I2CWriteRead 96*4882a593Smuzhiyun extern _X_EXPORT Bool xf86I2CWriteRead(I2CDevPtr d, I2CByte * WriteBuffer, 97*4882a593Smuzhiyun int nWrite, I2CByte * ReadBuffer, 98*4882a593Smuzhiyun int nRead); 99*4882a593Smuzhiyun #define xf86I2CRead(d, rb, nr) xf86I2CWriteRead(d, NULL, 0, rb, nr) 100*4882a593Smuzhiyun 101*4882a593Smuzhiyun extern _X_EXPORT Bool xf86I2CReadStatus(I2CDevPtr d, I2CByte * pbyte); 102*4882a593Smuzhiyun extern _X_EXPORT Bool xf86I2CReadByte(I2CDevPtr d, I2CByte subaddr, 103*4882a593Smuzhiyun I2CByte * pbyte); 104*4882a593Smuzhiyun extern _X_EXPORT Bool xf86I2CReadBytes(I2CDevPtr d, I2CByte subaddr, 105*4882a593Smuzhiyun I2CByte * pbyte, int n); 106*4882a593Smuzhiyun extern _X_EXPORT Bool xf86I2CReadWord(I2CDevPtr d, I2CByte subaddr, 107*4882a593Smuzhiyun unsigned short *pword); 108*4882a593Smuzhiyun #define xf86I2CWrite(d, wb, nw) xf86I2CWriteRead(d, wb, nw, NULL, 0) 109*4882a593Smuzhiyun extern _X_EXPORT Bool xf86I2CWriteByte(I2CDevPtr d, I2CByte subaddr, 110*4882a593Smuzhiyun I2CByte byte); 111*4882a593Smuzhiyun extern _X_EXPORT Bool xf86I2CWriteBytes(I2CDevPtr d, I2CByte subaddr, 112*4882a593Smuzhiyun I2CByte * WriteBuffer, int nWrite); 113*4882a593Smuzhiyun extern _X_EXPORT Bool xf86I2CWriteWord(I2CDevPtr d, I2CByte subaddr, 114*4882a593Smuzhiyun unsigned short word); 115*4882a593Smuzhiyun extern _X_EXPORT Bool xf86I2CWriteVec(I2CDevPtr d, I2CByte * vec, int nValues); 116*4882a593Smuzhiyun 117*4882a593Smuzhiyun #endif /*_XF86I2C_H */ 118