diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2022-06-11 21:06:39 +0000 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2022-06-11 21:06:39 +0000 |
commit | 276f2039a9bceb4bc23b0fa1ce3169057aac405e (patch) | |
tree | a0c74139cb4806dc9a0b7ad78de170622e34f5ea /sys/src/9/port/i2c.h | |
parent | 3e176bd975492427b232308e37ff51e7389d08e7 (diff) |
devi2c: add generic i2c bus driver
Diffstat (limited to 'sys/src/9/port/i2c.h')
-rw-r--r-- | sys/src/9/port/i2c.h | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/sys/src/9/port/i2c.h b/sys/src/9/port/i2c.h new file mode 100644 index 000000000..eebff9569 --- /dev/null +++ b/sys/src/9/port/i2c.h @@ -0,0 +1,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); |