summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLaxman Dewangan <ldewangan@nvidia.com>2011-05-12 23:17:01 +0530
committerVarun Colbert <vcolbert@nvidia.com>2011-05-18 11:47:08 -0700
commit8ca73d0f803d29682042864bcdf545fa46731b81 (patch)
treefb472c2c8a9c222da18e6edb7749318f9e48f22c
parent722c68640c7f9bec7bba1f2dce11c4a8a1caeb03 (diff)
arm: tegra: cardhu: Adding board entry for tps6236x
Adding platform data entry for the tps6236x device and registering this device if board info has sku with bit0 as 1. bug 821295 Change-Id: I18618ef75eca66a1f699c003c787dcb1f06e7659 Reviewed-on: http://git-master/r/31388 Reviewed-by: Laxman Dewangan <ldewangan@nvidia.com> Tested-by: Laxman Dewangan <ldewangan@nvidia.com> Reviewed-by: Bitan Biswas <bbiswas@nvidia.com>
-rw-r--r--arch/arm/mach-tegra/board-cardhu-power.c153
1 files changed, 122 insertions, 31 deletions
diff --git a/arch/arm/mach-tegra/board-cardhu-power.c b/arch/arm/mach-tegra/board-cardhu-power.c
index 9063753ea0f6..f593d9fe4d11 100644
--- a/arch/arm/mach-tegra/board-cardhu-power.c
+++ b/arch/arm/mach-tegra/board-cardhu-power.c
@@ -28,6 +28,7 @@
#include <linux/io.h>
#include <linux/regulator/gpio-switch-regulator.h>
#include <linux/regulator/tps6591x-regulator.h>
+#include <linux/regulator/tps6236x-regulator.h>
#include <mach/iomap.h>
#include <mach/irqs.h>
@@ -42,11 +43,15 @@
#define PMC_CTRL 0x0
#define PMC_CTRL_INTR_LOW (1 << 17)
-static struct regulator_consumer_supply tps6591x_vdd1_supply[] = {
+static struct regulator_consumer_supply tps6591x_vdd1_supply_skubit0_0[] = {
REGULATOR_SUPPLY("vdd_core", NULL),
REGULATOR_SUPPLY("en_vddio_ddr_1v2", NULL),
};
+static struct regulator_consumer_supply tps6591x_vdd1_supply_skubit0_1[] = {
+ REGULATOR_SUPPLY("en_vddio_ddr_1v2", NULL),
+};
+
static struct regulator_consumer_supply tps6591x_vdd2_supply[] = {
REGULATOR_SUPPLY("vdd_gen1v5", NULL),
REGULATOR_SUPPLY("vcore_lcd", NULL),
@@ -221,7 +226,8 @@ static struct regulator_consumer_supply tps6591x_ldo8_supply[] = {
.ectrl = _ectrl \
}
-TPS_PDATA_INIT(vdd1, 600, 1500, 0, 1, 1, 0, -1, 0, 0, 0);
+TPS_PDATA_INIT_BOARD(vdd1, skubit0_0, 600, 1500, 0, 1, 1, 0, -1, 0, 0, 0);
+TPS_PDATA_INIT_BOARD(vdd1, skubit0_1, 600, 1500, 0, 1, 1, 0, -1, 0, 0, 0);
TPS_PDATA_INIT(vdd2, 600, 1500, 0, 1, 1, 0, -1, 0, 0, 0);
TPS_PDATA_INIT(vddctrl, 600, 1400, 0, 1, 1, 0, -1, 0, 0, EXT_CTRL_EN1);
TPS_PDATA_INIT(vio, 1500, 3300, 0, 1, 1, 0, -1, 0, 0, 0);
@@ -267,37 +273,61 @@ static struct tps6591x_rtc_platform_data rtc_data = {
.platform_data = &pdata_##_data, \
}
-static struct tps6591x_subdev_info tps_devs_e118x[] = {
+#define TPS6591X_DEV_COMMON_E118X \
+ TPS_REG(VDD_2, vdd2), \
+ TPS_REG(VDDCTRL, vddctrl), \
+ TPS_REG(LDO_1, ldo1), \
+ TPS_REG(LDO_2, ldo2), \
+ TPS_REG(LDO_3, ldo3_e118x), \
+ TPS_REG(LDO_4, ldo4), \
+ TPS_REG(LDO_5, ldo5_e118x), \
+ TPS_REG(LDO_6, ldo6), \
+ TPS_REG(LDO_7, ldo7), \
+ TPS_REG(LDO_8, ldo8)
+
+static struct tps6591x_subdev_info tps_devs_e118x_skubit0_0[] = {
TPS_REG(VIO, vio),
- TPS_REG(VDD_1, vdd1),
- TPS_REG(VDD_2, vdd2),
- TPS_REG(VDDCTRL, vddctrl),
- TPS_REG(LDO_1, ldo1),
- TPS_REG(LDO_2, ldo2),
- TPS_REG(LDO_3, ldo3_e118x),
- TPS_REG(LDO_4, ldo4),
- TPS_REG(LDO_5, ldo5_e118x),
- TPS_REG(LDO_6, ldo6),
- TPS_REG(LDO_7, ldo7),
- TPS_REG(LDO_8, ldo8),
+ TPS_REG(VDD_1, vdd1_skubit0_0),
+ TPS6591X_DEV_COMMON_E118X,
#if defined(CONFIG_RTC_DRV_TPS6591x)
TPS_RTC_REG(),
#endif
};
-static struct tps6591x_subdev_info tps_devs_e1198[] = {
+static struct tps6591x_subdev_info tps_devs_e118x_skubit0_1[] = {
TPS_REG(VIO, vio),
- TPS_REG(VDD_1, vdd1),
- TPS_REG(VDD_2, vdd2),
- TPS_REG(VDDCTRL, vddctrl),
- TPS_REG(LDO_1, ldo1),
- TPS_REG(LDO_2, ldo2),
- TPS_REG(LDO_3, ldo3_e1198),
- TPS_REG(LDO_4, ldo4),
- TPS_REG(LDO_5, ldo5_e1198),
- TPS_REG(LDO_6, ldo6),
- TPS_REG(LDO_7, ldo7),
- TPS_REG(LDO_8, ldo8),
+ TPS_REG(VDD_1, vdd1_skubit0_1),
+ TPS6591X_DEV_COMMON_E118X,
+#if defined(CONFIG_RTC_DRV_TPS6591x)
+ TPS_RTC_REG(),
+#endif
+};
+
+#define TPS6591X_DEV_COMMON_CARDHU \
+ TPS_REG(VDD_2, vdd2), \
+ TPS_REG(VDDCTRL, vddctrl), \
+ TPS_REG(LDO_1, ldo1), \
+ TPS_REG(LDO_2, ldo2), \
+ TPS_REG(LDO_3, ldo3_e1198), \
+ TPS_REG(LDO_4, ldo4), \
+ TPS_REG(LDO_5, ldo5_e1198), \
+ TPS_REG(LDO_6, ldo6), \
+ TPS_REG(LDO_7, ldo7), \
+ TPS_REG(LDO_8, ldo8)
+
+static struct tps6591x_subdev_info tps_devs_e1198_skubit0_0[] = {
+ TPS_REG(VIO, vio),
+ TPS_REG(VDD_1, vdd1_skubit0_0),
+ TPS6591X_DEV_COMMON_CARDHU,
+#if defined(CONFIG_RTC_DRV_TPS6591x)
+ TPS_RTC_REG(),
+#endif
+};
+
+static struct tps6591x_subdev_info tps_devs_e1198_skubit0_1[] = {
+ TPS_REG(VIO, vio),
+ TPS_REG(VDD_1, vdd1_skubit0_1),
+ TPS6591X_DEV_COMMON_CARDHU,
#if defined(CONFIG_RTC_DRV_TPS6591x)
TPS_RTC_REG(),
#endif
@@ -316,27 +346,82 @@ static struct i2c_board_info __initdata cardhu_regulators[] = {
},
};
+/* TPS62361B DC-DC converter */
+static struct regulator_consumer_supply tps6236x_dcdc_supply[] = {
+ REGULATOR_SUPPLY("vdd_core", NULL),
+};
+
+static struct tps6236x_regulator_platform_data tps6236x_pdata = {
+ .reg_init_data = { \
+ .constraints = { \
+ .min_uV = 500000, \
+ .max_uV = 1770000, \
+ .valid_modes_mask = (REGULATOR_MODE_NORMAL | \
+ REGULATOR_MODE_STANDBY), \
+ .valid_ops_mask = (REGULATOR_CHANGE_MODE | \
+ REGULATOR_CHANGE_STATUS | \
+ REGULATOR_CHANGE_VOLTAGE), \
+ .always_on = 1, \
+ .boot_on = 1, \
+ .apply_uV = 0, \
+ }, \
+ .num_consumer_supplies = ARRAY_SIZE(tps6236x_dcdc_supply), \
+ .consumer_supplies = tps6236x_dcdc_supply, \
+ }, \
+ .internal_pd_enable = 0, \
+ .vsel = 3, \
+ .init_uV = -1, \
+ .init_apply = 0, \
+};
+
+static struct i2c_board_info __initdata tps6236x_boardinfo[] = {
+ {
+ I2C_BOARD_INFO("tps62361B", 0x60),
+ .platform_data = &tps6236x_pdata,
+ },
+};
+
int __init cardhu_regulator_init(void)
{
struct board_info board_info;
void __iomem *pmc = IO_ADDRESS(TEGRA_PMC_BASE);
u32 pmc_ctrl;
+
/* configure the power management controller to trigger PMU
* interrupts when low */
+
pmc_ctrl = readl(pmc + PMC_CTRL);
writel(pmc_ctrl | PMC_CTRL_INTR_LOW, pmc + PMC_CTRL);
tegra_get_board_info(&board_info);
if ((board_info.board_id == BOARD_E1198) ||
(board_info.board_id == BOARD_E1291)) {
- tps_platform.num_subdevs = ARRAY_SIZE(tps_devs_e1198);
- tps_platform.subdevs = tps_devs_e1198;
+ if ((board_info.sku & 1) == 1) {
+ tps_platform.num_subdevs =
+ ARRAY_SIZE(tps_devs_e1198_skubit0_1);
+ tps_platform.subdevs = tps_devs_e1198_skubit0_1;
+ } else {
+ tps_platform.num_subdevs =
+ ARRAY_SIZE(tps_devs_e1198_skubit0_0);
+ tps_platform.subdevs = tps_devs_e1198_skubit0_0;
+ }
} else {
- tps_platform.num_subdevs = ARRAY_SIZE(tps_devs_e118x);
- tps_platform.subdevs = tps_devs_e118x;
+ if ((board_info.sku & 1) == 1) {
+ tps_platform.num_subdevs = ARRAY_SIZE(tps_devs_e118x_skubit0_1);
+ tps_platform.subdevs = tps_devs_e118x_skubit0_1;
+ } else {
+ tps_platform.num_subdevs = ARRAY_SIZE(tps_devs_e118x_skubit0_0);
+ tps_platform.subdevs = tps_devs_e118x_skubit0_0;
+ }
}
i2c_register_board_info(4, cardhu_regulators, 1);
+
+ /* Resgister the TPS6236x for all boards whose sku bit 0 is set. */
+ if ((board_info.sku & 1) == 1) {
+ pr_info("Registering the device TPS62361B\n");
+ i2c_register_board_info(4, tps6236x_boardinfo, 1);
+ }
return 0;
}
@@ -583,7 +668,7 @@ static int disable_load_switch_rail(
}
/* common to all boards */
-GREG_INIT(0, en_5v_cp, en_5v_cp, NULL, TPS6591X_GPIO_GP0, false, 0, 0, 0, 0);
+GREG_INIT(0, en_5v_cp, en_5v_cp, NULL, TPS6591X_GPIO_GP0, false, 1, 0, 0, 0);
GREG_INIT(1, en_5v0, en_5v0, NULL, TPS6591X_GPIO_GP2, false, 0, 0, 0, 0);
GREG_INIT(2, en_ddr, en_ddr, NULL, TPS6591X_GPIO_GP6, false, 0, 0, 0, 0);
GREG_INIT(3, en_3v3_sys, en_3v3_sys, NULL, TPS6591X_GPIO_GP7, false, 0, 0, 0, 0);
@@ -813,6 +898,12 @@ int __init cardhu_suspend_init(void)
struct board_info board_info;
tegra_get_board_info(&board_info);
+
+ /* CORE_PWR_REQ to be high for all board whose sku bit 0 is set.
+ * This is require to enable the dc-dc converter tps62361x */
+ if ((board_info.sku & 1) == 1)
+ cardhu_suspend_data.corereq_high = true;
+
switch (board_info.board_id) {
case BOARD_E1291:
/* CORE_PWR_REQ to be high for E1291-A03 */