summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormattis fjallstrom <mattis@acm.org>2015-03-23 20:05:19 -0700
committermattis fjallstrom <mattis@acm.org>2015-03-23 20:05:19 -0700
commit89f6f0211edb9e6c4e5ecafbf1c3581134117e53 (patch)
treeddd68839202d7f41f9d0fcc3a9e4b5f4c525df57
parent6e1e9e095f3ef6c20cd9b360772e1b4f5890c7c3 (diff)
downloadolio-linux-3.10-89f6f0211edb9e6c4e5ecafbf1c3581134117e53.tar.xz
olio-linux-3.10-89f6f0211edb9e6c4e5ecafbf1c3581134117e53.zip
Enabling powering off power rails, power off PMIC.
Change-Id: I8b513972cdd17731e46983944a6bcd6d3fe8b57c
-rw-r--r--arch/arm/mach-omap2/board-omap3h1.c63
-rw-r--r--drivers/leds/leds-lm3530.c19
-rw-r--r--drivers/regulator/tps65910-regulator.c2
3 files changed, 57 insertions, 27 deletions
diff --git a/arch/arm/mach-omap2/board-omap3h1.c b/arch/arm/mach-omap2/board-omap3h1.c
index d0ac1d16311..5505b893ddc 100644
--- a/arch/arm/mach-omap2/board-omap3h1.c
+++ b/arch/arm/mach-omap2/board-omap3h1.c
@@ -171,8 +171,8 @@ static struct lm3530_platform_data omap3h1_backlight_platform_data = {
//.pwm_pol_hi = true,
//.als_avrg_time = LM3530_ALS_AVRG_TIME_512ms,
.brt_ramp_law = 0,
- .brt_ramp_fall = LM3530_RAMP_TIME_1s,
- .brt_ramp_rise = LM3530_RAMP_TIME_1s,
+ .brt_ramp_fall = LM3530_RAMP_TIME_130ms, /* LM3530_RAMP_TIME_1s, */
+ .brt_ramp_rise = LM3530_RAMP_TIME_130ms, /* LM3530_RAMP_TIME_1s, */
//.als1_resistor_sel = LM3530_ALS_IMPD_13_53kOhm,
//.als2_resistor_sel = LM3530_ALS_IMPD_Z,
//.als_vmin = 730, /* mV */
@@ -232,7 +232,9 @@ static struct platform_device nop_phy_device = {
*/
static struct regulator_init_data omap3h1_vbat_data = {
- .constraints.always_on = true,
+ .constraints.always_on = true,
+ .constraints.valid_modes_mask = REGULATOR_MODE_NORMAL | REGULATOR_MODE_STANDBY,
+ .constraints.valid_ops_mask = REGULATOR_CHANGE_MODE | REGULATOR_CHANGE_STATUS,
};
static struct fixed_voltage_config omap3h1_vbat_pdata = {
@@ -255,7 +257,8 @@ static struct platform_device omap3h1_vbat = {
static struct regulator_init_data tps65910_dummy = {
.supply_regulator = "VBAT",
- .constraints.always_on = true,
+ .constraints.always_on = false,
+ /* .constraints.valid_ops_mask = REGULATOR_CHANGE_STATUS, */
};
/* --------------------------------------------------------------------------- */
@@ -270,7 +273,7 @@ static struct regulator_init_data tps65910_touch3 = {
.min_uV = 3300000,
.max_uV = 3300000,
.valid_modes_mask = REGULATOR_MODE_NORMAL,
- .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE,
+ .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_STATUS,
.always_on = true,
.apply_uV = true,
},
@@ -289,8 +292,10 @@ static struct regulator_init_data tps65910_vibrator = {
.constraints = {
.min_uV = 3300000,
.max_uV = 3300000,
- .valid_modes_mask = REGULATOR_MODE_NORMAL,
- .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE,
+ .valid_modes_mask = REGULATOR_MODE_NORMAL | REGULATOR_MODE_STANDBY,
+ .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
+ REGULATOR_CHANGE_MODE |
+ REGULATOR_CHANGE_STATUS,
.always_on = true,
.apply_uV = true,
},
@@ -308,8 +313,10 @@ static struct regulator_init_data tps65910_3v3 = {
.constraints = {
.min_uV = 3300000,
.max_uV = 3300000,
- .valid_modes_mask = REGULATOR_MODE_NORMAL,
- .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE,
+ .valid_modes_mask = REGULATOR_MODE_NORMAL | REGULATOR_MODE_STANDBY,
+ .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
+ REGULATOR_CHANGE_MODE |
+ REGULATOR_CHANGE_STATUS,
.always_on = true,
.apply_uV = true,
},
@@ -317,6 +324,9 @@ static struct regulator_init_data tps65910_3v3 = {
/* --------------------------------------------------------------------------- */
+/* This regulator must not be allowed to change status, doing so causes
+ * reboots to fail. Not sure why that is. --mfj
+ */
static struct regulator_consumer_supply tps65910_1v8_supply[] = {
REGULATOR_SUPPLY("vdds_dsi", "omapdss"),
@@ -330,7 +340,7 @@ static struct regulator_init_data tps65910_1v8 = {
.max_uV = 1800000,
.valid_modes_mask = REGULATOR_MODE_NORMAL,
.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE,
- .always_on = true,
+ .always_on = false,
.apply_uV = true,
},
.num_consumer_supplies = ARRAY_SIZE(tps65910_1v8_supply),
@@ -347,9 +357,9 @@ static struct regulator_init_data tps65910_vpll = {
.constraints = {
.min_uV = 1800000,
.max_uV = 1800000,
- .valid_modes_mask = REGULATOR_MODE_NORMAL,
- .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE,
- .always_on = true,
+ .valid_modes_mask = REGULATOR_MODE_NORMAL | REGULATOR_MODE_STANDBY,
+ .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_MODE | REGULATOR_CHANGE_STATUS,
+ .always_on = false,
.apply_uV = true,
},
.num_consumer_supplies = ARRAY_SIZE(tps65910_vpll_supply),
@@ -368,9 +378,9 @@ static struct regulator_init_data tps65910_touch = {
.constraints = {
.min_uV = 1800000,
.max_uV = 1800000,
- .valid_modes_mask = REGULATOR_MODE_NORMAL,
- .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE,
- .always_on = true,
+ .valid_modes_mask = REGULATOR_MODE_NORMAL | REGULATOR_MODE_STANDBY,
+ .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_MODE | REGULATOR_CHANGE_STATUS,
+ .always_on = false,
.apply_uV = true,
},
.num_consumer_supplies = ARRAY_SIZE(tps65910_touch_supply),
@@ -389,9 +399,9 @@ static struct regulator_init_data tps65910_accel = {
.constraints = {
.min_uV = 1800000,
.max_uV = 1800000,
- .valid_modes_mask = REGULATOR_MODE_NORMAL,
- .valid_ops_mask = REGULATOR_CHANGE_MODE | REGULATOR_CHANGE_STATUS,
- .always_on = true,
+ .valid_modes_mask = REGULATOR_MODE_NORMAL | REGULATOR_MODE_STANDBY,
+ .valid_ops_mask = REGULATOR_CHANGE_MODE | REGULATOR_CHANGE_MODE | REGULATOR_CHANGE_STATUS,
+ .always_on = false,
.apply_uV = true,
},
.num_consumer_supplies = ARRAY_SIZE(tps65910_accel_supply),
@@ -410,9 +420,9 @@ static struct regulator_init_data tps65910_vdd1 = {
.name = "vdd_mpu",
.min_uV = 900000,
.max_uV = 1350000,
- .valid_modes_mask = REGULATOR_MODE_NORMAL,
- .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE,
- //.always_on = 1,
+ .valid_modes_mask = REGULATOR_MODE_NORMAL | REGULATOR_MODE_STANDBY,
+ .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_MODE | REGULATOR_CHANGE_STATUS,
+ .always_on = false,
},
.num_consumer_supplies = ARRAY_SIZE(tps65910_vdd1_supply),
.consumer_supplies = tps65910_vdd1_supply,
@@ -430,9 +440,9 @@ static struct regulator_init_data tps65910_vdd2 = {
.name = "vdd_core",
.min_uV = 900000,
.max_uV = 1200000,
- .valid_modes_mask = REGULATOR_MODE_NORMAL,
- .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE,
- //.always_on = 1,
+ .valid_modes_mask = REGULATOR_MODE_NORMAL | REGULATOR_MODE_STANDBY,
+ .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_MODE | REGULATOR_CHANGE_STATUS,
+ .always_on = false,
},
.num_consumer_supplies = ARRAY_SIZE(tps65910_vdd2_supply),
.consumer_supplies = tps65910_vdd2_supply,
@@ -464,7 +474,8 @@ static struct tps65910_board omap3h1_tps65910_pdata = {
.tps65910_pmic_init_data[TPS65910_REG_VDAC] = &tps65910_dummy,
.tps65910_pmic_init_data[TPS65910_REG_VAUX1] = &tps65910_dummy, /* 2v85 */
.tps65910_pmic_init_data[TPS65910_REG_VDD3] = &tps65910_dummy,
-
+
+ .pm_off = true,
};
static struct i2c_board_info __initdata omap3h1_i2c1_board_info[] = {
diff --git a/drivers/leds/leds-lm3530.c b/drivers/leds/leds-lm3530.c
index a036a19040f..c3182fae12e 100644
--- a/drivers/leds/leds-lm3530.c
+++ b/drivers/leds/leds-lm3530.c
@@ -486,6 +486,24 @@ static int lm3530_remove(struct i2c_client *client)
return 0;
}
+
+/***************************************************************************
+ * lm3530_shutdown - make sure brightness is set to 0
+ *
+ * The PMIC of the Olio H1 can't provide the power needed by the lm3530,
+ * in other words, it does it's own power management. This means we need
+ * to shut off power usage. Brightness of 0 should do this.
+ */
+
+static void lm3530_shutdown(struct i2c_client *client)
+{
+ struct lm3530_data *drvdata = i2c_get_clientdata(client);
+
+ lm3530_brightness_set(&(drvdata->led_dev), LED_OFF);
+
+ return;
+}
+
static const struct i2c_device_id lm3530_id[] = {
{LM3530_NAME, 0},
{}
@@ -495,6 +513,7 @@ MODULE_DEVICE_TABLE(i2c, lm3530_id);
static struct i2c_driver lm3530_i2c_driver = {
.probe = lm3530_probe,
.remove = lm3530_remove,
+ .shutdown = lm3530_shutdown,
.id_table = lm3530_id,
.driver = {
.name = LM3530_NAME,
diff --git a/drivers/regulator/tps65910-regulator.c b/drivers/regulator/tps65910-regulator.c
index 45c16447744..035eb750e28 100644
--- a/drivers/regulator/tps65910-regulator.c
+++ b/drivers/regulator/tps65910-regulator.c
@@ -906,7 +906,7 @@ static int tps65910_set_ext_sleep_config(struct tps65910_reg *pmic,
}
ret = tps65910_reg_write(pmic->mfd, sr_reg_add, 0);
if (ret < 0) {
- dev_err(mfd->dev, "Error in settting sr register\n");
+ dev_err(mfd->dev, "Error in setting sr register\n");
return ret;
}
}