From 05f9a66fd4ea4a3744847d354bda9a1f4aefcdbc Mon Sep 17 00:00:00 2001 From: cinap_lenrek Date: Sun, 28 Jul 2019 11:39:57 +0200 Subject: bcm, bcm64: add vcore support for raspberry pi 3 GPIO expander --- sys/src/9/bcm/fns.h | 1 + sys/src/9/bcm/vcore.c | 30 +++++++++++++++++++++++++++--- sys/src/9/bcm64/fns.h | 1 + 3 files changed, 29 insertions(+), 3 deletions(-) (limited to 'sys/src') 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)); +} diff --git a/sys/src/9/bcm64/fns.h b/sys/src/9/bcm64/fns.h index 78914c073..5ace48713 100644 --- a/sys/src/9/bcm64/fns.h +++ b/sys/src/9/bcm64/fns.h @@ -164,6 +164,7 @@ extern void setclkrate(int clkid, ulong hz); extern uint getcputemp(void); extern void vgpinit(void); extern void vgpset(uint port, int on); +extern void egpset(uint port, int on); /* bootargs */ extern void bootargsinit(uintptr); -- cgit v1.2.3