power: rk818-charger: fix usb charger undetected
authorWilliam Wu <william.wu@rock-chips.com>
Fri, 7 Jul 2017 01:53:00 +0000 (09:53 +0800)
committerHuang, Tao <huangtao@rock-chips.com>
Fri, 7 Jul 2017 11:17:12 +0000 (19:17 +0800)
On some platforms (e.g. rk3399), we use extcon notify
framework to receive USB charger notifier from USB PHY
driver. Generally, the USB PHY driver uses a work to check
vbus status and the USB charger type every 2 seconds,
this polling mechanism may cause USB charger undetected
if we plug in/out USB charger quickly.

A typical error case is:
1. Plug in an USB DCP Adapter.
   - USB PHY driver sends notifier to rk818-charger
2. Plug out the USB Adapter, and plug in again immediately
   - rk818 detects plug out irq, and turns off charging
   - USB PHY driver schedule work doesn't detect the plug
     out/in operations, and doesn't send usb charger notifier

Fortunately, rk818 can detect plug in irq, so let's check
the USB charger type in rk818 plug in irq handler.

Change-Id: Iee45769c8a98c709da2dbfa514198ab0f648fd20
Signed-off-by: William Wu <william.wu@rock-chips.com>
drivers/power/rk818_charger.c

index d785f89eb2680df59482aa25072e59a8adccb9b0..bd5b03e1f6490b8c2fbf5a3041538f98eaa8ea3c 100644 (file)
@@ -926,6 +926,9 @@ static void rk818_cg_irq_delay_work(struct work_struct *work)
                CG_INFO("pmic: plug in\n");
                cg->plugin_trigger = 0;
                rk_send_wakeup_key();
+               if (cg->pdata->extcon)
+                       queue_delayed_work(cg->usb_charger_wq, &cg->usb_work,
+                                          msecs_to_jiffies(10));
        } else if (cg->plugout_trigger) {
                CG_INFO("pmic: plug out\n");
                cg->plugout_trigger = 0;