From dd92ab85c7ff84b241241a364af753817033d9e2 Mon Sep 17 00:00:00 2001 From: Chanwoo Choi Date: Thu, 12 Jul 2012 15:03:29 +0900 Subject: [PATCH] --- yaml --- r: 320498 b: refs/heads/master c: 45cd4fb28b43756afcd752ed1e8b3b836c1b1a2a h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/drivers/power/charger-manager.c | 15 +++++++++++++++ trunk/include/linux/power/charger-manager.h | 8 ++++++++ 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index f70ff1bb71e2..0a99041f0195 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: bee737bccb03ebd27f2d52706e9aed2fa2c8dcc4 +refs/heads/master: 45cd4fb28b43756afcd752ed1e8b3b836c1b1a2a diff --git a/trunk/drivers/power/charger-manager.c b/trunk/drivers/power/charger-manager.c index d1e99e7957d2..526e5c931294 100644 --- a/trunk/drivers/power/charger-manager.c +++ b/trunk/drivers/power/charger-manager.c @@ -1001,6 +1001,21 @@ static void charger_extcon_work(struct work_struct *work) { struct charger_cable *cable = container_of(work, struct charger_cable, wq); + int ret; + + if (cable->attached && cable->min_uA != 0 && cable->max_uA != 0) { + ret = regulator_set_current_limit(cable->charger->consumer, + cable->min_uA, cable->max_uA); + if (ret < 0) { + pr_err("Cannot set current limit of %s (%s)\n", + cable->charger->regulator_name, cable->name); + return; + } + + pr_info("Set current limit of %s : %duA ~ %duA\n", + cable->charger->regulator_name, + cable->min_uA, cable->max_uA); + } try_charger_enable(cable->cm, cable->attached); } diff --git a/trunk/include/linux/power/charger-manager.h b/trunk/include/linux/power/charger-manager.h index 6cb9fbc9a153..cd22029e32aa 100644 --- a/trunk/include/linux/power/charger-manager.h +++ b/trunk/include/linux/power/charger-manager.h @@ -94,6 +94,14 @@ struct charger_cable { bool attached; struct charger_regulator *charger; + + /* + * Set min/max current of regulator to protect over-current issue + * according to a kind of charger cable when cable is attached. + */ + int min_uA; + int max_uA; + struct charger_manager *cm; };