18f380381SAlban Bedel /* 28f380381SAlban Bedel * (C) Copyright 2013 38f380381SAlban Bedel * Avionic Design GmbH <www.avionic-design.de> 48f380381SAlban Bedel * 58f380381SAlban Bedel * SPDX-License-Identifier: GPL-2.0+ 68f380381SAlban Bedel */ 78f380381SAlban Bedel 88f380381SAlban Bedel #include <common.h> 9b0e6ef46SSimon Glass #include <dm.h> 108f380381SAlban Bedel #include <asm/arch/pinmux.h> 118f380381SAlban Bedel #include <asm/arch/gp_padctrl.h> 128f380381SAlban Bedel #include <asm/arch/gpio.h> 138f380381SAlban Bedel #include <asm/gpio.h> 148f380381SAlban Bedel #include "pinmux-config-tamonten-ng.h" 158f380381SAlban Bedel #include <i2c.h> 168f380381SAlban Bedel 178f380381SAlban Bedel #define PMU_I2C_ADDRESS 0x2D 188f380381SAlban Bedel 198f380381SAlban Bedel #define PMU_REG_LDO5 0x32 208f380381SAlban Bedel 218f380381SAlban Bedel #define PMU_REG_LDO_HIGH_POWER 1 228f380381SAlban Bedel 238f380381SAlban Bedel /* Voltage selection for the LDOs with 100mV resolution */ 248f380381SAlban Bedel #define PMU_REG_LDO_SEL_100(mV) ((((mV - 1000) / 100) + 2) << 2) 258f380381SAlban Bedel 268f380381SAlban Bedel #define PMU_REG_LDO_100(st, mV) (PMU_REG_LDO_##st | PMU_REG_LDO_SEL_100(mV)) 278f380381SAlban Bedel 288f380381SAlban Bedel #define PMU_LDO5(st, mV) PMU_REG_LDO_100(st, mV) 298f380381SAlban Bedel 308f380381SAlban Bedel void pinmux_init(void) 318f380381SAlban Bedel { 32dfb42fc9SStephen Warren pinmux_config_pingrp_table(tamonten_ng_pinmux_common, 338f380381SAlban Bedel ARRAY_SIZE(tamonten_ng_pinmux_common)); 34dfb42fc9SStephen Warren pinmux_config_pingrp_table(unused_pins_lowpower, 358f380381SAlban Bedel ARRAY_SIZE(unused_pins_lowpower)); 368f380381SAlban Bedel 378f380381SAlban Bedel /* Initialize any non-default pad configs (APB_MISC_GP regs) */ 38dfb42fc9SStephen Warren pinmux_config_drvgrp_table(tamonten_ng_padctrl, 398f380381SAlban Bedel ARRAY_SIZE(tamonten_ng_padctrl)); 408f380381SAlban Bedel } 418f380381SAlban Bedel 428f380381SAlban Bedel void gpio_early_init(void) 438f380381SAlban Bedel { 448f380381SAlban Bedel /* Turn on the alive signal */ 458f380381SAlban Bedel gpio_request(GPIO_PV2, "ALIVE"); 468f380381SAlban Bedel gpio_direction_output(GPIO_PV2, 1); 478f380381SAlban Bedel 488f380381SAlban Bedel /* Remove the reset on the external periph */ 498f380381SAlban Bedel gpio_request(GPIO_PI4, "nRST_PERIPH"); 508f380381SAlban Bedel gpio_direction_output(GPIO_PI4, 1); 518f380381SAlban Bedel } 528f380381SAlban Bedel 538f380381SAlban Bedel void pmu_write(uchar reg, uchar data) 548f380381SAlban Bedel { 55b0e6ef46SSimon Glass struct udevice *dev; 56b0e6ef46SSimon Glass int ret; 57b0e6ef46SSimon Glass 58b0e6ef46SSimon Glass ret = i2c_get_chip_for_busnum(4, PMU_I2C_ADDRESS, &dev); 59b0e6ef46SSimon Glass if (ret) { 60b0e6ef46SSimon Glass debug("%s: Cannot find PMIC I2C chip\n", __func__); 61b0e6ef46SSimon Glass return; 62b0e6ef46SSimon Glass } 63*f9a4c2daSSimon Glass dm_i2c_write(dev, reg, &data, 1); 648f380381SAlban Bedel } 658f380381SAlban Bedel 668f380381SAlban Bedel /* 678f380381SAlban Bedel * Do I2C/PMU writes to bring up SD card bus power 688f380381SAlban Bedel * 698f380381SAlban Bedel */ 708f380381SAlban Bedel void board_sdmmc_voltage_init(void) 718f380381SAlban Bedel { 728f380381SAlban Bedel /* Enable LDO5 with 3.3v for SDMMC3 */ 738f380381SAlban Bedel pmu_write(PMU_REG_LDO5, PMU_LDO5(HIGH_POWER, 3300)); 748f380381SAlban Bedel 758f380381SAlban Bedel /* Switch the power on */ 768f380381SAlban Bedel gpio_request(GPIO_PJ2, "EN_3V3_EMMC"); 778f380381SAlban Bedel gpio_direction_output(GPIO_PJ2, 1); 788f380381SAlban Bedel } 798f380381SAlban Bedel 808f380381SAlban Bedel /* 818f380381SAlban Bedel * Routine: pin_mux_mmc 828f380381SAlban Bedel * Description: setup the MMC muxes, power rails, etc. 838f380381SAlban Bedel */ 848f380381SAlban Bedel void pin_mux_mmc(void) 858f380381SAlban Bedel { 868f380381SAlban Bedel /* 878f380381SAlban Bedel * NOTE: We don't do mmc-specific pin muxes here. 888f380381SAlban Bedel * They were done globally in pinmux_init(). 898f380381SAlban Bedel */ 908f380381SAlban Bedel 918f380381SAlban Bedel /* Bring up the SDIO1 power rail */ 928f380381SAlban Bedel board_sdmmc_voltage_init(); 938f380381SAlban Bedel } 94