PAD_CFG_SFIO(SDMMC1_CLK, PINMUX_INPUT_ENABLE, SDMMC1), PAD_CFG_SFIO(SDMMC1_CMD, PINMUX_INPUT_ENABLE | PINMUX_PULL_UP, SDMMC1), PAD_CFG_SFIO(SDMMC1_DAT0, PINMUX_INPUT_ENABLE | PINMUX_PULL_UP, SDMMC1), PAD_CFG_SFIO(SDMMC1_DAT1, PINMUX_INPUT_ENABLE | PINMUX_PULL_UP, SDMMC1), PAD_CFG_SFIO(SDMMC1_DAT2, PINMUX_INPUT_ENABLE | PINMUX_PULL_UP, SDMMC1), PAD_CFG_SFIO(SDMMC1_DAT3, PINMUX_INPUT_ENABLE | PINMUX_PULL_UP, SDMMC1), /* MMC1 Card Detect pin */ PAD_CFG_GPIO_INPUT(GPIO_PZ1, PINMUX_PULL_UP), /* Disable SD card reader power so it can be reset even on warm boot. Payloads must enable power before accessing SD card slots. */ PAD_CFG_GPIO_OUT0(GPIO_PZ4, PINMUX_PULL_NONE), }; static const struct pad_config audio_codec_pads[] = { /* GPIO_X1_AUD(BB3) is AUDIO_LDO_EN (->CODEC RESET_N pin) */ PAD_CFG_GPIO_OUT1(GPIO_X1_AUD, PINMUX_PULL_DOWN), }; static const struct pad_config padcfgs[] = { /* We pull the USB VBUS signals up but keep them as inputs since the * voltage source likes to drive them low on overcurrent conditions */ PAD_CFG_GPIO_INPUT(USB_VBUS_EN1, PINMUX_PULL_NONE | PINMUX_PARKED | PINMUX_INPUT_ENABLE | PINMUX_LPDR | PINMUX_IO_HV), /* Add backlight vdd/enable/pwm/dp hpd pad cfgs here */ }; static const struct pad_config i2c1_pad[] = { /* GEN1 I2C */ PAD_CFG_SFIO(GEN1_I2C_SCL, PINMUX_INPUT_ENABLE, I2C1), PAD_CFG_SFIO(GEN1_I2C_SDA, PINMUX_INPUT_ENABLE, I2C1),
#include <vendorcode/google/chromeos/vboot_handoff.h> #include <vendorcode/google/chromeos/vboot2/misc.h> #endif #include <delay.h> #include "gpio.h" #include "pmic.h" static const struct pad_config padcfgs[] = { PAD_CFG_GPIO_INPUT(USB_VBUS_EN1, PINMUX_PULL_NONE | PINMUX_PARKED | PINMUX_INPUT_ENABLE | PINMUX_LPDR | PINMUX_IO_HV), }; static const struct pad_config audio_codec_pads[] = { /* GPIO_X1_AUD(BB3) is CODEC_RST_L and DMIC1_DAT(E1) is AUDIO_ENABLE */ PAD_CFG_GPIO_OUT1(GPIO_X1_AUD, PINMUX_PULL_DOWN), PAD_CFG_GPIO_OUT1(DMIC1_DAT, PINMUX_PULL_DOWN), }; static const struct pad_config i2s1_pad[] = { /* I2S1 */ PAD_CFG_SFIO(DAP1_SCLK, PINMUX_INPUT_ENABLE, I2S1), PAD_CFG_SFIO(DAP1_FS, PINMUX_INPUT_ENABLE, I2S1), PAD_CFG_SFIO(DAP1_DOUT, PINMUX_INPUT_ENABLE, I2S1), PAD_CFG_SFIO(DAP1_DIN, PINMUX_INPUT_ENABLE | PINMUX_TRISTATE, I2S1), /* codec MCLK via AUD SFIO */ PAD_CFG_SFIO(AUD_MCLK, PINMUX_PULL_NONE, AUD), }; static const struct funit_cfg audio_funit[] = { /* We need 1.5MHz for I2S1. So we use CLK_M */
/* MMC4 (eMMC) */ PAD_CFG_SFIO(SDMMC4_CLK, PINMUX_INPUT_ENABLE|PINMUX_PULL_DOWN, SDMMC4), PAD_CFG_SFIO(SDMMC4_CMD, PINMUX_INPUT_ENABLE|PINMUX_PULL_UP, SDMMC4), PAD_CFG_SFIO(SDMMC4_DAT0, PINMUX_INPUT_ENABLE|PINMUX_PULL_UP, SDMMC4), PAD_CFG_SFIO(SDMMC4_DAT1, PINMUX_INPUT_ENABLE|PINMUX_PULL_UP, SDMMC4), PAD_CFG_SFIO(SDMMC4_DAT2, PINMUX_INPUT_ENABLE|PINMUX_PULL_UP, SDMMC4), PAD_CFG_SFIO(SDMMC4_DAT3, PINMUX_INPUT_ENABLE|PINMUX_PULL_UP, SDMMC4), PAD_CFG_SFIO(SDMMC4_DAT4, PINMUX_INPUT_ENABLE|PINMUX_PULL_UP, SDMMC4), PAD_CFG_SFIO(SDMMC4_DAT5, PINMUX_INPUT_ENABLE|PINMUX_PULL_UP, SDMMC4), PAD_CFG_SFIO(SDMMC4_DAT6, PINMUX_INPUT_ENABLE|PINMUX_PULL_UP, SDMMC4), PAD_CFG_SFIO(SDMMC4_DAT7, PINMUX_INPUT_ENABLE|PINMUX_PULL_UP, SDMMC4), }; static const struct pad_config audio_codec_pads[] = { /* H1 is CODEC_RST_L and R2(ROW2) is AUDIO_ENABLE */ PAD_CFG_GPIO_OUT1(GPIO_PH1, PINMUX_PULL_DOWN), PAD_CFG_GPIO_OUT1(KB_ROW2, PINMUX_PULL_DOWN), }; static const struct funit_cfg funits[] = { /* MMC on SDMMC4 controller at 48MHz. */ FUNIT_CFG(SDMMC4, PLLP, 48000, mmcpads, ARRAY_SIZE(mmcpads)), /* I2C6 for audio, temp sensor, etc. Enable codec via GPIOs/muxes */ FUNIT_CFG(I2C6, PLLP, 400, audio_codec_pads, ARRAY_SIZE(audio_codec_pads)), FUNIT_CFG_USB(USBD), }; /* HACK: For proto boards before proto3, we want to disable ec sw sync */ static void fix_ec_sw_sync(void) { #if IS_ENABLED(CONFIG_CHROMEOS)
* * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include <soc/addressmap.h> #include <soc/clock.h> #include <soc/funitcfg.h> #include <soc/nvidia/tegra/i2c.h> #include <soc/padconfig.h> #include <soc/romstage.h> static const struct pad_config padcfgs[] = { /* SOC_WARM_RESET_L */ PAD_CFG_GPIO_OUT1(GPIO_PI5, PINMUX_PULL_UP), }; static const struct pad_config i2cpad[] = { /* TPM I2C */ PAD_CFG_SFIO(CAM_I2C_SCL, PINMUX_INPUT_ENABLE, I2C3), PAD_CFG_SFIO(CAM_I2C_SDA, PINMUX_INPUT_ENABLE, I2C3), }; static const struct pad_config spipad[] = { /* EC on SPI1: mosi, miso, clk, cs */ PAD_CFG_SFIO(ULPI_CLK, PINMUX_INPUT_ENABLE, SPI1), PAD_CFG_SFIO(ULPI_DIR, PINMUX_INPUT_ENABLE, SPI1), PAD_CFG_SFIO(ULPI_NXT, PINMUX_INPUT_ENABLE, SPI1), PAD_CFG_SFIO(ULPI_STP, PINMUX_INPUT_ENABLE, SPI1), };