pm2301-charger: Wake device on register access
[linux-2.6-block.git] / drivers / power / pm2301_charger.c
index ac03f9e247d160ceeb3c57c81406788ae4d6fe73..a1fc37eca334e23a57bc78d560852a9ba5415954 100644 (file)
@@ -128,13 +128,9 @@ static void clear_lpn_pin(struct pm2xxx_charger *pm2)
 static int pm2xxx_reg_read(struct pm2xxx_charger *pm2, int reg, u8 *val)
 {
        int ret;
-       /*
-        * When AC adaptor is unplugged, the host
-        * must put LPN high to be able to
-        * communicate by I2C with PM2301
-        * and receive I2C "acknowledge" from PM2301.
-        */
-       mutex_lock(&pm2->lock);
+
+       /* wake up the device */
+       pm_runtime_get_sync(pm2->dev);
 
        ret = i2c_smbus_read_i2c_block_data(pm2->config.pm2xxx_i2c, reg,
                                1, val);
@@ -142,7 +138,6 @@ static int pm2xxx_reg_read(struct pm2xxx_charger *pm2, int reg, u8 *val)
                dev_err(pm2->dev, "Error reading register at 0x%x\n", reg);
        else
                ret = 0;
-       mutex_unlock(&pm2->lock);
 
        return ret;
 }
@@ -150,13 +145,9 @@ static int pm2xxx_reg_read(struct pm2xxx_charger *pm2, int reg, u8 *val)
 static int pm2xxx_reg_write(struct pm2xxx_charger *pm2, int reg, u8 val)
 {
        int ret;
-       /*
-        * When AC adaptor is unplugged, the host
-        * must put LPN high to be able to
-        * communicate by I2C with PM2301
-        * and receive I2C "acknowledge" from PM2301.
-        */
-       mutex_lock(&pm2->lock);
+
+       /* wake up the device */
+       pm_runtime_get_sync(pm2->dev);
 
        ret = i2c_smbus_write_i2c_block_data(pm2->config.pm2xxx_i2c, reg,
                                1, &val);
@@ -164,7 +155,6 @@ static int pm2xxx_reg_write(struct pm2xxx_charger *pm2, int reg, u8 val)
                dev_err(pm2->dev, "Error writing register at 0x%x\n", reg);
        else
                ret = 0;
-       mutex_unlock(&pm2->lock);
 
        return ret;
 }