diff --git a/src/mainboard/google/kahlee/BiosCallOuts.c b/src/mainboard/google/kahlee/BiosCallOuts.c
index 1c0df4d..fafe0aa 100644
--- a/src/mainboard/google/kahlee/BiosCallOuts.c
+++ b/src/mainboard/google/kahlee/BiosCallOuts.c
@@ -21,13 +21,10 @@
 
 void platform_FchParams_reset(FCH_RESET_DATA_BLOCK *FchParams_reset)
 {
-	FchParams_reset->EarlyOemGpioTable = (void *)get_gpio_table();
 }
 
 void platform_FchParams_env(FCH_DATA_BLOCK *FchParams_env)
 {
-	FchParams_env->PostOemGpioTable = (void *)get_gpio_table();
-
 	/* SDHCI/MMC configuration */
 	if (IS_ENABLED(CONFIG_BOARD_GOOGLE_KAHLEE))
 		FchParams_env->Sd.SdSlotType = 1; // EMMC
diff --git a/src/mainboard/google/kahlee/variants/baseboard/gpio.c b/src/mainboard/google/kahlee/variants/baseboard/gpio.c
index 0566320..f51f545 100644
--- a/src/mainboard/google/kahlee/variants/baseboard/gpio.c
+++ b/src/mainboard/google/kahlee/variants/baseboard/gpio.c
@@ -29,149 +29,87 @@
  * ramstage.
  */
 const static struct soc_amd_stoneyridge_gpio gpio_set_stage_reset[] = {
-
 	/* GPIO_0 - EC_PCH_PWR_BTN_ODL */
 	{ GPIO_0, Function0, FCH_GPIO_PULL_UP_ENABLE | INPUT },
-};
-
-const static struct soc_amd_stoneyridge_gpio gpio_set_stage_ram[] = {
-
-	/* GPIO_2 - WLAN_PCIE_WAKE_3V3_ODL */
-	{ GPIO_2, Function0, FCH_GPIO_PULL_UP_ENABLE | INPUT },
-};
-
-/*
- * These settings were generated by a spreadsheet. If they need to be updated,
- * update the spreadsheet shared with the Grunt development team.
- */
-static const GPIO_CONTROL agesa_board_gpios[] = {
-
-	/* GPIO_0 - EC_PCH_PWR_BTN_ODL */
-	{ GPIO_0, Function0, FCH_GPIO_PULL_UP_ENABLE },
 
 	/* GPIO_1 - SYS_RST_ODL */
-	{ GPIO_1, Function0, FCH_GPIO_PULL_UP_ENABLE },
-
-	/* GPIO_2 - WLAN_PCIE_WAKE_3V3_ODL */
-	{ GPIO_2, Function0, FCH_GPIO_PULL_UP_ENABLE },
+	{ GPIO_1, Function0, FCH_GPIO_PULL_UP_ENABLE | INPUT },
 
 	/* GPIO_3 - MEM_VOLT_SEL */
-	{ GPIO_3, Function0, FCH_GPIO_PULL_UP_ENABLE },
-
-	/* GPIO_4 - EN_PP3300_WLAN */
-	{ GPIO_4, Function0, FCH_GPIO_OUTPUT_VALUE | FCH_GPIO_OUTPUT_ENABLE },
+	{ GPIO_3, Function0, FCH_GPIO_PULL_UP_ENABLE | INPUT },
 
 	/* GPIO_5 - PCH_TRACKPAD_INT_3V3_ODL, SCI */
-	{ GPIO_5, Function0, FCH_GPIO_PULL_UP_ENABLE },
+	{ GPIO_5, Function0, FCH_GPIO_PULL_UP_ENABLE | INPUT },
 
 	/* GPIO_6 - APU_RST_L / EC_SMI_ODL, SMI */
-	{ GPIO_6, Function0, FCH_GPIO_PULL_UP_ENABLE },
+	{ GPIO_6, Function0, FCH_GPIO_PULL_UP_ENABLE | INPUT },
 
 	/* GPIO_7 - APU_PWROK_OD (currently not used) */
-	{ GPIO_7, Function0, FCH_GPIO_PULL_UP_ENABLE },
+	{ GPIO_7, Function0, FCH_GPIO_PULL_UP_ENABLE | INPUT },
 
 	/* GPIO_8 - DDR_ALERT_3V3_L (currently not used) */
-	{ GPIO_8, Function0, FCH_GPIO_PULL_UP_ENABLE },
+	{ GPIO_8, Function0, FCH_GPIO_PULL_UP_ENABLE | INPUT },
 
 	/* GPIO_9 - H1_PCH_INT_ODL, SCI */
-	{ GPIO_9, Function0, FCH_GPIO_PULL_UP_ENABLE },
-
-	/* GPIO_10 - SLP_S0_L (currently not used) */
-	{ GPIO_10, Function0, FCH_GPIO_PULL_UP_ENABLE },
+	{ GPIO_9, Function0, FCH_GPIO_PULL_UP_ENABLE | INPUT },
 
 	/* GPIO_11 - TOUCHSCREEN_INT_3V3_ODL, SCI */
-	{ GPIO_11, Function0, FCH_GPIO_PULL_UP_ENABLE },
-
-	/* GPIO_12 - Unused (TP126) */
-	{ GPIO_12, Function2, FCH_GPIO_PULL_UP_ENABLE },
-
-	/* GPIO_13 - APU_PEN_PDCT_ODL (currently not used) */
-	{ GPIO_13, Function1, FCH_GPIO_PULL_UP_ENABLE },
+	{ GPIO_11, Function0, FCH_GPIO_PULL_UP_ENABLE | INPUT },
 
 	/* GPIO_14 - APU_HP_INT_ODL, SCI */
-	{ GPIO_14, Function1, FCH_GPIO_PULL_UP_ENABLE },
+	{ GPIO_14, Function1, FCH_GPIO_PULL_UP_ENABLE | INPUT },
 
 	/* GPIO_15 - EC_IN_RW_OD */
-	{ GPIO_15, Function1, FCH_GPIO_PULL_UP_ENABLE },
-
-	/* GPIO_16 - USB_C0_OC_L */
-	{ GPIO_16, Function0, FCH_GPIO_PULL_UP_ENABLE },
-
-	/* GPIO_17 - USB_C1_OC_L */
-	{ GPIO_17, Function0, FCH_GPIO_PULL_UP_ENABLE },
-
-	/* GPIO_18 - USB_A0_OC_ODL */
-	{ GPIO_18, Function0, FCH_GPIO_PULL_UP_ENABLE },
+	{ GPIO_15, Function1, FCH_GPIO_PULL_UP_ENABLE | INPUT },
 
 	/* GPIO_19 - APU_I2C_SCL3 (Touchscreen) */
-	{ GPIO_19, Function1, FCH_GPIO_PULL_UP_ENABLE },
+	{ GPIO_19, Function1, FCH_GPIO_PULL_UP_ENABLE | INPUT },
 
 	/* GPIO_20 - APU_I2C_SDA3 (Touchscreen) */
-	{ GPIO_20, Function1, FCH_GPIO_PULL_UP_ENABLE },
+	{ GPIO_20, Function1, FCH_GPIO_PULL_UP_ENABLE | INPUT },
 
 	/* GPIO_21 - APU_PEN_INT_ODL, SCI */
-	{ GPIO_21, Function1, FCH_GPIO_PULL_UP_ENABLE },
+	{ GPIO_21, Function1, FCH_GPIO_PULL_UP_ENABLE | INPUT },
 
 	/* GPIO_22 - EC_SCI_ODL, SCI */
-	{ GPIO_22, Function1, FCH_GPIO_PULL_UP_ENABLE },
+	{ GPIO_22, Function1, FCH_GPIO_PULL_UP_ENABLE | INPUT },
 
 	/* GPIO_23 - ACOK_OD */
 	/* GPIO_24 - USB_A1_OC_ODL */
-	{ GPIO_24, Function0, FCH_GPIO_PULL_UP_ENABLE },
+	{ GPIO_24, Function0, FCH_GPIO_PULL_UP_ENABLE | INPUT },
 
 	/* GPIO_25 - SD_CD */
-	{ GPIO_25, Function0, FCH_GPIO_PULL_UP_ENABLE },
+	{ GPIO_25, Function0, FCH_GPIO_PULL_UP_ENABLE | INPUT },
 
 	/* GPIO_26 - APU_PCIE_RST_L */
-	{ GPIO_26, Function0,  },
+	{ GPIO_26, Function0, INPUT },
 
 	/* GPIO_40 - EMMC_BRIDGE_RST_L */
-	{ GPIO_40, Function0, FCH_GPIO_OUTPUT_VALUE | FCH_GPIO_OUTPUT_ENABLE },
+	{ GPIO_40, Function0, OUTPUT_H },
 
 	/* GPIO_42 - S5_MUX_CTRL */
-	{ GPIO_42, Function0, FCH_GPIO_OUTPUT_VALUE | FCH_GPIO_OUTPUT_ENABLE },
-
-	/* GPIO_67 - PEN_RESET */
-	{ GPIO_67, Function0, FCH_GPIO_OUTPUT_ENABLE },
-
-	/* GPIO_70 - WLAN_PE_RST_L */
-	{ GPIO_70, Function0, FCH_GPIO_OUTPUT_VALUE | FCH_GPIO_OUTPUT_ENABLE },
+	{ GPIO_42, Function0, OUTPUT_H },
 
 	/* GPIO_74 - LPC_CLK0_EC_R */
-	{ GPIO_74, Function0, FCH_GPIO_PULL_DOWN_ENABLE },
-
-	/* GPIO_75 - Unused (strap) (R139/R130) */
-	{ GPIO_75, Function1, FCH_GPIO_PULL_UP_ENABLE },
-
-	/* GPIO_76 - EN_PP3300_TOUCHSCREEN */
-	{ GPIO_76, Function0, FCH_GPIO_OUTPUT_VALUE | FCH_GPIO_OUTPUT_ENABLE },
+	{ GPIO_74, Function0, FCH_GPIO_PULL_DOWN_ENABLE | INPUT },
 
 	/* GPIO_84 - HUB_RST (Active High) */
-	{ GPIO_84, Function1, FCH_GPIO_OUTPUT_ENABLE },
+	{ GPIO_84, Function1, OUTPUT_L },
 
 	/* GPIO_85 - TOUCHSCREEN_RST (Active High) */
-	{ GPIO_85, Function1, FCH_GPIO_OUTPUT_ENABLE },
-
-	/* GPIO_86 - Unused (TP109) */
-	{ GPIO_86, Function1, FCH_GPIO_PULL_UP_ENABLE },
+	{ GPIO_85, Function1, OUTPUT_L },
 
 	/* GPIO_87 - LPC_SERIRQ */
-	{ GPIO_87, Function0,  },
+	{ GPIO_87, Function0, INPUT },
 
 	/* GPIO_88 - LPC_CLKRUN_L */
-	{ GPIO_88, Function0,  },
-
-	/* GPIO_90 - EN_PP3300_CAMERA */
-	{ GPIO_90, Function0, FCH_GPIO_OUTPUT_VALUE | FCH_GPIO_OUTPUT_ENABLE },
-
-	/* GPIO_91 - EN_PP3300_TRACKPAD */
-	{ GPIO_91, Function1, FCH_GPIO_OUTPUT_VALUE | FCH_GPIO_OUTPUT_ENABLE },
+	{ GPIO_88, Function0, INPUT },
 
 	/* GPIO_92 - WLAN_PCIE_CLKREQ_3V3_ODL */
-	{ GPIO_92, Function0, FCH_GPIO_PULL_UP_ENABLE },
+	{ GPIO_92, Function0, FCH_GPIO_PULL_UP_ENABLE | INPUT },
 
 	/* GPIO_93 - EMMC_RST_L */
-	{ GPIO_93, Function1, FCH_GPIO_OUTPUT_VALUE | FCH_GPIO_OUTPUT_ENABLE },
+	{ GPIO_93, Function1, OUTPUT_H },
 
 	/* GPIO_95 - SD_CLK */
 	/* GPIO_96 - SD_CMD */
@@ -181,104 +119,144 @@
 	/* GPIO_100 - SD_D3 */
 
 	/* GPIO_101 - SD_WP_L */
-	{ GPIO_101, Function0, FCH_GPIO_PULL_DOWN_ENABLE },
-
-	/* GPIO_102 - EN_SD_SOCKET_PWR */
-	{ GPIO_102, Function0, FCH_GPIO_PULL_DOWN_ENABLE },
-
-	/* GPIO_113 - APU_I2C_SCL2 (Pen & Trackpad) */
-	{ GPIO_113, Function1, FCH_GPIO_PULL_UP_ENABLE },
-
-	/* GPIO_114 - APU_I2C_SDA2 (Pen & Trackpad) */
-	{ GPIO_114, Function1, FCH_GPIO_PULL_UP_ENABLE },
-
-	/* GPIO_115 - Unused (TP127) */
-	{ GPIO_115, Function1, FCH_GPIO_PULL_UP_ENABLE },
+	{ GPIO_101, Function0, FCH_GPIO_PULL_DOWN_ENABLE | INPUT },
 
 	/* GPIO_116 - PCIE_EMMC_CLKREQ_L */
-	{ GPIO_116, Function0,  },
+	{ GPIO_116, Function0, INPUT },
 
 	/* GPIO_117 - PCH_SPI_CLK_R */
 
 	/* GPIO_118 - PCH_SPI_CS0_L */
-	{ GPIO_118, Function0,  },
+	{ GPIO_118, Function0, INPUT },
 
 	/* GPIO_119 - SPK_PA_EN */
-	{ GPIO_119, Function2, FCH_GPIO_OUTPUT_VALUE | FCH_GPIO_OUTPUT_ENABLE },
+	{ GPIO_119, Function2, OUTPUT_H },
 
 	/* GPIO_120 - PCH_SPI_MISO */
 	/* GPIO_121 - PCH_SPI_MOSI */
 
 	/* GPIO_122 - APU_BIOS_FLASH_WP_L */
-	{ GPIO_122, Function1,  },
+	{ GPIO_122, Function1, INPUT },
 
 	/* GPIO_126 - DMIC_CLK2_EN */
-	{ GPIO_126, Function1, FCH_GPIO_OUTPUT_VALUE | FCH_GPIO_OUTPUT_ENABLE },
+	{ GPIO_126, Function1, OUTPUT_H },
 
 	/* GPIO_129 - APU_KBRST_L */
-	{ GPIO_129, Function0, FCH_GPIO_PULL_UP_ENABLE },
-
-	/* GPIO_130 - Unused (TP55) */
-	{ GPIO_130, Function1, FCH_GPIO_PULL_UP_ENABLE },
+	{ GPIO_129, Function0, FCH_GPIO_PULL_UP_ENABLE | INPUT },
 
 	/* GPIO_131 - CONFIG_STRAP3 */
-	{ GPIO_131, Function3,  },
+	{ GPIO_131, Function3, INPUT },
 
 	/* GPIO_132 - CONFIG_STRAP4 */
-	{ GPIO_132, Function2,  },
+	{ GPIO_132, Function2, INPUT },
 
 	/* GPIO_133 - APU_EDP_BKLTEN_L (backlight - Active LOW) */
-	{ GPIO_133, Function1, FCH_GPIO_OUTPUT_ENABLE },
-
-	/* GPIO_135 - Unused (TP128) */
-	{ GPIO_135, Function1, FCH_GPIO_PULL_UP_ENABLE },
+	{ GPIO_133, Function1, OUTPUT_L },
 
 	/* GPIO_136 - UART_PCH_RX_DEBUG_TX */
-	{ GPIO_136, Function0,  },
+	{ GPIO_136, Function0, INPUT },
 
 	/* GPIO_137 - AUDIO_CLK_EN (Remove in EVT?) */
-	{ GPIO_137, Function1, FCH_GPIO_OUTPUT_VALUE | FCH_GPIO_OUTPUT_ENABLE },
+	{ GPIO_137, Function1, OUTPUT_H },
 
 	/* GPIO_138 - UART_PCH_TX_DEBUG_RX */
-	{ GPIO_138, Function0,  },
+	{ GPIO_138, Function0, INPUT },
 
 	/* GPIO_139 - CONFIG_STRAP1 */
-	{ GPIO_139, Function1,  },
+	{ GPIO_139, Function1, INPUT },
 
 	/* GPIO_140 - I2S_BCLK_R (init to func0, used for I2S) */
-	{ GPIO_140, Function0,  },
+	{ GPIO_140, Function0, INPUT },
 
 	/* GPIO_141 - I2S2_DATA_MIC2 (init to func0, used for I2S) */
-	{ GPIO_141, Function0,  },
+	{ GPIO_141, Function0, INPUT },
 
 	/* GPIO_142 - CONFIG_STRAP2 */
-	{ GPIO_142, Function1,  },
+	{ GPIO_142, Function1, INPUT },
 
 	/* GPIO_143 - I2S2_DATA (init to func0, used for I2S) */
-	{ GPIO_143, Function0,  },
+	{ GPIO_143, Function0, INPUT },
 
 	/* GPIO_144 - I2S_LR_R (init to func0, used for I2S) */
-	{ GPIO_144, Function0,  },
+	{ GPIO_144, Function0, INPUT },
 
 	/* GPIO_145 - PCH_I2C_AUDIO_SCL */
-	{ GPIO_145, Function0,  },
+	{ GPIO_145, Function0, INPUT },
 
 	/* GPIO_146 - PCH_I2C_AUDIO_SDA */
-	{ GPIO_146, Function0,  },
+	{ GPIO_146, Function0, INPUT },
 
 	/* GPIO_147 - PCH_I2C_HUB_SCL */
-	{ GPIO_147, Function0,  },
+	{ GPIO_147, Function0, INPUT },
 
 	/* GPIO_148 - PCH_I2C_HUB_SDA */
-	{ GPIO_148, Function0,  },
-
-	{-1}
+	{ GPIO_148, Function0, INPUT },
 };
 
-const __attribute__((weak)) GPIO_CONTROL *get_gpio_table(void)
-{
-	return agesa_board_gpios;
-}
+const static struct soc_amd_stoneyridge_gpio gpio_set_stage_ram[] = {
+	/* GPIO_2 - WLAN_PCIE_WAKE_3V3_ODL */
+	{ GPIO_2, Function0, FCH_GPIO_PULL_UP_ENABLE | INPUT },
+
+	/* GPIO_4 - EN_PP3300_WLAN */
+	{ GPIO_4, Function0, OUTPUT_H },
+
+	/* GPIO_10 - SLP_S0_L (currently not used) */
+	{ GPIO_10, Function0, FCH_GPIO_PULL_UP_ENABLE | INPUT },
+
+	/* GPIO_12 - Unused (TP126) */
+	{ GPIO_12, Function2, FCH_GPIO_PULL_UP_ENABLE | INPUT },
+
+	/* GPIO_13 - APU_PEN_PDCT_ODL (currently not used) */
+	{ GPIO_13, Function1, FCH_GPIO_PULL_UP_ENABLE | INPUT },
+
+	/* GPIO_16 - USB_C0_OC_L */
+	{ GPIO_16, Function0, FCH_GPIO_PULL_UP_ENABLE | INPUT },
+
+	/* GPIO_17 - USB_C1_OC_L */
+	{ GPIO_17, Function0, FCH_GPIO_PULL_UP_ENABLE | INPUT },
+
+	/* GPIO_18 - USB_A0_OC_ODL */
+	{ GPIO_18, Function0, FCH_GPIO_PULL_UP_ENABLE | INPUT },
+
+	/* GPIO_67 - PEN_RESET */
+	{ GPIO_67, Function0, OUTPUT_L },
+
+	/* GPIO_70 - WLAN_PE_RST_L */
+	{ GPIO_70, Function0, OUTPUT_H },
+
+	/* GPIO_75 - Unused (strap) (R139/R130) */
+	{ GPIO_75, Function1, FCH_GPIO_PULL_UP_ENABLE | INPUT },
+
+	/* GPIO_76 - EN_PP3300_TOUCHSCREEN */
+	{ GPIO_76, Function0, OUTPUT_H },
+
+	/* GPIO_86 - Unused (TP109) */
+	{ GPIO_86, Function1, FCH_GPIO_PULL_UP_ENABLE | INPUT },
+
+	/* GPIO_90 - EN_PP3300_CAMERA */
+	{ GPIO_90, Function0, OUTPUT_H },
+
+	/* GPIO_91 - EN_PP3300_TRACKPAD */
+	{ GPIO_91, Function1, OUTPUT_H },
+
+	/* GPIO_102 - EN_SD_SOCKET_PWR */
+	{ GPIO_102, Function0, FCH_GPIO_PULL_DOWN_ENABLE | INPUT },
+
+	/* GPIO_113 - APU_I2C_SCL2 (Pen & Trackpad) */
+	{ GPIO_113, Function1, FCH_GPIO_PULL_UP_ENABLE | INPUT },
+
+	/* GPIO_114 - APU_I2C_SDA2 (Pen & Trackpad) */
+	{ GPIO_114, Function1, FCH_GPIO_PULL_UP_ENABLE | INPUT },
+
+	/* GPIO_115 - Unused (TP127) */
+	{ GPIO_115, Function1, FCH_GPIO_PULL_UP_ENABLE | INPUT },
+
+	/* GPIO_130 - Unused (TP55) */
+	{ GPIO_130, Function1, FCH_GPIO_PULL_UP_ENABLE | INPUT },
+
+	/* GPIO_135 - Unused (TP128) */
+	{ GPIO_135, Function1, FCH_GPIO_PULL_UP_ENABLE | INPUT },
+};
 
 const __attribute__((weak)) const struct soc_amd_stoneyridge_gpio
 					*board_get_gpio(size_t *size)
diff --git a/src/mainboard/google/kahlee/variants/baseboard/include/baseboard/variants.h b/src/mainboard/google/kahlee/variants/baseboard/include/baseboard/variants.h
index 9c54794..bf14ef4 100644
--- a/src/mainboard/google/kahlee/variants/baseboard/include/baseboard/variants.h
+++ b/src/mainboard/google/kahlee/variants/baseboard/include/baseboard/variants.h
@@ -21,7 +21,6 @@
 #include <soc/smi.h>
 #include <amdblocks/agesawrapper.h>
 
-const GPIO_CONTROL *get_gpio_table(void);
 const struct sci_source *get_gpe_table(size_t *num);
 uint8_t variant_memory_sku(void);
 int variant_mainboard_read_spd(uint8_t spdAddress, char *buf, size_t len);
diff --git a/src/mainboard/google/kahlee/variants/kahlee/gpio.c b/src/mainboard/google/kahlee/variants/kahlee/gpio.c
index dda44af..e357c7e 100644
--- a/src/mainboard/google/kahlee/variants/kahlee/gpio.c
+++ b/src/mainboard/google/kahlee/variants/kahlee/gpio.c
@@ -28,97 +28,74 @@
 const struct soc_amd_stoneyridge_gpio gpio_set_stage_reset[] = {
 	/* AGPIO2, to become event generator */
 	{ GPIO_2, Function1, FCH_GPIO_PULL_UP_ENABLE | INPUT },
+
+	/* SER_TX */
+	{ GPIO_8, Function1, FCH_GPIO_PULL_UP_ENABLE | OUTPUT_H },
+
+	/* SER RX */
+	{ GPIO_9, Function1, FCH_GPIO_PULL_UP_ENABLE | INPUT },
+
+	/* EC_IN_RW */
+	{GPIO_15, Function1, FCH_GPIO_PULL_UP_ENABLE | INPUT },
+
+	/* APU_I2C_3_SCL */
+	{GPIO_19, Function1, FCH_GPIO_PULL_UP_ENABLE | INPUT },
+
+	/* APU_I2C_3_SDA */
+	{GPIO_20, Function1, FCH_GPIO_PULL_UP_ENABLE | INPUT },
+
+	/* AGPIO22 EC_SCI */
+	{GPIO_22, Function1, FCH_GPIO_PULL_UP_ENABLE | INPUT },
+
+	/* SPI_TPM_CS_L */
+	{GPIO_76, Function1, FCH_GPIO_PULL_DOWN_ENABLE | OUTPUT_H },
+
+	/* BD_ID1 */
+	{GPIO_135, Function1, INPUT },
+
+	/* TPM_SERIRQ# */
+	{GPIO_139, Function1, FCH_GPIO_PULL_UP_ENABLE | INPUT },
+
+	/* BD_ID2 */
+	{GPIO_140, Function1, INPUT },
+
+	/* APU_SPI_WP */
+	{GPIO_142, Function1, FCH_GPIO_PULL_UP_ENABLE | INPUT },
+
+	/* BD_ID3 */
+	{GPIO_144, Function1, INPUT }
 };
 
 const struct soc_amd_stoneyridge_gpio gpio_set_stage_ram[] = {
 	/* AGPIO 12 */
 	{ GPIO_12, Function2, FCH_GPIO_PULL_UP_ENABLE | INPUT },
-};
-
-static const GPIO_CONTROL agesa_board_gpios[] = {
-	/* AGPIO2 PCIE/WLAN WAKE# SCI*/
-	{2, Function1, FCH_GPIO_PULL_UP_ENABLE },
-
-	/* SER TX */
-	{8, Function1, FCH_GPIO_PULL_UP_ENABLE | FCH_GPIO_OUTPUT_VALUE
-						| FCH_GPIO_OUTPUT_ENABLE},
-	/* SER RX */
-	{9, Function1, FCH_GPIO_PULL_UP_ENABLE },
-
-	/* AGPIO 12 */
-	{12, Function2, FCH_GPIO_PULL_UP_ENABLE },
 
 	/* TS_EN_SOC (TouchScreen enable GPIO) */
-	{13, Function1, FCH_GPIO_PULL_UP_ENABLE | FCH_GPIO_OUTPUT_VALUE
-						| FCH_GPIO_OUTPUT_ENABLE},
+	{GPIO_13, Function1, FCH_GPIO_PULL_UP_ENABLE | OUTPUT_H},
 
 	/* CAM_PWRON (Camera enable GPIO) */
-	{14, Function1,  FCH_GPIO_PULL_UP_ENABLE | FCH_GPIO_OUTPUT_VALUE
-						| FCH_GPIO_OUTPUT_ENABLE},
-
-	/* EC_IN_RW */
-	{15, Function1, FCH_GPIO_PULL_UP_ENABLE },
-
-	/* APU_I2C_3_SCL */
-	{19, Function1, FCH_GPIO_PULL_UP_ENABLE },
-
-	/* APU_I2C_3_SDA */
-	{20, Function1, FCH_GPIO_PULL_UP_ENABLE },
-
-	/* AGPIO22 EC_SCI */
-	{22, Function1, FCH_GPIO_PULL_UP_ENABLE },
-
+	{GPIO_14, Function1, FCH_GPIO_PULL_UP_ENABLE | OUTPUT_H },
 	/* APU_BT_ON# */
-	{24, Function1, FCH_GPIO_PULL_UP_ENABLE | FCH_GPIO_OUTPUT_VALUE
-						| FCH_GPIO_OUTPUT_ENABLE},
+	{GPIO_24, Function1, FCH_GPIO_PULL_UP_ENABLE | OUTPUT_H },
 
 	/* DEVSLP1_SSD */
-	{67, Function1, FCH_GPIO_PULL_UP_ENABLE},
+	{67, Function1, FCH_GPIO_PULL_UP_ENABLE | INPUT },
 
 	/* DEVSLP1_EMMC */
 	/* No Connect for now.
-	 * {70, Function1, FCH_GPIO_PULL_UP_ENABLE},
+	 * {GPIO_70, Function1, FCH_GPIO_PULL_UP_ENABLE | INPUT},
 	 */
 
-	/* SPI_TPM_CS_L */
-	{76, Function1, FCH_GPIO_PULL_DOWN_ENABLE | FCH_GPIO_OUTPUT_VALUE
-						  | FCH_GPIO_OUTPUT_ENABLE},
-
 	/* CAM_LED# */
-	{84, Function1, FCH_GPIO_PULL_UP_ENABLE | FCH_GPIO_OUTPUT_VALUE
-						| FCH_GPIO_OUTPUT_ENABLE},
+	{GPIO_84, Function1, FCH_GPIO_PULL_UP_ENABLE | OUTPUT_H },
 
 	/* TS_RST#  (TouchScreen Reset) */
-	{85, Function1, FCH_GPIO_PULL_UP_ENABLE | FCH_GPIO_OUTPUT_VALUE
-						| FCH_GPIO_OUTPUT_ENABLE},
+	{GPIO_85, Function1, FCH_GPIO_PULL_UP_ENABLE | OUTPUT_H },
 
 	/* WLAN_RST#_AUX */
-	{119, Function2, FCH_GPIO_PULL_UP_ENABLE | FCH_GPIO_OUTPUT_VALUE
-						 | FCH_GPIO_OUTPUT_ENABLE},
-
-	/* BD_ID1 */
-	{135, Function1, 0 },
-
-	/* TPM_SERIRQ# */
-	{139, Function1, FCH_GPIO_PULL_UP_ENABLE },
-
-	/* BD_ID2 */
-	{140, Function1, 0 },
-
-	/* APU_SPI_WP */
-	{142, Function1, FCH_GPIO_PULL_UP_ENABLE },
-
-	/* BD_ID3 */
-	{144, Function1, 0 },
-
-	{-1}
+	{GPIO_119, Function2, FCH_GPIO_PULL_UP_ENABLE | OUTPUT_H },
 };
 
-const GPIO_CONTROL *get_gpio_table(void)
-{
-	return agesa_board_gpios;
-}
-
 const struct soc_amd_stoneyridge_gpio *board_get_gpio(size_t *size)
 {
 	if (GPIO_TABLE_BOOTBLOCK) {
