summaryrefslogtreecommitdiff
path: root/sys/src/9/port/i2c.h
blob: eebff95690a29bc57040a0d31b0a95ac1bbe1b20 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
typedef struct I2Cbus I2Cbus;
struct I2Cbus
{
	char	*name;
	int	speed;

	void	*ctlr;
	int	(*init)(I2Cbus *bus);
	int	(*io)(I2Cbus *bus, uchar *pkt, int olen, int ilen);

	int	probed;
	QLock;
};

typedef struct I2Cdev I2Cdev;
struct I2Cdev
{
	I2Cbus	*bus;

	int	a10;
	int	addr;
	int	subaddr;
	ulong	size;
};

/*
 * Register busses (controllers) and devices (addresses)
 */
extern void addi2cbus(I2Cbus *bus);
extern void addi2cdev(I2Cdev *dev);

/*
 * Look-up busses and devices by name and address
 */
extern I2Cbus* i2cbus(char *name);
extern I2Cdev* i2cdev(I2Cbus *bus, int addr);

/*
 * generic I/O
 */
extern int i2cbusio(I2Cbus *bus, uchar *pkt, int olen, int ilen);
extern int i2crecv(I2Cdev *dev, void *data, int len, vlong addr);
extern int i2csend(I2Cdev *dev, void *data, int len, vlong addr);

/*
 * common I/O for SMbus
 */
extern int i2cquick(I2Cdev *dev, int rw);
extern int i2crecvbyte(I2Cdev *dev);
extern int i2csendbyte(I2Cdev *dev, uchar b);
extern int i2creadbyte(I2Cdev *dev, ulong addr);
extern int i2cwritebyte(I2Cdev *dev, ulong addr, uchar b);
extern int i2creadword(I2Cdev *dev, ulong addr);
extern int i2cwriteword(I2Cdev *dev, ulong addr, ushort w);
extern vlong i2cread32(I2Cdev *dev, ulong addr);
extern vlong i2cwrite32(I2Cdev *dev, ulong addr, ulong u);