2 * Copyright (C) 1998 Itai Nahshon, Michael Schimek
11 typedef unsigned char I2CByte
;
12 typedef unsigned short I2CSlaveAddr
;
14 typedef struct _I2CBusRec
*I2CBusPtr
;
15 typedef struct _I2CDevRec
*I2CDevPtr
;
17 /* I2C masters have to register themselves */
19 typedef struct _I2CBusRec
{
24 void (*I2CUDelay
) (I2CBusPtr b
, int usec
);
26 void (*I2CPutBits
) (I2CBusPtr b
, int scl
, int sda
);
27 void (*I2CGetBits
) (I2CBusPtr b
, int *scl
, int *sda
);
29 /* Look at the generic routines to see how these functions should behave. */
31 Bool (*I2CStart
) (I2CBusPtr b
, int timeout
);
32 Bool (*I2CAddress
) (I2CDevPtr d
, I2CSlaveAddr
);
33 void (*I2CStop
) (I2CDevPtr d
);
34 Bool (*I2CPutByte
) (I2CDevPtr d
, I2CByte data
);
35 Bool (*I2CGetByte
) (I2CDevPtr d
, I2CByte
* data
, Bool
);
37 DevUnion DriverPrivate
;
39 int HoldTime
; /* 1 / bus clock frequency, 5 or 2 usec */
41 int BitTimeout
; /* usec */
42 int ByteTimeout
; /* usec */
43 int AcknTimeout
; /* usec */
44 int StartTimeout
; /* usec */
45 int RiseFallTime
; /* usec */
49 Bool (*I2CWriteRead
) (I2CDevPtr d
, I2CByte
* WriteBuffer
, int nWrite
,
50 I2CByte
* ReadBuffer
, int nRead
);
53 #define CreateI2CBusRec xf86CreateI2CBusRec
54 extern _X_EXPORT I2CBusPtr
xf86CreateI2CBusRec(void);
56 #define DestroyI2CBusRec xf86DestroyI2CBusRec
57 extern _X_EXPORT
void xf86DestroyI2CBusRec(I2CBusPtr pI2CBus
, Bool unalloc
,
59 #define I2CBusInit xf86I2CBusInit
60 extern _X_EXPORT Bool
xf86I2CBusInit(I2CBusPtr pI2CBus
);
62 extern _X_EXPORT I2CBusPtr
xf86I2CFindBus(int scrnIndex
, char *name
);
63 extern _X_EXPORT
int xf86I2CGetScreenBuses(int scrnIndex
,
64 I2CBusPtr
** pppI2CBus
);
66 /* I2C slave devices */
68 typedef struct _I2CDevRec
{
71 int BitTimeout
; /* usec */
72 int ByteTimeout
; /* usec */
73 int AcknTimeout
; /* usec */
74 int StartTimeout
; /* usec */
76 I2CSlaveAddr SlaveAddr
;
79 DevUnion DriverPrivate
;
82 #define CreateI2CDevRec xf86CreateI2CDevRec
83 extern _X_EXPORT I2CDevPtr
xf86CreateI2CDevRec(void);
84 extern _X_EXPORT
void xf86DestroyI2CDevRec(I2CDevPtr pI2CDev
, Bool unalloc
);
86 #define I2CDevInit xf86I2CDevInit
87 extern _X_EXPORT Bool
xf86I2CDevInit(I2CDevPtr pI2CDev
);
88 extern _X_EXPORT I2CDevPtr
xf86I2CFindDev(I2CBusPtr
, I2CSlaveAddr
);
90 /* See descriptions of these functions in xf86i2c.c */
92 #define I2CProbeAddress xf86I2CProbeAddress
93 extern _X_EXPORT Bool
xf86I2CProbeAddress(I2CBusPtr pI2CBus
, I2CSlaveAddr
);
95 #define I2C_WriteRead xf86I2CWriteRead
96 extern _X_EXPORT Bool
xf86I2CWriteRead(I2CDevPtr d
, I2CByte
* WriteBuffer
,
97 int nWrite
, I2CByte
* ReadBuffer
,
99 #define xf86I2CRead(d, rb, nr) xf86I2CWriteRead(d, NULL, 0, rb, nr)
101 extern _X_EXPORT Bool
xf86I2CReadStatus(I2CDevPtr d
, I2CByte
* pbyte
);
102 extern _X_EXPORT Bool
xf86I2CReadByte(I2CDevPtr d
, I2CByte subaddr
,
104 extern _X_EXPORT Bool
xf86I2CReadBytes(I2CDevPtr d
, I2CByte subaddr
,
105 I2CByte
* pbyte
, int n
);
106 extern _X_EXPORT Bool
xf86I2CReadWord(I2CDevPtr d
, I2CByte subaddr
,
107 unsigned short *pword
);
108 #define xf86I2CWrite(d, wb, nw) xf86I2CWriteRead(d, wb, nw, NULL, 0)
109 extern _X_EXPORT Bool
xf86I2CWriteByte(I2CDevPtr d
, I2CByte subaddr
,
111 extern _X_EXPORT Bool
xf86I2CWriteBytes(I2CDevPtr d
, I2CByte subaddr
,
112 I2CByte
* WriteBuffer
, int nWrite
);
113 extern _X_EXPORT Bool
xf86I2CWriteWord(I2CDevPtr d
, I2CByte subaddr
,
114 unsigned short word
);
115 extern _X_EXPORT Bool
xf86I2CWriteVec(I2CDevPtr d
, I2CByte
* vec
, int nValues
);
117 #endif /*_XF86I2C_H */