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