mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-10 23:24:38 +00:00
ARM: OMAP4+: Add support for getting pbias info from board
Palmas driver assumes it is always TPS659xx regulator on all DRA7xx based boards to enable mmc regulator. This is not true always like in case of DRA71x-evm. So get this information based on the board. Signed-off-by: Lokesh Vutla <lokeshvutla@ti.com> Signed-off-by: Vignesh R <vigneshr@ti.com> Signed-off-by: Nishanth Menon <nm@ti.com> Reviewed-by: Tom Rini <trini@konsulko.com> [trini: Delete omap4_vmmc_pbias_config from omap_hsmmc.c] Signed-off-by: Tom Rini <trini@konsulko.com>
This commit is contained in:
parent
f56e635099
commit
b4b060066f
6 changed files with 82 additions and 48 deletions
|
@ -167,5 +167,5 @@ struct hsmmc {
|
|||
int omap_mmc_init(int dev_index, uint host_caps_mask, uint f_max, int cd_gpio,
|
||||
int wp_gpio);
|
||||
|
||||
|
||||
void vmmc_pbias_config(uint voltage);
|
||||
#endif /* OMAP_MMC_H_ */
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
#include <common.h>
|
||||
#include <palmas.h>
|
||||
#include <asm/armv7.h>
|
||||
#include <asm/arch/cpu.h>
|
||||
#include <asm/arch/sys_proto.h>
|
||||
|
@ -175,3 +176,15 @@ void v7_outer_cache_disable(void)
|
|||
omap_smc1(OMAP4_SERVICE_PL310_CONTROL_REG_SET, 0);
|
||||
}
|
||||
#endif /* !CONFIG_SYS_L2CACHE_OFF */
|
||||
|
||||
void vmmc_pbias_config(uint voltage)
|
||||
{
|
||||
u32 value = 0;
|
||||
|
||||
value = readl((*ctrl)->control_pbiaslite);
|
||||
value &= ~(MMC1_PBIASLITE_PWRDNZ | MMC1_PWRDNZ);
|
||||
writel(value, (*ctrl)->control_pbiaslite);
|
||||
value = readl((*ctrl)->control_pbiaslite);
|
||||
value |= MMC1_PBIASLITE_VMODE | MMC1_PBIASLITE_PWRDNZ | MMC1_PWRDNZ;
|
||||
writel(value, (*ctrl)->control_pbiaslite);
|
||||
}
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
#include <common.h>
|
||||
#include <palmas.h>
|
||||
#include <asm/armv7.h>
|
||||
#include <asm/arch/cpu.h>
|
||||
#include <asm/arch/sys_proto.h>
|
||||
|
@ -451,3 +452,36 @@ void v7_arch_cp15_set_acr(u32 acr, u32 cpu_midr, u32 cpu_rev_comb,
|
|||
#endif
|
||||
omap_smc1(OMAP5_SERVICE_ACR_SET, acr);
|
||||
}
|
||||
|
||||
#if defined(CONFIG_PALMAS_POWER)
|
||||
void vmmc_pbias_config(uint voltage)
|
||||
{
|
||||
u32 value = 0;
|
||||
struct vcores_data const *vcores = *omap_vcores;
|
||||
|
||||
value = readl((*ctrl)->control_pbias);
|
||||
value &= ~SDCARD_PWRDNZ;
|
||||
writel(value, (*ctrl)->control_pbias);
|
||||
udelay(10); /* wait 10 us */
|
||||
value &= ~SDCARD_BIAS_PWRDNZ;
|
||||
writel(value, (*ctrl)->control_pbias);
|
||||
|
||||
if (vcores->core.pmic->i2c_slave_addr == 0x60) {
|
||||
if (voltage == LDO_VOLT_3V0)
|
||||
voltage = 0x19;
|
||||
else if (voltage == LDO_VOLT_1V8)
|
||||
voltage = 0xa;
|
||||
lp873x_mmc1_poweron_ldo(voltage);
|
||||
} else {
|
||||
palmas_mmc1_poweron_ldo(voltage);
|
||||
}
|
||||
|
||||
value = readl((*ctrl)->control_pbias);
|
||||
value |= SDCARD_BIAS_PWRDNZ;
|
||||
writel(value, (*ctrl)->control_pbias);
|
||||
udelay(150); /* wait 150 us */
|
||||
value |= SDCARD_PWRDNZ;
|
||||
writel(value, (*ctrl)->control_pbias);
|
||||
udelay(150); /* wait 150 us */
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -96,44 +96,6 @@ static int omap_mmc_setup_gpio_in(int gpio, const char *label)
|
|||
}
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_OMAP44XX)
|
||||
static void omap4_vmmc_pbias_config(struct mmc *mmc)
|
||||
{
|
||||
u32 value = 0;
|
||||
|
||||
value = readl((*ctrl)->control_pbiaslite);
|
||||
value &= ~(MMC1_PBIASLITE_PWRDNZ | MMC1_PWRDNZ);
|
||||
writel(value, (*ctrl)->control_pbiaslite);
|
||||
value = readl((*ctrl)->control_pbiaslite);
|
||||
value |= MMC1_PBIASLITE_VMODE | MMC1_PBIASLITE_PWRDNZ | MMC1_PWRDNZ;
|
||||
writel(value, (*ctrl)->control_pbiaslite);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_OMAP54XX) && defined(CONFIG_PALMAS_POWER)
|
||||
static void omap5_pbias_config(struct mmc *mmc)
|
||||
{
|
||||
u32 value = 0;
|
||||
|
||||
value = readl((*ctrl)->control_pbias);
|
||||
value &= ~SDCARD_PWRDNZ;
|
||||
writel(value, (*ctrl)->control_pbias);
|
||||
udelay(10); /* wait 10 us */
|
||||
value &= ~SDCARD_BIAS_PWRDNZ;
|
||||
writel(value, (*ctrl)->control_pbias);
|
||||
|
||||
palmas_mmc1_poweron_ldo();
|
||||
|
||||
value = readl((*ctrl)->control_pbias);
|
||||
value |= SDCARD_BIAS_PWRDNZ;
|
||||
writel(value, (*ctrl)->control_pbias);
|
||||
udelay(150); /* wait 150 us */
|
||||
value |= SDCARD_PWRDNZ;
|
||||
writel(value, (*ctrl)->control_pbias);
|
||||
udelay(150); /* wait 150 us */
|
||||
}
|
||||
#endif
|
||||
|
||||
static unsigned char mmc_board_init(struct mmc *mmc)
|
||||
{
|
||||
#if defined(CONFIG_OMAP34XX)
|
||||
|
@ -173,14 +135,10 @@ static unsigned char mmc_board_init(struct mmc *mmc)
|
|||
&prcm_base->iclken1_core);
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_OMAP44XX)
|
||||
#if defined(CONFIG_OMAP54XX) || defined(CONFIG_OMAP44XX)
|
||||
/* PBIAS config needed for MMC1 only */
|
||||
if (mmc->block_dev.devnum == 0)
|
||||
omap4_vmmc_pbias_config(mmc);
|
||||
#endif
|
||||
#if defined(CONFIG_OMAP54XX) && defined(CONFIG_PALMAS_POWER)
|
||||
if (mmc->block_dev.devnum == 0)
|
||||
omap5_pbias_config(mmc);
|
||||
vmmc_pbias_config(LDO_VOLT_3V0);
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
|
@ -214,7 +172,6 @@ void mmc_init_stream(struct hsmmc *mmc_base)
|
|||
writel(readl(&mmc_base->con) & ~INIT_INITSTREAM, &mmc_base->con);
|
||||
}
|
||||
|
||||
|
||||
static int omap_hsmmc_init_setup(struct mmc *mmc)
|
||||
{
|
||||
struct hsmmc *mmc_base;
|
||||
|
|
|
@ -23,7 +23,26 @@ void palmas_init_settings(void)
|
|||
#endif
|
||||
}
|
||||
|
||||
int palmas_mmc1_poweron_ldo(void)
|
||||
#if defined(CONFIG_OMAP54XX)
|
||||
int lp873x_mmc1_poweron_ldo(uint voltage)
|
||||
{
|
||||
if (palmas_i2c_write_u8(LP873X_LDO1_ADDR, LP873X_LDO1_VOLTAGE,
|
||||
voltage)) {
|
||||
printf("lp873x: could not set LDO1 voltage.\n");
|
||||
return 1;
|
||||
}
|
||||
/* TURN ON LDO1 */
|
||||
if (palmas_i2c_write_u8(LP873X_LDO1_ADDR, LP873X_LDO1_CTRL,
|
||||
LP873X_LDO_CTRL_EN | LP873X_LDO_CTRL_RDIS_EN)) {
|
||||
printf("lp873x: could not turn on LDO1.\n");
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
|
||||
}
|
||||
#endif
|
||||
|
||||
int palmas_mmc1_poweron_ldo(uint voltage)
|
||||
{
|
||||
u8 val = 0;
|
||||
|
||||
|
|
|
@ -24,6 +24,16 @@
|
|||
#define LDO1_CTRL 0x50
|
||||
#define LDO1_VOLTAGE 0x51
|
||||
|
||||
/* LDO1 control/voltage for LP873x */
|
||||
#define LP873X_LDO1_ADDR 0x60
|
||||
#define LP873X_LDO1_CTRL 0x9
|
||||
#define LP873X_LDO1_VOLTAGE 0xa
|
||||
#define LP873X_LDO_VOLT_3V0 0x19
|
||||
#define LP873X_LDO_VOLT_1V8 0xa
|
||||
#define LP873X_LDO_CTRL_EN (0x1 << 0)
|
||||
#define LP873X_LDO_CTRL_EN_PINCTRL (0x1 << 1)
|
||||
#define LP873X_LDO_CTRL_RDIS_EN (0x1 << 2)
|
||||
|
||||
/* LDO2 control/voltage */
|
||||
#define LDO2_CTRL 0x52
|
||||
#define LDO2_VOLTAGE 0x53
|
||||
|
@ -119,7 +129,8 @@ static inline int palmas_i2c_read_u8(u8 chip_no, u8 reg, u8 *val)
|
|||
}
|
||||
|
||||
void palmas_init_settings(void);
|
||||
int palmas_mmc1_poweron_ldo(void);
|
||||
int palmas_mmc1_poweron_ldo(uint voltage);
|
||||
int lp873x_mmc1_poweron_ldo(uint voltage);
|
||||
int twl603x_mmc1_set_ldo9(u8 vsel);
|
||||
int twl603x_audio_power(u8 on);
|
||||
int twl603x_enable_bb_charge(u8 bb_fields);
|
||||
|
|
Loading…
Reference in a new issue