/*
 * Copyright (C) 2014 Apple Inc. All rights reserved.
 *
 * This document is the property of Apple Inc.
 * It is considered confidential and proprietary.
 *
 * This document may not be reproduced or transmitted in any form,
 * in whole or in part, without the express written permission of
 * Apple Inc.
 */

/* THIS FILE IS AUTOMATICALLY GENERATED BY tools/csvtopinconfig.py. DO NOT EDIT!
   I/O Spreadsheet version: rev 0v4
   I/O Spreadsheet tracker: <rdar://problem/19464609> E88: IO Spreadsheet Tracker
   Conversion command: csvtopinconfig.py --soc h4a --radar '<rdar://problem/19464609> E88: IO Spreadsheet Tracker' --copyright 2014 <filename>
*/

#include <debug.h>
#include <drivers/apple/gpio.h>
#include <platform.h>
#include <platform/soc/hwregbase.h>
#include <stdint.h>

static const uint32_t pinconfig_ap_0[GPIO_GROUP_COUNT * GPIOPADPINS] = {

/* Port  0 */
	CFG_IN | PULL_UP,						//   0 : GPIO[0]		-> MENU_KEY_L
	CFG_IN | PULL_UP,						//   1 : GPIO[1]		-> HOLD_KEY_L
	CFG_IN | PULL_UP,						//   2 : GPIO[2]		-> VOL_UP_L
	CFG_IN | PULL_UP,						//   3 : GPIO[3]		-> VOL_DWN_L
	CFG_OUT_1,							//   4 : GPIO[4]		-> ACC_UHPM_EN
	CFG_DISABLED | PULL_DOWN,					//   5 : GPIO[5]		-> NC
	CFG_DISABLED | PULL_DOWN,					//   6 : GPIO[6]		-> NC
	CFG_OUT_0 | PULL_DOWN,						//   7 : GPIO[7]		-> BT_WAKE

/* Port  1 */
	CFG_OUT_0,							//   8 : GPIO[8]		-> WLAN_HSIC_AP_RDY
	CFG_IN | PULL_DOWN,						//   9 : GPIO[9]		-> WLAN_HSIC_DEV_RDY
	CFG_DISABLED,							//  10 : GPIO[10]		-> NC
	CFG_DISABLED,							//  11 : GPIO[11]		-> NC
	CFG_OUT_0,							//  12 : GPIO[12]		-> EN_8VBOOST
	CFG_IN | PULL_UP,						//  13 : GPIO[13]		-> PMU_IRQ_L
	CFG_OUT_0,							//  14 : GPIO[14]		-> WLAN_HSIC_RESUME
	CFG_OUT_1,							//  15 : GPIO[15]		-> SNAP_MCU_RESET_L

/* Port  2 */
	CFG_IN,								//  16 : GPIO[16]		-> BRD_ID3
	CFG_IN,								//  17 : GPIO[17]		-> BRD_REV3
	CFG_IN | PULL_DOWN,						//  18 : GPIO[18]		-> BOOT_CFG0
	CFG_OUT_0,							//  19 : GPIO[19]		-> KEEPACTIVE
	CFG_IN,								//  20 : GPIO[20]		-> TRISTAR_INT
	CFG_IN | PULL_UP,						//  21 : GPIO[21]		-> SNAP_INT_L
	CFG_OUT_0 | PULL_DOWN,						//  22 : GPIO[22]		-> SNAP_ID0
	CFG_IN | PULL_DOWN,						//  23 : GPIO[23]		-> SNAP_ID1

/* Port  3 */
	CFG_OUT_0 | PULL_DOWN,						//  24 : GPIO[24]		-> PS_5VBOOST_L
	CFG_IN | PULL_DOWN,						//  25 : GPIO[25]		-> BOOT_CFG1
	CFG_IN | PULL_DOWN,						//  26 : GPIO[26]		-> FORCE_DFU
	CFG_OUT_0,							//  27 : GPIO[27]		-> DUT_DFU_STATUS
	CFG_IN,								//  28 : GPIO[28]		-> BOOT_CFG2
	CFG_IN,								//  29 : GPIO[29]		-> BOOT_CFG3
	CFG_OUT_0 | PULL_DOWN,						//  30 : GPIO[30]		-> CODEC_RESET_L
	CFG_IN,								//  31 : GPIO[31]		-> VBUS_FAULT_L

/* Port  4 */
	CFG_OUT_0,							//  32 : GPIO[32]		-> USB_SW_EN
	CFG_IN | PULL_DOWN,						//  33 : GPIO[33]		-> GYRO_INT1
	CFG_IN,								//  34 : GPIO[34]		-> ACC_UHPM_POK
	CFG_OUT_1,							//  35 : GPIO[35]		-> EN_5VBOOST
	CFG_IN,								//  36 : GPIO[36]		-> ACCEL_INT2_L
	CFG_IN,								//  37 : EHCI_PORT_PWR[0]	-> BRD_REV[0]
	CFG_IN,								//  38 : EHCI_PORT_PWR[1]	-> BRD_REV[1]
	CFG_IN,								//  39 : EHCI_PORT_PWR[2]	-> BRD_REV[2]

/* Port  5 */
	CFG_FUNC0,							//  40 : UART1_TXD		-> AP_DBG_UART_TXD
	CFG_FUNC0,							//  41 : UART1_RXD		-> AP_DBG_UART_RXD
	CFG_DISABLED | PULL_DOWN,					//  42 : UART1_RTSN		-> NC
	CFG_IN,								//  43 : UART1_CTSN		-> SNAP_DET_L
	CFG_FUNC0,							//  44 : UART2_TXD		-> ACC_UART_TXD
	CFG_FUNC0,							//  45 : UART2_RXD		-> ACC_UART_RXD
	CFG_DISABLED | PULL_DOWN,					//  46 : UART2_RTSN		-> NC
	CFG_OUT_1,							//  47 : UART2_CTSN		-> USB_HUB_RST_L

/* Port  6 */
	CFG_FUNC0,							//  48 : UART3_TXD		-> BT_UART_RXD
	CFG_FUNC0,							//  49 : UART3_RXD		-> BT_UART_TXD
	CFG_FUNC0,							//  50 : UART3_RTSN		-> BT_UART_CTS_L
	CFG_FUNC0,							//  51 : UART3_CTSN		-> BT_UART_RTS_L
	CFG_FUNC0,							//  52 : I2C0_SDA		-> I2C0_SDA_1V8
	CFG_FUNC0,							//  53 : I2C0_SCL		-> I2C0_SCL_1V8
	CFG_FUNC0,							//  54 : I2C1_SDA		-> SNAP_I2C_SDA
	CFG_FUNC0,							//  55 : I2C1_SCL		-> SNAP_I2C_SCL

/* Port  7 */
	CFG_FUNC0,							//  56 : ISP0_SDA		-> I2C_CAM_REAR_SDA_1V8
	CFG_FUNC0,							//  57 : ISP0_SCL		-> I2C_CAM_REAR_SCL_1V8
	CFG_DISABLED | PULL_DOWN,					//  58 : ISP1_SDA		-> NC
	CFG_DISABLED | PULL_DOWN,					//  59 : ISP1_SCL		-> NC
	CFG_FUNC0 | PULL_DOWN,						//  60 : MIPI_VSYNC		-> SNAP_MIPI_VSYNC
	CFG_FUNC0 | PULL_DOWN,						//  61 : TMR32_PWM0		-> GYRO_INT2
	CFG_FUNC0 | PULL_DOWN,						//  62 : TMR32_PWM1		-> ACCEL_INT1_L
	CFG_FUNC0,							//  63 : TMR32_PWM2		-> WLAN_TIMESYNC

/* Port  8 */
	CFG_DISABLED,							//  64 : SWI_DATA		-> NC
	CFG_FUNC0,							//  65 : DWI_DI			-> DWI_AP_DI
	CFG_FUNC0,							//  66 : DWI_DO			-> DWI_AP_DO
	CFG_FUNC0,							//  67 : DWI_CLK		-> DWI_AP_CLK
	CFG_OUT_0,							//  68 : SENSOR0_RST		-> CAM_REAR_SHUTDOWN_L
	CFG_FUNC0,							//  69 : SENSOR0_CLK		-> CAM_REAR_CLK
	CFG_DISABLED | PULL_DOWN,					//  70 : SENSOR1_RST		-> NC
	CFG_DISABLED | PULL_DOWN,					//  71 : SENSOR1_CLK		-> NC

/* Port  9 */
	CFG_DISABLED | PULL_DOWN,					//  72 : ISP0_PRE_FLASH		-> NC
	CFG_DISABLED | PULL_DOWN,					//  73 : ISP0_FLASH		-> NC
	CFG_DISABLED,							//  74 : ISP1_PRE_FLASH		-> NC
	CFG_DISABLED,							//  75 : ISP1_FLASH		-> NC
	CFG_FUNC0,							//  76 : I2S0_MCK		-> CODEC_MCLK
	CFG_FUNC0,							//  77 : I2S0_LRCK		-> CODEC_LRCLK
	CFG_FUNC0,							//  78 : I2S0_BCLK		-> CODEC_BCLK
	CFG_DISABLED | PULL_DOWN,					//  79 : I2S0_DOUT		-> NC

/* Port 10 */
	CFG_FUNC0,							//  80 : I2S0_DIN		-> CODEC_TO_DUT_DIN
	CFG_DISABLED,							//  81 : I2S1_MCK		-> NC
	CFG_FUNC0,							//  82 : I2S1_LRCK		-> BT_PCM_SYNC
	CFG_FUNC0,							//  83 : I2S1_BCLK		-> BT_PCM_CLK
	CFG_FUNC0,							//  84 : I2S1_DOUT		-> BT_PCM_IN
	CFG_FUNC0,							//  85 : I2S1_DIN		-> BT_PCM_OUT
	CFG_DISABLED,							//  86 : I2S2_MCK		-> NC
	CFG_FUNC0,							//  87 : I2S2_LRCK		-> SPKR_AMP_MCA_FSYNC

/* Port 11 */
	CFG_FUNC0,							//  88 : I2S2_BCLK		-> SPKR_AMP_MCA_BCLK
	CFG_FUNC0 | PULL_DOWN,						//  89 : I2S2_DOUT		-> SPKR_AMP_MCA_SDATA
	CFG_DISABLED,							//  90 : I2S2_DIN		-> NC
	CFG_FUNC0,							//  91 : I2S3_MCK		-> SNAP_I2S_MCLK_H4A
	CFG_FUNC0,							//  92 : I2S3_LRCK		-> SNAP_I2S_LRCK
	CFG_FUNC0,							//  93 : I2S3_BCLK		-> SNAP_I2S_BCLK
	CFG_FUNC0,							//  94 : I2S3_DOUT		-> DUT_DOUT_TO_SNAP_I2S
	CFG_FUNC0,							//  95 : I2S3_DIN		-> SNAP_TO_DUT_I2S_DIN

/* Port 12 */
	CFG_IN,								//  96 : SPI0_SCLK		-> BRD_ID0
	CFG_IN,								//  97 : SPI0_MOSI		-> BRD_ID1
	CFG_IN,								//  98 : SPI0_MISO		-> BRD_ID2
	CFG_DISABLED,							//  99 : SPI0_SSIN		-> NC
	CFG_FUNC0,							// 100 : SPI1_SCLK		-> SNAP_SPI_CLK
	CFG_FUNC0,							// 101 : SPI1_MOSI		-> SNAP_SPI_MOSI
	CFG_FUNC0,							// 102 : SPI1_MISO		-> SNAP_SPI_MISO
	CFG_FUNC0,							// 103 : SPI1_SSIN		-> SNAP_MCU_SPI_CS_L

/* Port 13 */
	CFG_DISABLED,							// 104 : SPI2_SCLK		-> NC
	CFG_DISABLED,							// 105 : SPI2_MOSI		-> NC
	CFG_DISABLED,							// 106 : SPI2_MISO		-> NC
	CFG_DISABLED,							// 107 : SPI2_SSIN		-> NC
	CFG_DISABLED,							// 108 : UNSPECIFIED		-> UNSPECIFIED
	CFG_DISABLED,							// 109 : UNSPECIFIED		-> UNSPECIFIED
	CFG_DISABLED,							// 110 : UNSPECIFIED		-> UNSPECIFIED
	CFG_DISABLED,							// 111 : UNSPECIFIED		-> UNSPECIFIED

/* Port 14 */
	CFG_DISABLED,							// 112 : UNSPECIFIED		-> UNSPECIFIED
	CFG_DISABLED,							// 113 : UNSPECIFIED		-> UNSPECIFIED
	CFG_DISABLED,							// 114 : UNSPECIFIED		-> UNSPECIFIED
	CFG_DISABLED,							// 115 : UNSPECIFIED		-> UNSPECIFIED
	CFG_DISABLED,							// 116 : UNSPECIFIED		-> UNSPECIFIED
	CFG_DISABLED,							// 117 : UNSPECIFIED		-> UNSPECIFIED
	CFG_DISABLED,							// 118 : UNSPECIFIED		-> UNSPECIFIED
	CFG_DISABLED,							// 119 : UNSPECIFIED		-> UNSPECIFIED

/* Port 15 */
	CFG_DISABLED,							// 120 : UNSPECIFIED		-> UNSPECIFIED
	CFG_DISABLED,							// 121 : UNSPECIFIED		-> UNSPECIFIED
	CFG_DISABLED,							// 122 : UNSPECIFIED		-> UNSPECIFIED
	CFG_DISABLED,							// 123 : UNSPECIFIED		-> UNSPECIFIED
	CFG_DISABLED,							// 124 : UNSPECIFIED		-> UNSPECIFIED
	CFG_DISABLED,							// 125 : UNSPECIFIED		-> UNSPECIFIED
	CFG_DISABLED,							// 126 : UNSPECIFIED		-> UNSPECIFIED
	CFG_DISABLED,							// 127 : UNSPECIFIED		-> UNSPECIFIED

/* Port 16 */
	CFG_FUNC0,							// 128 : UART4_TXD		-> WLAN_DBG_UART_RXD
	CFG_FUNC0,							// 129 : UART4_RXD		-> WLAN_DBG_UART_TXD
	CFG_DISABLED | PULL_DOWN,					// 130 : UART4_RTSN		-> NC
	CFG_IN,								// 131 : UART4_CTSN		-> PMU_AMUX_AY_CTRL
	CFG_DISABLED | PULL_DOWN,					// 132 : SDIO0_DATA[3]		-> SDIO0_DATA[3]
	CFG_DISABLED | PULL_DOWN,					// 133 : SDIO0_DATA[2]		-> SDIO0_DATA[2]
	CFG_DISABLED | PULL_DOWN,					// 134 : SDIO0_DATA[1]		-> SDIO0_DATA[1]
	CFG_DISABLED | PULL_DOWN,					// 135 : SDIO0_DATA[0]		-> SDIO0_DATA[0]

/* Port 17 */
	CFG_DISABLED | PULL_DOWN,					// 136 : SDIO0_CMD		-> SDIO0_CMD
	CFG_DISABLED | PULL_DOWN,					// 137 : SDIO0_CLK		-> SDIO0_CLK
	CFG_DISABLED | PULL_DOWN,					// 138 : FMI0_CEN[3]		-> NC
	CFG_DISABLED | PULL_DOWN,					// 139 : FMI0_CEN[2]		-> NC
	CFG_DISABLED | PULL_DOWN,					// 140 : FMI0_CEN[1]		-> NC
	CFG_FUNC0 | DRIVE_X2,						// 141 : FMI0_CEN[0]		-> F0CE0_L
	CFG_FUNC0 | DRIVE_X2,						// 142 : FMI0_CLE		-> F0CLE
	CFG_FUNC0 | DRIVE_X2,						// 143 : FMI0_ALE		-> F0ALE

/* Port 18 */
	CFG_FUNC0 | DRIVE_X2,						// 144 : FMI0_REN		-> F0RE_L
	CFG_FUNC0 | DRIVE_X2,						// 145 : FMI0_WEN		-> F0WE_L
	CFG_FUNC0 | DRIVE_X2,						// 146 : FMI0_IO[7]		-> F0AD<7>
	CFG_FUNC0 | DRIVE_X2,						// 147 : FMI0_IO[6]		-> F0AD<6>
	CFG_FUNC0 | DRIVE_X2,						// 148 : FMI0_IO[5]		-> F0AD<5>
	CFG_FUNC0 | DRIVE_X2,						// 149 : FMI0_IO[4]		-> F0AD<4>
	CFG_DISABLED,							// 150 : UNSPECIFIED		-> UNSPECIFIED
	CFG_DISABLED,							// 151 : UNSPECIFIED		-> UNSPECIFIED

/* Port 19 */
	CFG_DISABLED,							// 152 : UNSPECIFIED		-> UNSPECIFIED
	CFG_DISABLED,							// 153 : UNSPECIFIED		-> UNSPECIFIED
	CFG_DISABLED,							// 154 : UNSPECIFIED		-> UNSPECIFIED
	CFG_DISABLED,							// 155 : UNSPECIFIED		-> UNSPECIFIED
	CFG_DISABLED,							// 156 : UNSPECIFIED		-> UNSPECIFIED
	CFG_DISABLED,							// 157 : UNSPECIFIED		-> UNSPECIFIED
	CFG_DISABLED,							// 158 : UNSPECIFIED		-> UNSPECIFIED
	CFG_DISABLED,							// 159 : UNSPECIFIED		-> UNSPECIFIED

/* Port 20 */
	CFG_FUNC0 | DRIVE_X2,						// 160 : FMI0_DQS		-> F0DQS
	CFG_FUNC0 | DRIVE_X2,						// 161 : FMI0_IO[3]		-> F0AD<3>
	CFG_FUNC0 | DRIVE_X2,						// 162 : FMI0_IO[2]		-> F0AD<2>
	CFG_FUNC0 | DRIVE_X2,						// 163 : FMI0_IO[1]		-> F0AD<1>
	CFG_FUNC0 | DRIVE_X2,						// 164 : FMI0_IO[0]		-> F0AD<0>
	CFG_DISABLED | PULL_DOWN,					// 165 : FMI1_CEN[3]		->
	CFG_DISABLED | PULL_DOWN,					// 166 : FMI1_CEN[2]		->
	CFG_DISABLED | PULL_DOWN,					// 167 : FMI1_CEN[1]		->

/* Port 21 */
	CFG_FUNC0 | DRIVE_X2,						// 168 : FMI1_CEN[0]		-> F1CE0_L
	CFG_FUNC0 | DRIVE_X2,						// 169 : FMI1_CLE		-> F1CLE
	CFG_FUNC0 | DRIVE_X2,						// 170 : FMI1_ALE		-> F1ALE
	CFG_FUNC0 | DRIVE_X2,						// 171 : FMI1_REN		-> F1RE_L
	CFG_FUNC0 | DRIVE_X2,						// 172 : FMI1_WEN		-> F1WE_L
	CFG_FUNC0 | DRIVE_X2,						// 173 : FMI1_IO[7]		-> F1AD<7>
	CFG_FUNC0 | DRIVE_X2,						// 174 : FMI1_IO[6]		-> F1AD<6>
	CFG_FUNC0 | DRIVE_X2,						// 175 : FMI1_IO[5]		-> F1AD<5>

/* Port 22 */
	CFG_FUNC0 | DRIVE_X2,						// 176 : FMI1_IO[4]		-> F1AD<4>
	CFG_FUNC0 | DRIVE_X2,						// 177 : FMI1_DQS		-> F1DQS
	CFG_FUNC0 | DRIVE_X2,						// 178 : FMI1_IO[3]		-> F1AD<3>
	CFG_FUNC0 | DRIVE_X2,						// 179 : FMI1_IO[2]		-> F1AD<2>
	CFG_FUNC0 | DRIVE_X2,						// 180 : FMI1_IO[1]		-> F1AD<1>
	CFG_FUNC0 | DRIVE_X2,						// 181 : FMI1_IO[0]		-> F1AD<0>
	CFG_DISABLED,							// 182 : UNSPECIFIED		-> UNSPECIFIED
	CFG_DISABLED,							// 183 : UNSPECIFIED		-> UNSPECIFIED

/* Port 23 */
	CFG_DISABLED,							// 184 : UNSPECIFIED		-> UNSPECIFIED
	CFG_DISABLED,							// 185 : UNSPECIFIED		-> UNSPECIFIED
	CFG_DISABLED,							// 186 : UNSPECIFIED		-> UNSPECIFIED
	CFG_DISABLED,							// 187 : UNSPECIFIED		-> UNSPECIFIED
	CFG_DISABLED,							// 188 : UNSPECIFIED		-> UNSPECIFIED
	CFG_DISABLED,							// 189 : UNSPECIFIED		-> UNSPECIFIED
	CFG_DISABLED,							// 190 : UNSPECIFIED		-> UNSPECIFIED
	CFG_DISABLED,							// 191 : UNSPECIFIED		-> UNSPECIFIED

/* Port 24 */
	CFG_FUNC0,							// 192 : I2C2_SDA		-> I2C2_SDA_1V8
	CFG_FUNC0,							// 193 : I2C2_SCL		-> I2C2_SCL_1V8
	CFG_FUNC0,							// 194 : UART0_TXD		-> DUT_TXD
	CFG_FUNC0 | PULL_DOWN,						// 195 : UART0_RXD		-> DUT_RXD
	CFG_DISABLED | PULL_DOWN,					// 196 : UART5_RTXD		-> NC
	CFG_DISABLED | PULL_DOWN,					// 197 : DP_HPD			-> GND
	CFG_FUNC0 | PULL_DOWN,						// 198 : TST_CLKOUT		-> TST_CLKOUT
	CFG_DISABLED | PULL_DOWN,					// 199 : TST_STPCLK		-> GND

/* Port 25 */
	CFG_FUNC0,							// 200 : WDOG			-> H4A_WDOG
	CFG_DISABLED,							// 201 : UNSPECIFIED		-> UNSPECIFIED
	CFG_DISABLED,							// 202 : UNSPECIFIED		-> UNSPECIFIED
	CFG_DISABLED,							// 203 : UNSPECIFIED		-> UNSPECIFIED
	CFG_DISABLED,							// 204 : UNSPECIFIED		-> UNSPECIFIED
	CFG_DISABLED,							// 205 : UNSPECIFIED		-> UNSPECIFIED
	CFG_DISABLED,							// 206 : UNSPECIFIED		-> UNSPECIFIED
	CFG_DISABLED,							// 207 : UNSPECIFIED		-> UNSPECIFIED
};

