diff -drupN a/tools/pm-sleep/include/gpio.h b/tools/pm-sleep/include/gpio.h --- a/tools/pm-sleep/include/gpio.h 1970-01-01 03:00:00.000000000 +0300 +++ b/tools/pm-sleep/include/gpio.h 2022-06-09 05:02:37.000000000 +0300 @@ -0,0 +1,67 @@ +#ifndef __GPIO_IO_H__ +#define __GPIO_IO_H__ + + +#define GPIO_BASE 0xb0010000 + +#define PXPIN 0x00 /* PIN Level Register */ +#define PXINT 0x10 /* Port Interrupt Register */ +#define PXINTS 0x14 /* Port Interrupt Set Register */ +#define PXINTC 0x18 /* Port Interrupt Clear Register */ +#define PXMSK 0x20 /* Port Interrupt Mask Reg */ +#define PXMSKS 0x24 /* Port Interrupt Mask Set Reg */ +#define PXMSKC 0x28 /* Port Interrupt Mask Clear Reg */ +#define PXPAT1 0x30 /* Port Pattern 1 Set Reg. */ +#define PXPAT1S 0x34 /* Port Pattern 1 Set Reg. */ +#define PXPAT1C 0x38 /* Port Pattern 1 Clear Reg. */ +#define PXPAT0 0x40 /* Port Pattern 0 Register */ +#define PXPAT0S 0x44 /* Port Pattern 0 Set Register */ +#define PXPAT0C 0x48 /* Port Pattern 0 Clear Register */ +#define PXFLG 0x50 /* Port Flag Register */ +#define PXFLGC 0x58 /* Port Flag clear Register */ +#define PXPE 0x70 /* Port Pull Disable Register */ +#define PXPES 0x74 /* Port Pull Disable Set Register */ +#define PXPEC 0x78 /* Port Pull Disable Clear Register */ +enum gpio_function { + GPIO_FUNC_0 = 0x00, //0000, GPIO as function 0 / device 0 + GPIO_FUNC_1 = 0x01, //0001, GPIO as function 1 / device 1 + GPIO_FUNC_2 = 0x02, //0010, GPIO as function 2 / device 2 + GPIO_FUNC_3 = 0x03, //0011, GPIO as function 3 / device 3 + GPIO_OUTPUT0 = 0x04, //0100, GPIO output low level + GPIO_OUTPUT1 = 0x05, //0101, GPIO output high level + GPIO_INPUT = 0x06, //0110, GPIO as input + GPIO_INT_LO = 0x08, //1000, Low Level trigger interrupt + GPIO_INT_HI = 0x09, //1001, High Level trigger interrupt + GPIO_INT_FE = 0x0a, //1010, Fall Edge trigger interrupt + GPIO_INT_RE = 0x0b, //1011, Rise Edge trigger interrupt + GPIO_INPUT_PULL = 0x16, //0001 0110, GPIO as input and enable pull +}; + +void set_gpio_func(int gpio, int type); +int get_gpio_func(int gpio); +#if 1 +static int gpio_get_value(unsigned int gpio) +{ + unsigned int port = gpio / 32; + unsigned int pin = gpio % 32; + unsigned int base = GPIO_BASE + 0x100 * port; + return !!(REG32(base + PXPIN) & (1 << pin)); +} +static inline void gpio_direction_output(unsigned int gpio, int value) +{ + if (value) + set_gpio_func(gpio,GPIO_OUTPUT1); + else + set_gpio_func(gpio,GPIO_OUTPUT0); +} +static inline void gpio_direction_input(unsigned int gpio) +{ + set_gpio_func(gpio,GPIO_INPUT); +} +#else +int gpio_get_value(unsigned int gpio); +void gpio_direction_output(unsigned int gpio, int value); +void gpio_direction_input(unsigned int gpio); +#endif + +#endif /* __GPIO_IO_H__ */