summaryrefslogtreecommitdiff
path: root/sys/src/9/port/i2c.h
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@felloff.net>2022-06-11 21:06:39 +0000
committercinap_lenrek <cinap_lenrek@felloff.net>2022-06-11 21:06:39 +0000
commit276f2039a9bceb4bc23b0fa1ce3169057aac405e (patch)
treea0c74139cb4806dc9a0b7ad78de170622e34f5ea /sys/src/9/port/i2c.h
parent3e176bd975492427b232308e37ff51e7389d08e7 (diff)
devi2c: add generic i2c bus driver
Diffstat (limited to 'sys/src/9/port/i2c.h')
-rw-r--r--sys/src/9/port/i2c.h56
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);