From: William Wu Date: Fri, 7 Jul 2017 01:53:00 +0000 (+0800) Subject: power: rk818-charger: fix usb charger undetected X-Git-Tag: release-20171130_firefly~4^2~246 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=f7169a90bc441107240c042440391310dd1b2ba1;p=firefly-linux-kernel-4.4.55.git power: rk818-charger: fix usb charger undetected 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 --- diff --git a/drivers/power/rk818_charger.c b/drivers/power/rk818_charger.c index d785f89eb268..bd5b03e1f649 100644 --- a/drivers/power/rk818_charger.c +++ b/drivers/power/rk818_charger.c @@ -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;