/* * Raspberry Pi GPIO support */ #include "u.h" #include "../port/lib.h" #include "../port/error.h" #include "mem.h" #include "dat.h" #include "fns.h" #include "io.h" #define GPIOREGS (VIRTIO+0x200000) /* GPIO regs */ enum { Fsel0 = 0x00>>2, FuncMask= 0x7, Set0 = 0x1c>>2, Clr0 = 0x28>>2, Lev0 = 0x34>>2, Evds0 = 0x40>>2, Redge0 = 0x4C>>2, Fedge0 = 0x58>>2, Hpin0 = 0x64>>2, Lpin0 = 0x70>>2, ARedge0 = 0x7C>>2, AFedge0 = 0x88>>2, PUD = 0x94>>2, Off = 0x0, Pulldown= 0x1, Pullup = 0x2, PudMask = 0x3, PUDclk0 = 0x98>>2, PUDclk1 = 0x9c>>2, /* BCM2711 only */ PUPPDN0 = 0xe4>>2, PUPPDN1 = 0xe8>>2, PUPPDN2 = 0xec>>2, PUPPDN3 = 0xf0>>2, }; static u32int *regs = (u32int*)GPIOREGS; void gpiosel(uint pin, int func) { int shift = (pin % 10) * 3; u32int *reg = ®s[Fsel0 + pin/10]; func &= FuncMask; *reg = (*reg & ~(FuncMask<