ab8500-bm: Charge only mode fixes for the ab9540
Fix for charging not getting enabled in charge only mode by external charger. Signed-off-by: Lee Jones <lee.jones@linaro.org>
此提交包含在:
@@ -26,6 +26,7 @@
|
||||
#include <linux/mfd/abx500.h>
|
||||
#include <linux/mfd/abx500/ux500_chargalg.h>
|
||||
#include <linux/mfd/abx500/ab8500-bm.h>
|
||||
#include <linux/notifier.h>
|
||||
|
||||
/* Watchdog kick interval */
|
||||
#define CHG_WD_INTERVAL (6 * HZ)
|
||||
@@ -243,6 +244,9 @@ struct abx500_chargalg {
|
||||
struct kobject chargalg_kobject;
|
||||
};
|
||||
|
||||
/*External charger prepare notifier*/
|
||||
BLOCKING_NOTIFIER_HEAD(charger_notifier_list);
|
||||
|
||||
/* Main battery properties */
|
||||
static enum power_supply_property abx500_chargalg_props[] = {
|
||||
POWER_SUPPLY_PROP_STATUS,
|
||||
@@ -503,6 +507,8 @@ static int abx500_chargalg_kick_watchdog(struct abx500_chargalg *di)
|
||||
static int abx500_chargalg_ac_en(struct abx500_chargalg *di, int enable,
|
||||
int vset, int iset)
|
||||
{
|
||||
static int abx500_chargalg_ex_ac_enable_toggle;
|
||||
|
||||
if (!di->ac_chg || !di->ac_chg->ops.enable)
|
||||
return -ENXIO;
|
||||
|
||||
@@ -515,6 +521,14 @@ static int abx500_chargalg_ac_en(struct abx500_chargalg *di, int enable,
|
||||
di->chg_info.ac_iset = iset;
|
||||
di->chg_info.ac_vset = vset;
|
||||
|
||||
/* Enable external charger */
|
||||
if (enable && di->ac_chg->external &&
|
||||
!abx500_chargalg_ex_ac_enable_toggle) {
|
||||
blocking_notifier_call_chain(&charger_notifier_list,
|
||||
0, di->dev);
|
||||
abx500_chargalg_ex_ac_enable_toggle++;
|
||||
}
|
||||
|
||||
return di->ac_chg->ops.enable(di->ac_chg, enable, vset, iset);
|
||||
}
|
||||
|
||||
|
新增問題並參考
封鎖使用者