summaryrefslogtreecommitdiff
path: root/sys/src/9/bcm
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@felloff.net>2019-07-28 11:39:57 +0200
committercinap_lenrek <cinap_lenrek@felloff.net>2019-07-28 11:39:57 +0200
commit05f9a66fd4ea4a3744847d354bda9a1f4aefcdbc (patch)
tree5dd3c46f7c05d5d554ae7d7106dce5eb958d7c52 /sys/src/9/bcm
parent8630bd35a636a463bcf7211aaa0f014600013463 (diff)
bcm, bcm64: add vcore support for raspberry pi 3 GPIO expander
Diffstat (limited to 'sys/src/9/bcm')
-rw-r--r--sys/src/9/bcm/fns.h1
-rw-r--r--sys/src/9/bcm/vcore.c30
2 files changed, 28 insertions, 3 deletions
diff --git a/sys/src/9/bcm/fns.h b/sys/src/9/bcm/fns.h
index 0853f7614..125dd4f4c 100644
--- a/sys/src/9/bcm/fns.h
+++ b/sys/src/9/bcm/fns.h
@@ -32,6 +32,7 @@ extern void dmaflush(int, void*, ulong);
extern void dmastart(int, int, int, void*, void*, int);
extern int dmawait(int);
extern uintptr dmaaddr(void *va);
+extern void egpset(uint, int);
extern int fbblank(int);
extern void* fbinit(int, int*, int*, int*);
extern u32int farget(void);
diff --git a/sys/src/9/bcm/vcore.c b/sys/src/9/bcm/vcore.c
index 53293b0d4..9b9b8cc1a 100644
--- a/sys/src/9/bcm/vcore.c
+++ b/sys/src/9/bcm/vcore.c
@@ -40,9 +40,18 @@ enum {
TagGetpower = 0x00020001,
TagSetpower = 0x00028001,
Powerwait = 1<<1,
- TagGetclkspd= 0x00030002,
- TagGetclkmax= 0x00030004,
- TagSetclkspd= 0x00038002,
+ TagGetclkstate = 0x00030001,
+ TagGetclkspd = 0x00030002,
+ TagGetclkmax = 0x00030004,
+ TagSetclkstate = 0x00038001,
+ TagSetclkspd = 0x00038002,
+
+ TagGetEgpioState= 0x00030041,
+ TagSetEgpioState= 0x00038041,
+ TagSetSdhostClk = 0x00038042,
+ TagGetEgpioConf = 0x00030043,
+ TagSetEgpioConf = 0x00038043,
+
TagGettemp = 0x00030006,
TagFballoc = 0x00040001,
TagFbfree = 0x00048001,
@@ -388,3 +397,18 @@ vgpset(uint port, int on)
vgpio.counts[port] = (vgpio.incs << 16) | vgpio.decs;
vgpio.ison = on;
}
+
+/*
+ * Raspberry Pi GPIO expander (Pi 3 and 4)
+ */
+void
+egpset(uint port, int on)
+{
+ u32int buf[2];
+
+ if(port >= 8)
+ return;
+ buf[0] = 128 + port;
+ buf[1] = on;
+ vcreq(TagSetEgpioState, buf, sizeof(buf), sizeof(buf));
+}