power: pm8921-charger: do not open OVP on USB suspend
When the usb_suspend bit is set and an the CHG_GONE
interrupt is triggered the ovp fets are opened to
enforce a usb unplug detection.
Fix this by checking the CHG_USB_SUSPEND bit and do not
open the USB OVP FET.
Change-Id: Ibec1908c959f08fb531e43c26b61e1c455b9e6a7
Signed-off-by: David Keitel <dkeitel@codeaurora.org>
diff --git a/drivers/power/pm8921-charger.c b/drivers/power/pm8921-charger.c
index 8f666d7..3223e6e 100644
--- a/drivers/power/pm8921-charger.c
+++ b/drivers/power/pm8921-charger.c
@@ -2326,15 +2326,23 @@
static irqreturn_t chg_gone_irq_handler(int irq, void *data)
{
struct pm8921_chg_chip *chip = data;
- int chg_gone, usb_chg_plugged_in;
+ u8 reg;
+ int rc, chg_gone, usb_chg_plugged_in;
usb_chg_plugged_in = is_usb_chg_plugged_in(chip);
chg_gone = pm_chg_get_rt_status(chip, CHG_GONE_IRQ);
pr_debug("chg_gone=%d, usb_valid = %d\n", chg_gone, usb_chg_plugged_in);
+ pr_debug("Chg gone fsm_state=%d\n", pm_chg_get_fsm_state(data));
+
+ rc = pm8xxx_readb(chip->dev->parent, CHG_CNTRL_3, ®);
+ if (rc)
+ pr_err("Failed to read CHG_CNTRL_3 rc=%d\n", rc);
+
+ if (reg & CHG_USB_SUSPEND_BIT)
+ return IRQ_HANDLED;
schedule_work(&chip->unplug_ovp_fet_open_work);
- pr_debug("Chg gone fsm_state=%d\n", pm_chg_get_fsm_state(data));
power_supply_changed(&chip->batt_psy);
power_supply_changed(&chip->usb_psy);
return IRQ_HANDLED;