aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRupesh Kumar <rupesh.kumar@stericsson.com>2012-12-05 03:44:13 -0500
committerLee Jones <lee.jones@linaro.org>2013-03-06 23:35:57 -0500
commitb64f51c4adde8972afac778a63a19a30c6d5f4b0 (patch)
tree59a506e39c40e9387748fdb56cab439b64ab9da3
parent7a2cf9bacf6c5f3119a9100f103dc46a1f648fbb (diff)
pm2301-charger: Wake device on register access
When USB Dedicated or Standard host chargers are plugged into the device, chargealg attempts to disable the PM2301 AC charger, However, disabling PM2301 was failing because of it being in runtime suepend mode & LPN pin being low. Signed-off-by: Rupesh Kumar <rupesh.kumar@stericsson.com> Signed-off-by: Lee Jones <lee.jones@linaro.org> Reviewed-by: Marcus COOPER <marcus.xm.cooper@stericsson.com> Reviewed-by: Philippe LANGLAIS <philippe.langlais@stericsson.com>
-rw-r--r--drivers/power/pm2301_charger.c22
1 files changed, 6 insertions, 16 deletions
diff --git a/drivers/power/pm2301_charger.c b/drivers/power/pm2301_charger.c
index ac03f9e247d1..a1fc37eca334 100644
--- a/drivers/power/pm2301_charger.c
+++ b/drivers/power/pm2301_charger.c
@@ -128,13 +128,9 @@ static void clear_lpn_pin(struct pm2xxx_charger *pm2)
128static int pm2xxx_reg_read(struct pm2xxx_charger *pm2, int reg, u8 *val) 128static int pm2xxx_reg_read(struct pm2xxx_charger *pm2, int reg, u8 *val)
129{ 129{
130 int ret; 130 int ret;
131 /* 131
132 * When AC adaptor is unplugged, the host 132 /* wake up the device */
133 * must put LPN high to be able to 133 pm_runtime_get_sync(pm2->dev);
134 * communicate by I2C with PM2301
135 * and receive I2C "acknowledge" from PM2301.
136 */
137 mutex_lock(&pm2->lock);
138 134
139 ret = i2c_smbus_read_i2c_block_data(pm2->config.pm2xxx_i2c, reg, 135 ret = i2c_smbus_read_i2c_block_data(pm2->config.pm2xxx_i2c, reg,
140 1, val); 136 1, val);
@@ -142,7 +138,6 @@ static int pm2xxx_reg_read(struct pm2xxx_charger *pm2, int reg, u8 *val)
142 dev_err(pm2->dev, "Error reading register at 0x%x\n", reg); 138 dev_err(pm2->dev, "Error reading register at 0x%x\n", reg);
143 else 139 else
144 ret = 0; 140 ret = 0;
145 mutex_unlock(&pm2->lock);
146 141
147 return ret; 142 return ret;
148} 143}
@@ -150,13 +145,9 @@ static int pm2xxx_reg_read(struct pm2xxx_charger *pm2, int reg, u8 *val)
150static int pm2xxx_reg_write(struct pm2xxx_charger *pm2, int reg, u8 val) 145static int pm2xxx_reg_write(struct pm2xxx_charger *pm2, int reg, u8 val)
151{ 146{
152 int ret; 147 int ret;
153 /* 148
154 * When AC adaptor is unplugged, the host 149 /* wake up the device */
155 * must put LPN high to be able to 150 pm_runtime_get_sync(pm2->dev);
156 * communicate by I2C with PM2301
157 * and receive I2C "acknowledge" from PM2301.
158 */
159 mutex_lock(&pm2->lock);
160 151
161 ret = i2c_smbus_write_i2c_block_data(pm2->config.pm2xxx_i2c, reg, 152 ret = i2c_smbus_write_i2c_block_data(pm2->config.pm2xxx_i2c, reg,
162 1, &val); 153 1, &val);
@@ -164,7 +155,6 @@ static int pm2xxx_reg_write(struct pm2xxx_charger *pm2, int reg, u8 val)
164 dev_err(pm2->dev, "Error writing register at 0x%x\n", reg); 155 dev_err(pm2->dev, "Error writing register at 0x%x\n", reg);
165 else 156 else
166 ret = 0; 157 ret = 0;
167 mutex_unlock(&pm2->lock);
168 158
169 return ret; 159 return ret;
170} 160}