summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLaxman Dewangan <ldewangan@nvidia.com>2013-12-24 12:15:11 +0530
committerLaxman Dewangan <ldewangan@nvidia.com>2014-01-08 21:32:02 -0800
commit09cd706fecb9631a563b293d5fe6e19889eea95f (patch)
tree05ea0d6d179200a4d09aa98db8fc2b8fdd66d67e
parentac3459338d775ffdf682cabb129dfefee57a9d36 (diff)
mfd: as3722: disable auto power on when AC OK
On ams AS3722, power on when AC OK is enabled by default. Making this option as disable by default and enable only when platform need this explicitly. Change-Id: I103d62ab9170c96b00ce8b58235afb8d24ba5e63 Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com> Reviewed-on: http://git-master/r/349290 Reviewed-by: Bibek Basu <bbasu@nvidia.com> Tested-by: Bibek Basu <bbasu@nvidia.com>
-rw-r--r--drivers/mfd/as3722.c13
-rw-r--r--include/linux/mfd/as3722-plat.h1
-rw-r--r--include/linux/mfd/as3722.h3
3 files changed, 17 insertions, 0 deletions
diff --git a/drivers/mfd/as3722.c b/drivers/mfd/as3722.c
index 46329ebb6dc0..9dc4554292ae 100644
--- a/drivers/mfd/as3722.c
+++ b/drivers/mfd/as3722.c
@@ -368,6 +368,8 @@ static int as3722_i2c_of_probe(struct i2c_client *i2c,
"ams,enable-internal-int-pullup");
as3722->en_intern_i2c_pullup = of_property_read_bool(np,
"ams,enable-internal-i2c-pullup");
+ as3722->en_ac_ok_pwr_on = of_property_read_bool(np,
+ "ams,enable-ac-ok-power-on");
as3722->irq_flags = irqd_get_trigger_type(irq_data);
as3722->irq_base = -1;
of_property_read_u32(np, "ams,major-rev", &as3722->major_rev);
@@ -388,6 +390,7 @@ static int as3722_i2c_non_of_probe(struct i2c_client *i2c,
as3722->irq_base = pdata->irq_base;
as3722->en_intern_i2c_pullup = pdata->use_internal_i2c_pullup;
as3722->en_intern_int_pullup = pdata->use_internal_int_pullup;
+ as3722->en_ac_ok_pwr_on = pdata->enable_ac_ok_power_on;
as3722->major_rev = pdata->major_rev;
as3722->minor_rev = pdata->minor_rev;
return 0;
@@ -399,6 +402,7 @@ static int as3722_i2c_probe(struct i2c_client *i2c,
struct as3722 *as3722;
unsigned long irq_flags;
int ret;
+ u8 val = 0;
as3722 = devm_kzalloc(&i2c->dev, sizeof(struct as3722), GFP_KERNEL);
if (!as3722)
@@ -439,6 +443,15 @@ static int as3722_i2c_probe(struct i2c_client *i2c,
if (ret < 0)
goto scrub;
+ if (as3722->en_ac_ok_pwr_on)
+ val = AS3722_CTRL_SEQ1_AC_OK_PWR_ON;
+ ret = as3722_update_bits(as3722, AS3722_CTRL_SEQU1_REG,
+ AS3722_CTRL_SEQ1_AC_OK_PWR_ON, val);
+ if (ret < 0) {
+ dev_err(as3722->dev, "CTRL_SEQ1 update failed: %d\n", ret);
+ goto scrub;
+ }
+
ret = mfd_add_devices(&i2c->dev, -1, as3722_devs,
ARRAY_SIZE(as3722_devs), NULL, 0,
regmap_irq_get_domain(as3722->irq_data));
diff --git a/include/linux/mfd/as3722-plat.h b/include/linux/mfd/as3722-plat.h
index 7a50838cbb3c..e486a922ea9b 100644
--- a/include/linux/mfd/as3722-plat.h
+++ b/include/linux/mfd/as3722-plat.h
@@ -147,6 +147,7 @@ struct as3722_platform_data {
int irq_type;
int use_internal_int_pullup;
int use_internal_i2c_pullup;
+ bool enable_ac_ok_power_on;
int num_gpio_cfgs;
bool use_power_off;
bool use_power_reset;
diff --git a/include/linux/mfd/as3722.h b/include/linux/mfd/as3722.h
index ad51056522f4..d5f7d8ba5c34 100644
--- a/include/linux/mfd/as3722.h
+++ b/include/linux/mfd/as3722.h
@@ -359,6 +359,8 @@
#define AS3722_ADC1_INTEVAL_SCAN_MASK BIT(6)
#define AS3722_ADC1_CONVERSION_START_MASK BIT(7)
+#define AS3722_CTRL_SEQ1_AC_OK_PWR_ON BIT(0)
+
/* Interrupt IDs */
enum as3722_irq {
AS3722_IRQ_LID,
@@ -404,6 +406,7 @@ struct as3722 {
int irq_base;
bool en_intern_int_pullup;
bool en_intern_i2c_pullup;
+ bool en_ac_ok_pwr_on;
struct regmap_irq_chip_data *irq_data;
u32 major_rev;
u32 minor_rev;