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