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__ */
 |