1 /* 2 * Copyright (C) 2014 Google, Inc 3 * 4 * SPDX-License-Identifier: GPL-2.0+ 5 */ 6 7 #include <common.h> 8 #include <asm/gpio.h> 9 10 int arch_early_init_r(void) 11 { 12 return 0; 13 } 14 15 static const struct pch_gpio_set1 pch_gpio_set1_mode = { 16 .gpio0 = GPIO_MODE_GPIO, /* NMI_DBG# */ 17 .gpio3 = GPIO_MODE_GPIO, /* ALS_INT# */ 18 .gpio5 = GPIO_MODE_GPIO, /* SIM_DET */ 19 .gpio7 = GPIO_MODE_GPIO, /* EC_SCI# */ 20 .gpio8 = GPIO_MODE_GPIO, /* EC_SMI# */ 21 .gpio9 = GPIO_MODE_GPIO, /* RECOVERY# */ 22 .gpio10 = GPIO_MODE_GPIO, /* SPD vector D3 */ 23 .gpio11 = GPIO_MODE_GPIO, /* smbalert#, let's keep it initialized */ 24 .gpio12 = GPIO_MODE_GPIO, /* TP_INT# */ 25 .gpio14 = GPIO_MODE_GPIO, /* Touch_INT_L */ 26 .gpio15 = GPIO_MODE_GPIO, /* EC_LID_OUT# (EC_WAKE#) */ 27 .gpio21 = GPIO_MODE_GPIO, /* EC_IN_RW */ 28 .gpio24 = GPIO_MODE_GPIO, /* DDR3L_EN */ 29 .gpio28 = GPIO_MODE_GPIO, /* SLP_ME_CSW_DEV# */ 30 }; 31 32 static const struct pch_gpio_set1 pch_gpio_set1_direction = { 33 .gpio0 = GPIO_DIR_INPUT, 34 .gpio3 = GPIO_DIR_INPUT, 35 .gpio5 = GPIO_DIR_INPUT, 36 .gpio7 = GPIO_DIR_INPUT, 37 .gpio8 = GPIO_DIR_INPUT, 38 .gpio9 = GPIO_DIR_INPUT, 39 .gpio10 = GPIO_DIR_INPUT, 40 .gpio11 = GPIO_DIR_INPUT, 41 .gpio12 = GPIO_DIR_INPUT, 42 .gpio14 = GPIO_DIR_INPUT, 43 .gpio15 = GPIO_DIR_INPUT, 44 .gpio21 = GPIO_DIR_INPUT, 45 .gpio24 = GPIO_DIR_OUTPUT, 46 .gpio28 = GPIO_DIR_INPUT, 47 }; 48 49 static const struct pch_gpio_set1 pch_gpio_set1_level = { 50 .gpio1 = GPIO_LEVEL_HIGH, 51 .gpio6 = GPIO_LEVEL_HIGH, 52 .gpio24 = GPIO_LEVEL_LOW, 53 }; 54 55 static const struct pch_gpio_set1 pch_gpio_set1_invert = { 56 .gpio7 = GPIO_INVERT, 57 .gpio8 = GPIO_INVERT, 58 .gpio12 = GPIO_INVERT, 59 .gpio14 = GPIO_INVERT, 60 .gpio15 = GPIO_INVERT, 61 }; 62 63 static const struct pch_gpio_set2 pch_gpio_set2_mode = { 64 .gpio36 = GPIO_MODE_GPIO, /* W_DISABLE_L */ 65 .gpio41 = GPIO_MODE_GPIO, /* SPD vector D0 */ 66 .gpio42 = GPIO_MODE_GPIO, /* SPD vector D1 */ 67 .gpio43 = GPIO_MODE_GPIO, /* SPD vector D2 */ 68 .gpio57 = GPIO_MODE_GPIO, /* PCH_SPI_WP_D */ 69 .gpio60 = GPIO_MODE_GPIO, /* DRAMRST_CNTRL_PCH */ 70 }; 71 72 static const struct pch_gpio_set2 pch_gpio_set2_direction = { 73 .gpio36 = GPIO_DIR_OUTPUT, 74 .gpio41 = GPIO_DIR_INPUT, 75 .gpio42 = GPIO_DIR_INPUT, 76 .gpio43 = GPIO_DIR_INPUT, 77 .gpio57 = GPIO_DIR_INPUT, 78 .gpio60 = GPIO_DIR_OUTPUT, 79 }; 80 81 static const struct pch_gpio_set2 pch_gpio_set2_level = { 82 .gpio36 = GPIO_LEVEL_HIGH, 83 .gpio60 = GPIO_LEVEL_HIGH, 84 }; 85 86 static const struct pch_gpio_set3 pch_gpio_set3_mode = { 87 }; 88 89 static const struct pch_gpio_set3 pch_gpio_set3_direction = { 90 }; 91 92 static const struct pch_gpio_set3 pch_gpio_set3_level = { 93 }; 94 95 static const struct pch_gpio_map link_gpio_map = { 96 .set1 = { 97 .mode = &pch_gpio_set1_mode, 98 .direction = &pch_gpio_set1_direction, 99 .level = &pch_gpio_set1_level, 100 .invert = &pch_gpio_set1_invert, 101 }, 102 .set2 = { 103 .mode = &pch_gpio_set2_mode, 104 .direction = &pch_gpio_set2_direction, 105 .level = &pch_gpio_set2_level, 106 }, 107 .set3 = { 108 .mode = &pch_gpio_set3_mode, 109 .direction = &pch_gpio_set3_direction, 110 .level = &pch_gpio_set3_level, 111 }, 112 }; 113 114 int board_early_init_f(void) 115 { 116 ich_gpio_set_gpio_map(&link_gpio_map); 117 118 return 0; 119 } 120