xref: /openbmc/u-boot/arch/x86/include/asm/gpio.h (revision b71eec31)
155ae10f8SBill Richardson /*
255ae10f8SBill Richardson  * Copyright (c) 2012, Google Inc. All rights reserved.
31b4f25ffSSimon Glass  * SPDX-License-Identifier:	GPL-2.0
455ae10f8SBill Richardson  */
555ae10f8SBill Richardson 
655ae10f8SBill Richardson #ifndef _X86_GPIO_H_
755ae10f8SBill Richardson #define _X86_GPIO_H_
855ae10f8SBill Richardson 
91b4f25ffSSimon Glass #include <linux/compiler.h>
10c15b0b86SSimon Glass #include <asm/arch/gpio.h>
1155ae10f8SBill Richardson #include <asm-generic/gpio.h>
1255ae10f8SBill Richardson 
131b4f25ffSSimon Glass struct ich6_bank_platdata {
14*b71eec31SBin Meng 	uint16_t base_addr;
151b4f25ffSSimon Glass 	const char *bank_name;
161b4f25ffSSimon Glass };
171b4f25ffSSimon Glass 
181b4f25ffSSimon Glass #define GPIO_MODE_NATIVE	0
191b4f25ffSSimon Glass #define GPIO_MODE_GPIO		1
201b4f25ffSSimon Glass #define GPIO_MODE_NONE		1
211b4f25ffSSimon Glass 
221b4f25ffSSimon Glass #define GPIO_DIR_OUTPUT		0
231b4f25ffSSimon Glass #define GPIO_DIR_INPUT		1
241b4f25ffSSimon Glass 
251b4f25ffSSimon Glass #define GPIO_NO_INVERT		0
261b4f25ffSSimon Glass #define GPIO_INVERT		1
271b4f25ffSSimon Glass 
281b4f25ffSSimon Glass #define GPIO_LEVEL_LOW		0
291b4f25ffSSimon Glass #define GPIO_LEVEL_HIGH		1
301b4f25ffSSimon Glass 
311b4f25ffSSimon Glass #define GPIO_NO_BLINK		0
321b4f25ffSSimon Glass #define GPIO_BLINK		1
331b4f25ffSSimon Glass 
341b4f25ffSSimon Glass #define GPIO_RESET_PWROK	0
351b4f25ffSSimon Glass #define GPIO_RESET_RSMRST	1
361b4f25ffSSimon Glass 
371b4f25ffSSimon Glass struct pch_gpio_set1 {
381b4f25ffSSimon Glass 	u32 gpio0:1;
391b4f25ffSSimon Glass 	u32 gpio1:1;
401b4f25ffSSimon Glass 	u32 gpio2:1;
411b4f25ffSSimon Glass 	u32 gpio3:1;
421b4f25ffSSimon Glass 	u32 gpio4:1;
431b4f25ffSSimon Glass 	u32 gpio5:1;
441b4f25ffSSimon Glass 	u32 gpio6:1;
451b4f25ffSSimon Glass 	u32 gpio7:1;
461b4f25ffSSimon Glass 	u32 gpio8:1;
471b4f25ffSSimon Glass 	u32 gpio9:1;
481b4f25ffSSimon Glass 	u32 gpio10:1;
491b4f25ffSSimon Glass 	u32 gpio11:1;
501b4f25ffSSimon Glass 	u32 gpio12:1;
511b4f25ffSSimon Glass 	u32 gpio13:1;
521b4f25ffSSimon Glass 	u32 gpio14:1;
531b4f25ffSSimon Glass 	u32 gpio15:1;
541b4f25ffSSimon Glass 	u32 gpio16:1;
551b4f25ffSSimon Glass 	u32 gpio17:1;
561b4f25ffSSimon Glass 	u32 gpio18:1;
571b4f25ffSSimon Glass 	u32 gpio19:1;
581b4f25ffSSimon Glass 	u32 gpio20:1;
591b4f25ffSSimon Glass 	u32 gpio21:1;
601b4f25ffSSimon Glass 	u32 gpio22:1;
611b4f25ffSSimon Glass 	u32 gpio23:1;
621b4f25ffSSimon Glass 	u32 gpio24:1;
631b4f25ffSSimon Glass 	u32 gpio25:1;
641b4f25ffSSimon Glass 	u32 gpio26:1;
651b4f25ffSSimon Glass 	u32 gpio27:1;
661b4f25ffSSimon Glass 	u32 gpio28:1;
671b4f25ffSSimon Glass 	u32 gpio29:1;
681b4f25ffSSimon Glass 	u32 gpio30:1;
691b4f25ffSSimon Glass 	u32 gpio31:1;
701b4f25ffSSimon Glass } __packed;
711b4f25ffSSimon Glass 
721b4f25ffSSimon Glass struct pch_gpio_set2 {
731b4f25ffSSimon Glass 	u32 gpio32:1;
741b4f25ffSSimon Glass 	u32 gpio33:1;
751b4f25ffSSimon Glass 	u32 gpio34:1;
761b4f25ffSSimon Glass 	u32 gpio35:1;
771b4f25ffSSimon Glass 	u32 gpio36:1;
781b4f25ffSSimon Glass 	u32 gpio37:1;
791b4f25ffSSimon Glass 	u32 gpio38:1;
801b4f25ffSSimon Glass 	u32 gpio39:1;
811b4f25ffSSimon Glass 	u32 gpio40:1;
821b4f25ffSSimon Glass 	u32 gpio41:1;
831b4f25ffSSimon Glass 	u32 gpio42:1;
841b4f25ffSSimon Glass 	u32 gpio43:1;
851b4f25ffSSimon Glass 	u32 gpio44:1;
861b4f25ffSSimon Glass 	u32 gpio45:1;
871b4f25ffSSimon Glass 	u32 gpio46:1;
881b4f25ffSSimon Glass 	u32 gpio47:1;
891b4f25ffSSimon Glass 	u32 gpio48:1;
901b4f25ffSSimon Glass 	u32 gpio49:1;
911b4f25ffSSimon Glass 	u32 gpio50:1;
921b4f25ffSSimon Glass 	u32 gpio51:1;
931b4f25ffSSimon Glass 	u32 gpio52:1;
941b4f25ffSSimon Glass 	u32 gpio53:1;
951b4f25ffSSimon Glass 	u32 gpio54:1;
961b4f25ffSSimon Glass 	u32 gpio55:1;
971b4f25ffSSimon Glass 	u32 gpio56:1;
981b4f25ffSSimon Glass 	u32 gpio57:1;
991b4f25ffSSimon Glass 	u32 gpio58:1;
1001b4f25ffSSimon Glass 	u32 gpio59:1;
1011b4f25ffSSimon Glass 	u32 gpio60:1;
1021b4f25ffSSimon Glass 	u32 gpio61:1;
1031b4f25ffSSimon Glass 	u32 gpio62:1;
1041b4f25ffSSimon Glass 	u32 gpio63:1;
1051b4f25ffSSimon Glass } __packed;
1061b4f25ffSSimon Glass 
1071b4f25ffSSimon Glass struct pch_gpio_set3 {
1081b4f25ffSSimon Glass 	u32 gpio64:1;
1091b4f25ffSSimon Glass 	u32 gpio65:1;
1101b4f25ffSSimon Glass 	u32 gpio66:1;
1111b4f25ffSSimon Glass 	u32 gpio67:1;
1121b4f25ffSSimon Glass 	u32 gpio68:1;
1131b4f25ffSSimon Glass 	u32 gpio69:1;
1141b4f25ffSSimon Glass 	u32 gpio70:1;
1151b4f25ffSSimon Glass 	u32 gpio71:1;
1161b4f25ffSSimon Glass 	u32 gpio72:1;
1171b4f25ffSSimon Glass 	u32 gpio73:1;
1181b4f25ffSSimon Glass 	u32 gpio74:1;
1191b4f25ffSSimon Glass 	u32 gpio75:1;
1201b4f25ffSSimon Glass } __packed;
1211b4f25ffSSimon Glass 
1221b4f25ffSSimon Glass /*
1231b4f25ffSSimon Glass  * This hilariously complex structure came from Coreboot. The
1241b4f25ffSSimon Glass  * setup_pch_gpios() function uses it. It could be move to device tree, or
1251b4f25ffSSimon Glass  * adjust to use masks instead of bitfields.
1261b4f25ffSSimon Glass  */
1271b4f25ffSSimon Glass struct pch_gpio_map {
1281b4f25ffSSimon Glass 	struct {
1291b4f25ffSSimon Glass 		const struct pch_gpio_set1 *mode;
1301b4f25ffSSimon Glass 		const struct pch_gpio_set1 *direction;
1311b4f25ffSSimon Glass 		const struct pch_gpio_set1 *level;
1321b4f25ffSSimon Glass 		const struct pch_gpio_set1 *reset;
1331b4f25ffSSimon Glass 		const struct pch_gpio_set1 *invert;
1341b4f25ffSSimon Glass 		const struct pch_gpio_set1 *blink;
1351b4f25ffSSimon Glass 	} set1;
1361b4f25ffSSimon Glass 	struct {
1371b4f25ffSSimon Glass 		const struct pch_gpio_set2 *mode;
1381b4f25ffSSimon Glass 		const struct pch_gpio_set2 *direction;
1391b4f25ffSSimon Glass 		const struct pch_gpio_set2 *level;
1401b4f25ffSSimon Glass 		const struct pch_gpio_set2 *reset;
1411b4f25ffSSimon Glass 	} set2;
1421b4f25ffSSimon Glass 	struct {
1431b4f25ffSSimon Glass 		const struct pch_gpio_set3 *mode;
1441b4f25ffSSimon Glass 		const struct pch_gpio_set3 *direction;
1451b4f25ffSSimon Glass 		const struct pch_gpio_set3 *level;
1461b4f25ffSSimon Glass 		const struct pch_gpio_set3 *reset;
1471b4f25ffSSimon Glass 	} set3;
1481b4f25ffSSimon Glass };
1491b4f25ffSSimon Glass 
150*b71eec31SBin Meng void setup_pch_gpios(u16 gpiobase, const struct pch_gpio_map *gpio);
1511b4f25ffSSimon Glass void ich_gpio_set_gpio_map(const struct pch_gpio_map *map);
1521b4f25ffSSimon Glass 
15355ae10f8SBill Richardson #endif /* _X86_GPIO_H_ */
154