static const uint32_t pinconfig_dev_0[GPIO_GROUP_COUNT * GPIOPADPINS] = {

/* Port  0 */
	CFG_IN | PULL_UP,						//   0 : GPIO[0]		-> MENU_KEY_L
	CFG_IN | PULL_UP,						//   1 : GPIO[1]		-> HOLD_KEY_L
	CFG_IN | PULL_UP,						//   2 : GPIO[2]		-> VOL_UP_L
	CFG_IN | PULL_UP,						//   3 : GPIO[3]		-> VOL_DWN_L
	CFG_OUT_1,							//   4 : GPIO[4]		-> ACC_UHPM_EN
	CFG_DISABLED | PULL_DOWN,					//   5 : GPIO[5]		-> NC
	CFG_DISABLED | PULL_DOWN,					//   6 : GPIO[6]		-> NC
	CFG_OUT_0 | PULL_DOWN,						//   7 : GPIO[7]		-> BT_WAKE

/* Port  1 */
	CFG_OUT_0,							//   8 : GPIO[8]		-> WLAN_HSIC_AP_RDY
	CFG_IN | PULL_DOWN,						//   9 : GPIO[9]		-> WLAN_HSIC_DEV_RDY
	CFG_DISABLED,							//  10 : GPIO[10]		-> NC
	CFG_DISABLED,							//  11 : GPIO[11]		-> NC
	CFG_OUT_0,							//  12 : GPIO[12]		-> EN_8VBOOST
	CFG_IN | PULL_UP,						//  13 : GPIO[13]		-> PMU_IRQ_L
	CFG_OUT_0,							//  14 : GPIO[14]		-> WLAN_HSIC_RESUME
	CFG_OUT_1,							//  15 : GPIO[15]		-> SNAP_MCU_RESET_L

/* Port  2 */
	CFG_IN,								//  16 : GPIO[16]		-> BRD_ID3
	CFG_IN,								//  17 : GPIO[17]		-> BRD_REV3
	CFG_IN | PULL_DOWN,						//  18 : GPIO[18]		-> BOOT_CFG0
	CFG_OUT_0,							//  19 : GPIO[19]		-> KEEPACTIVE
	CFG_IN,								//  20 : GPIO[20]		-> TRISTAR_INT
	CFG_IN | PULL_UP,						//  21 : GPIO[21]		-> SNAP_INT_L
	CFG_OUT_0 | PULL_DOWN,						//  22 : GPIO[22]		-> SNAP_ID0
	CFG_IN | PULL_DOWN,						//  23 : GPIO[23]		-> SNAP_ID1

/* Port  3 */
	CFG_OUT_0 | PULL_DOWN,						//  24 : GPIO[24]		-> PS_5VBOOST_L
	CFG_IN | PULL_DOWN,						//  25 : GPIO[25]		-> BOOT_CFG1
	CFG_IN | PULL_DOWN,						//  26 : GPIO[26]		-> FORCE_DFU
	CFG_OUT_0,							//  27 : GPIO[27]		-> DUT_DFU_STATUS
	CFG_IN,								//  28 : GPIO[28]		-> BOOT_CFG2
	CFG_IN,								//  29 : GPIO[29]		-> BOOT_CFG3
	CFG_OUT_0 | PULL_DOWN,						//  30 : GPIO[30]		-> CODEC_RESET_L
	CFG_IN,								//  31 : GPIO[31]		-> VBUS_FAULT_L

/* Port  4 */
	CFG_OUT_0,							//  32 : GPIO[32]		-> USB_SW_EN
	CFG_IN | PULL_DOWN,						//  33 : GPIO[33]		-> GYRO_INT1
	CFG_IN,								//  34 : GPIO[34]		-> ACC_UHPM_POK
	CFG_OUT_1,							//  35 : GPIO[35]		-> EN_5VBOOST
	CFG_IN,								//  36 : GPIO[36]		-> ACCEL_INT2_L
	CFG_IN,								//  37 : EHCI_PORT_PWR[0]	-> BRD_REV[0]
	CFG_IN,								//  38 : EHCI_PORT_PWR[1]	-> BRD_REV[1]
	CFG_IN,								//  39 : EHCI_PORT_PWR[2]	-> BRD_REV[2]

/* Port  5 */
	CFG_FUNC0,							//  40 : UART1_TXD		-> AP_DBG_UART_TXD
	CFG_FUNC0,							//  41 : UART1_RXD		-> AP_DBG_UART_RXD
	CFG_DISABLED | PULL_DOWN,					//  42 : UART1_RTSN		-> NC
	CFG_IN,								//  43 : UART1_CTSN		-> SNAP_DET_L
	CFG_FUNC0,							//  44 : UART2_TXD		-> ACC_UART_TXD
	CFG_FUNC0,							//  45 : UART2_RXD		-> ACC_UART_RXD
	CFG_DISABLED | PULL_DOWN,					//  46 : UART2_RTSN		-> NC
	CFG_OUT_1,							//  47 : UART2_CTSN		-> USB_HUB_RST_L

/* Port  6 */
	CFG_FUNC0,							//  48 : UART3_TXD		-> BT_UART_RXD
	CFG_FUNC0,							//  49 : UART3_RXD		-> BT_UART_TXD
	CFG_FUNC0,							//  50 : UART3_RTSN		-> BT_UART_CTS_L
	CFG_FUNC0,							//  51 : UART3_CTSN		-> BT_UART_RTS_L
	CFG_FUNC0,							//  52 : I2C0_SDA		-> I2C0_SDA_1V8
	CFG_FUNC0,							//  53 : I2C0_SCL		-> I2C0_SCL_1V8
	CFG_FUNC0,							//  54 : I2C1_SDA		-> SNAP_I2C_SDA
	CFG_FUNC0,							//  55 : I2C1_SCL		-> SNAP_I2C_SCL

/* Port  7 */
	CFG_FUNC0,							//  56 : ISP0_SDA		-> I2C_CAM_REAR_SDA_1V8
	CFG_FUNC0,							//  57 : ISP0_SCL		-> I2C_CAM_REAR_SCL_1V8
	CFG_DISABLED | PULL_DOWN,					//  58 : ISP1_SDA		-> NC
	CFG_DISABLED | PULL_DOWN,					//  59 : ISP1_SCL		-> NC
	CFG_FUNC0 | PULL_DOWN,						//  60 : MIPI_VSYNC		-> SNAP_MIPI_VSYNC
	CFG_FUNC0 | PULL_DOWN,						//  61 : TMR32_PWM0		-> GYRO_INT2
	CFG_FUNC0 | PULL_DOWN,						//  62 : TMR32_PWM1		-> ACCEL_INT1_L
	CFG_FUNC0,							//  63 : TMR32_PWM2		-> WLAN_TIMESYNC

/* Port  8 */
	CFG_DISABLED,							//  64 : SWI_DATA		-> NC
	CFG_FUNC0,							//  65 : DWI_DI			-> DWI_AP_DI
	CFG_FUNC0,							//  66 : DWI_DO			-> DWI_AP_DO
	CFG_FUNC0,							//  67 : DWI_CLK		-> DWI_AP_CLK
	CFG_OUT_0,							//  68 : SENSOR0_RST		-> CAM_REAR_SHUTDOWN_L
	CFG_FUNC0,							//  69 : SENSOR0_CLK		-> CAM_REAR_CLK
	CFG_DISABLED | PULL_DOWN,					//  70 : SENSOR1_RST		-> NC
	CFG_DISABLED | PULL_DOWN,					//  71 : SENSOR1_CLK		-> NC

/* Port  9 */
	CFG_DISABLED | PULL_DOWN,					//  72 : ISP0_PRE_FLASH		-> NC
	CFG_DISABLED | PULL_DOWN,					//  73 : ISP0_FLASH		-> NC
	CFG_DISABLED,							//  74 : ISP1_PRE_FLASH		-> NC
	CFG_DISABLED,							//  75 : ISP1_FLASH		-> NC
	CFG_FUNC0,							//  76 : I2S0_MCK		-> CODEC_MCLK
	CFG_FUNC0,							//  77 : I2S0_LRCK		-> CODEC_LRCLK
	CFG_FUNC0,							//  78 : I2S0_BCLK		-> CODEC_BCLK
	CFG_DISABLED | PULL_DOWN,					//  79 : I2S0_DOUT		-> NC

/* Port 10 */
	CFG_FUNC0,							//  80 : I2S0_DIN		-> CODEC_TO_DUT_DIN
	CFG_DISABLED,							//  81 : I2S1_MCK		-> NC
	CFG_FUNC0,							//  82 : I2S1_LRCK		-> BT_PCM_SYNC
	CFG_FUNC0,							//  83 : I2S1_BCLK		-> BT_PCM_CLK
	CFG_FUNC0,							//  84 : I2S1_DOUT		-> BT_PCM_IN
	CFG_FUNC0,							//  85 : I2S1_DIN		-> BT_PCM_OUT
	CFG_DISABLED,							//  86 : I2S2_MCK		-> NC
	CFG_FUNC0,							//  87 : I2S2_LRCK		-> SPKR_AMP_MCA_FSYNC

/* Port 11 */
	CFG_FUNC0,							//  88 : I2S2_BCLK		-> SPKR_AMP_MCA_BCLK
	CFG_FUNC0 | PULL_DOWN,						//  89 : I2S2_DOUT		-> SPKR_AMP_MCA_SDATA
	CFG_DISABLED,							//  90 : I2S2_DIN		-> NC
	CFG_FUNC0,							//  91 : I2S3_MCK		-> SNAP_I2S_MCLK_H4A
	CFG_FUNC0,							//  92 : I2S3_LRCK		-> SNAP_I2S_LRCK
	CFG_FUNC0,							//  93 : I2S3_BCLK		-> SNAP_I2S_BCLK
	CFG_FUNC0,							//  94 : I2S3_DOUT		-> DUT_DOUT_TO_SNAP_I2S
	CFG_FUNC0,							//  95 : I2S3_DIN		-> SNAP_TO_DUT_I2S_DIN

/* Port 12 */
	CFG_IN,								//  96 : SPI0_SCLK		-> BRD_ID0
	CFG_IN,								//  97 : SPI0_MOSI		-> BRD_ID1
	CFG_IN,								//  98 : SPI0_MISO		-> BRD_ID2
	CFG_DISABLED,							//  99 : SPI0_SSIN		-> NC
	CFG_FUNC0,							// 100 : SPI1_SCLK		-> SNAP_SPI_CLK
	CFG_FUNC0,							// 101 : SPI1_MOSI		-> SNAP_SPI_MOSI
	CFG_FUNC0,							// 102 : SPI1_MISO		-> SNAP_SPI_MISO
	CFG_FUNC0,							// 103 : SPI1_SSIN		-> SNAP_MCU_SPI_CS_L

/* Port 13 */
	CFG_DISABLED,							// 104 : SPI2_SCLK		-> NC
	CFG_DISABLED,							// 105 : SPI2_MOSI		-> NC
	CFG_DISABLED,							// 106 : SPI2_MISO		-> NC
	CFG_DISABLED,							// 107 : SPI2_SSIN		-> NC
	CFG_DISABLED,							// 108 : UNSPECIFIED		-> UNSPECIFIED
	CFG_DISABLED,							// 109 : UNSPECIFIED		-> UNSPECIFIED
	CFG_DISABLED,							// 110 : UNSPECIFIED		-> UNSPECIFIED
	CFG_DISABLED,							// 111 : UNSPECIFIED		-> UNSPECIFIED

/* Port 14 */
	CFG_DISABLED,							// 112 : UNSPECIFIED		-> UNSPECIFIED
	CFG_DISABLED,							// 113 : UNSPECIFIED		-> UNSPECIFIED
	CFG_DISABLED,							// 114 : UNSPECIFIED		-> UNSPECIFIED
	CFG_DISABLED,							// 115 : UNSPECIFIED		-> UNSPECIFIED
	CFG_DISABLED,							// 116 : UNSPECIFIED		-> UNSPECIFIED
	CFG_DISABLED,							// 117 : UNSPECIFIED		-> UNSPECIFIED
	CFG_DISABLED,							// 118 : UNSPECIFIED		-> UNSPECIFIED
	CFG_DISABLED,							// 119 : UNSPECIFIED		-> UNSPECIFIED

/* Port 15 */
	CFG_DISABLED,							// 120 : UNSPECIFIED		-> UNSPECIFIED
	CFG_DISABLED,							// 121 : UNSPECIFIED		-> UNSPECIFIED
	CFG_DISABLED,							// 122 : UNSPECIFIED		-> UNSPECIFIED
	CFG_DISABLED,							// 123 : UNSPECIFIED		-> UNSPECIFIED
	CFG_DISABLED,							// 124 : UNSPECIFIED		-> UNSPECIFIED
	CFG_DISABLED,							// 125 : UNSPECIFIED		-> UNSPECIFIED
	CFG_DISABLED,							// 126 : UNSPECIFIED		-> UNSPECIFIED
	CFG_DISABLED,							// 127 : UNSPECIFIED		-> UNSPECIFIED

/* Port 16 */
	CFG_FUNC0,							// 128 : UART4_TXD		-> WLAN_DBG_UART_RXD
	CFG_FUNC0,							// 129 : UART4_RXD		-> WLAN_DBG_UART_TXD
	CFG_DISABLED | PULL_DOWN,					// 130 : UART4_RTSN		-> NC
	CFG_IN,								// 131 : UART4_CTSN		-> PMU_AMUX_AY_CTRL
	CFG_DISABLED | PULL_DOWN,					// 132 : SDIO0_DATA[3]		-> SDIO0_DATA[3]
	CFG_DISABLED | PULL_DOWN,					// 133 : SDIO0_DATA[2]		-> SDIO0_DATA[2]
	CFG_DISABLED | PULL_DOWN,					// 134 : SDIO0_DATA[1]		-> SDIO0_DATA[1]
	CFG_DISABLED | PULL_DOWN,					// 135 : SDIO0_DATA[0]		-> SDIO0_DATA[0]

/* Port 17 */
	CFG_DISABLED | PULL_DOWN,					// 136 : SDIO0_CMD		-> SDIO0_CMD
	CFG_DISABLED | PULL_DOWN,					// 137 : SDIO0_CLK		-> SDIO0_CLK
	CFG_DISABLED | PULL_DOWN,					// 138 : FMI0_CEN[3]		-> NC
	CFG_DISABLED | PULL_DOWN,					// 139 : FMI0_CEN[2]		-> NC
	CFG_DISABLED | PULL_DOWN,					// 140 : FMI0_CEN[1]		-> NC
	CFG_FUNC0,							// 141 : FMI0_CEN[0]		-> F0CE0_L
	CFG_FUNC0,							// 142 : FMI0_CLE		-> F0CLE
	CFG_FUNC0,							// 143 : FMI0_ALE		-> F0ALE

/* Port 18 */
	CFG_FUNC0,							// 144 : FMI0_REN		-> F0RE_L
	CFG_FUNC0,							// 145 : FMI0_WEN		-> F0WE_L
	CFG_FUNC0,							// 146 : FMI0_IO[7]		-> F0AD<7>
	CFG_FUNC0,							// 147 : FMI0_IO[6]		-> F0AD<6>
	CFG_FUNC0,							// 148 : FMI0_IO[5]		-> F0AD<5>
	CFG_FUNC0,							// 149 : FMI0_IO[4]		-> F0AD<4>
	CFG_DISABLED,							// 150 : UNSPECIFIED		-> UNSPECIFIED
	CFG_DISABLED,							// 151 : UNSPECIFIED		-> UNSPECIFIED

/* Port 19 */
	CFG_DISABLED,							// 152 : UNSPECIFIED		-> UNSPECIFIED
	CFG_DISABLED,							// 153 : UNSPECIFIED		-> UNSPECIFIED
	CFG_DISABLED,							// 154 : UNSPECIFIED		-> UNSPECIFIED
	CFG_DISABLED,							// 155 : UNSPECIFIED		-> UNSPECIFIED
	CFG_DISABLED,							// 156 : UNSPECIFIED		-> UNSPECIFIED
	CFG_DISABLED,							// 157 : UNSPECIFIED		-> UNSPECIFIED
	CFG_DISABLED,							// 158 : UNSPECIFIED		-> UNSPECIFIED
	CFG_DISABLED,							// 159 : UNSPECIFIED		-> UNSPECIFIED

/* Port 20 */
	CFG_FUNC0,							// 160 : FMI0_DQS		-> F0DQS
	CFG_FUNC0,							// 161 : FMI0_IO[3]		-> F0AD<3>
	CFG_FUNC0,							// 162 : FMI0_IO[2]		-> F0AD<2>
	CFG_FUNC0,							// 163 : FMI0_IO[1]		-> F0AD<1>
	CFG_FUNC0,							// 164 : FMI0_IO[0]		-> F0AD<0>
	CFG_DISABLED | PULL_DOWN,					// 165 : FMI1_CEN[3]		->
	CFG_DISABLED | PULL_DOWN,					// 166 : FMI1_CEN[2]		->
	CFG_DISABLED | PULL_DOWN,					// 167 : FMI1_CEN[1]		->

/* Port 21 */
	CFG_FUNC0,							// 168 : FMI1_CEN[0]		-> F1CE0_L
	CFG_FUNC0,							// 169 : FMI1_CLE		-> F1CLE
	CFG_FUNC0,							// 170 : FMI1_ALE		-> F1ALE
	CFG_FUNC0,							// 171 : FMI1_REN		-> F1RE_L
	CFG_FUNC0,							// 172 : FMI1_WEN		-> F1WE_L
	CFG_FUNC0,							// 173 : FMI1_IO[7]		-> F1AD<7>
	CFG_FUNC0,							// 174 : FMI1_IO[6]		-> F1AD<6>
	CFG_FUNC0,							// 175 : FMI1_IO[5]		-> F1AD<5>

/* Port 22 */
	CFG_FUNC0,							// 176 : FMI1_IO[4]		-> F1AD<4>
	CFG_FUNC0,							// 177 : FMI1_DQS		-> F1DQS
	CFG_FUNC0,							// 178 : FMI1_IO[3]		-> F1AD<3>
	CFG_FUNC0,							// 179 : FMI1_IO[2]		-> F1AD<2>
	CFG_FUNC0,							// 180 : FMI1_IO[1]		-> F1AD<1>
	CFG_FUNC0,							// 181 : FMI1_IO[0]		-> F1AD<0>
	CFG_DISABLED,							// 182 : UNSPECIFIED		-> UNSPECIFIED
	CFG_DISABLED,							// 183 : UNSPECIFIED		-> UNSPECIFIED

/* Port 23 */
	CFG_DISABLED,							// 184 : UNSPECIFIED		-> UNSPECIFIED
	CFG_DISABLED,							// 185 : UNSPECIFIED		-> UNSPECIFIED
	CFG_DISABLED,							// 186 : UNSPECIFIED		-> UNSPECIFIED
	CFG_DISABLED,							// 187 : UNSPECIFIED		-> UNSPECIFIED
	CFG_DISABLED,							// 188 : UNSPECIFIED		-> UNSPECIFIED
	CFG_DISABLED,							// 189 : UNSPECIFIED		-> UNSPECIFIED
	CFG_DISABLED,							// 190 : UNSPECIFIED		-> UNSPECIFIED
	CFG_DISABLED,							// 191 : UNSPECIFIED		-> UNSPECIFIED

/* Port 24 */
	CFG_FUNC0,							// 192 : I2C2_SDA		-> I2C2_SDA_1V8
	CFG_FUNC0,							// 193 : I2C2_SCL		-> I2C2_SCL_1V8
	CFG_FUNC0,							// 194 : UART0_TXD		-> DUT_TXD
	CFG_FUNC0 | PULL_DOWN,						// 195 : UART0_RXD		-> DUT_RXD
	CFG_DISABLED | PULL_DOWN,					// 196 : UART5_RTXD		-> NC
	CFG_DISABLED | PULL_DOWN,					// 197 : DP_HPD			-> GND
	CFG_FUNC0 | PULL_DOWN,						// 198 : TST_CLKOUT		-> TST_CLKOUT
	CFG_DISABLED | PULL_DOWN,					// 199 : TST_STPCLK		-> GND

/* Port 25 */
	CFG_FUNC0,							// 200 : WDOG			-> H4A_WDOG
	CFG_DISABLED,							// 201 : UNSPECIFIED		-> UNSPECIFIED
	CFG_DISABLED,							// 202 : UNSPECIFIED		-> UNSPECIFIED
	CFG_DISABLED,							// 203 : UNSPECIFIED		-> UNSPECIFIED
	CFG_DISABLED,							// 204 : UNSPECIFIED		-> UNSPECIFIED
	CFG_DISABLED,							// 205 : UNSPECIFIED		-> UNSPECIFIED
	CFG_DISABLED,							// 206 : UNSPECIFIED		-> UNSPECIFIED
	CFG_DISABLED,							// 207 : UNSPECIFIED		-> UNSPECIFIED
};

struct pinconfig_map {
	uint32_t board_id;
	uint32_t board_id_mask;
	const uint32_t *pinconfigs[GPIOC_COUNT];
};

static const struct pinconfig_map cfg_map[] = {
	{ 0, 1, { pinconfig_ap_0 } },
	{ 1, 1, { pinconfig_dev_0 } },
};

const uint32_t * target_get_default_gpio_cfg(uint32_t gpioc)
{
	static const struct pinconfig_map *selected_map = NULL;

	if (selected_map == NULL) {
		uint32_t board_id = platform_get_board_id();
		for (unsigned i = 0; i < sizeof(cfg_map)/sizeof(cfg_map[0]); i++) {
			if ((board_id & cfg_map[i].board_id_mask) == cfg_map[i].board_id) {
				selected_map = &cfg_map[i];
				break;
			}
		}

		if (selected_map == NULL)
			panic("no default pinconfig for board id %u", board_id);
	}

	ASSERT(gpioc < GPIOC_COUNT);
	return selected_map->pinconfigs[gpioc];
}
