From 35d672ec16949cb1408d163705a8587ee62d561c Mon Sep 17 00:00:00 2001 From: Ryan Lattrel Date: Wed, 4 Dec 2019 14:02:59 -0600 Subject: [PATCH] drivers: max170xx: reset on factory image If we are a factory image, reset the fuel gauge in the same way we would if in factory mode. Change-Id: Iaab95a015e3893228a7b56ccc2aa77ea3a757213 Signed-off-by: Ryan Lattrel Reviewed-on: https://gerrit.mot.com/1466055 SLTApproved: Slta Waiver SME-Granted: SME Approvals Granted Tested-by: Jira Key Reviewed-by: Ling Jin Submit-Approved: Jira Key --- drivers/power/max170xx/max170xx_battery_mmi.c | 36 ++++++++++++++++--- 1 file changed, 31 insertions(+), 5 deletions(-) diff --git a/drivers/power/max170xx/max170xx_battery_mmi.c b/drivers/power/max170xx/max170xx_battery_mmi.c index dd1be214201e..db2de6f94087 100644 --- a/drivers/power/max170xx/max170xx_battery_mmi.c +++ b/drivers/power/max170xx/max170xx_battery_mmi.c @@ -149,6 +149,7 @@ struct max17042_chip { int charge_full_des; int taper_reached; bool factory_mode; + bool is_factory_image; char fg_report_str[FUEL_GAUGE_REPORT_SIZE]; bool fullcap_report_sent; int last_fullcap; @@ -2277,14 +2278,38 @@ iterm_fail: return; } -static bool max17042_mmi_factory(void) +enum { + MMI_FACTORY_MODE, + MMI_FACTORY_BUILD, +}; + +static bool mmi_factory_check(int type) { struct device_node *np = of_find_node_by_path("/chosen"); bool factory = false; + const char *bootargs = NULL; + char *bl_version = NULL; - if (np) - factory = of_property_read_bool(np, "mmi,factory-cable"); + if (!np) + return factory; + switch (type) { + case MMI_FACTORY_MODE: + factory = of_property_read_bool(np, + "mmi,factory-cable"); + break; + case MMI_FACTORY_BUILD: + if (!of_property_read_string(np, + "bootargs", &bootargs)) { + bl_version = strstr(bootargs, + "androidboot.bootloader="); + if (bl_version && strstr(bl_version, "factory")) + factory = true; + } + break; + default: + factory = false; + } of_node_put(np); return factory; @@ -2463,7 +2488,8 @@ static int max17042_probe(struct i2c_client *client, if (ret) dev_err(&client->dev, "failed: attr create\n"); - chip->factory_mode = max17042_mmi_factory(); + chip->factory_mode = mmi_factory_check(MMI_FACTORY_MODE); + chip->is_factory_image = mmi_factory_check(MMI_FACTORY_BUILD); if (chip->factory_mode) dev_info(&client->dev, "max17042: Factory Mode\n"); @@ -2526,7 +2552,7 @@ static int max17042_probe(struct i2c_client *client, INIT_WORK(&chip->work, max17042_init_worker); INIT_DELAYED_WORK(&chip->thread_work, max17042_thread_worker); - if (chip->factory_mode) { + if (chip->factory_mode || chip->is_factory_image) { ret = regmap_read(chip->regmap, MAX17042_OCVInternal, &val); if (ret < 0) val = -EINVAL;