mirror of https://github.com/OpenIPC/firmware.git
72 lines
2.8 KiB
Diff
72 lines
2.8 KiB
Diff
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__ */
|