From 19811209d1b47593eef530439c8016de9180a3fc Mon Sep 17 00:00:00 2001 From: Yonghua Yan Date: Sat, 13 Jul 2019 13:42:13 +0800 Subject: [PATCH] power: check the factory image from bootarg in dts Check the factory image in bootarg in dts so that it can make decision the first time when the driver is loaded making charging limitation policy take effect immediately. Change-Id: I3eb32d3cd252ad9abffab70aa249b41925f325e2 Signed-off-by: Yonghua Yan Reviewed-on: https://gerrit.mot.com/1385578 SLTApproved: Slta Waiver SME-Granted: SME Approvals Granted Tested-by: Jira Key Reviewed-by: Haijian Ma Reviewed-by: Jianqi Yang Submit-Approved: Jira Key --- .../qpnp-smbcharger-mmi/qpnp-smbcharger-mmi.c | 35 ++++++++++++++++--- 1 file changed, 30 insertions(+), 5 deletions(-) diff --git a/drivers/power/qpnp-smbcharger-mmi/qpnp-smbcharger-mmi.c b/drivers/power/qpnp-smbcharger-mmi/qpnp-smbcharger-mmi.c index 9223f0201628..d38094500aa6 100644 --- a/drivers/power/qpnp-smbcharger-mmi/qpnp-smbcharger-mmi.c +++ b/drivers/power/qpnp-smbcharger-mmi/qpnp-smbcharger-mmi.c @@ -25,6 +25,7 @@ #include #include #include +#include #define mmi_err(chg, fmt, ...) \ do { \ @@ -1193,14 +1194,38 @@ static DEVICE_ATTR(force_chg_itrick, 0664, force_chg_itrick_show, force_chg_itrick_store); -static bool mmi_factory_check(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; @@ -3730,8 +3755,8 @@ static int smb_mmi_probe(struct platform_device *pdev) mmi_err(chip, "Could not set HVDCP pulse count max\n"); } - chip->factory_mode = mmi_factory_check(); - chip->is_factory_image = false; + chip->factory_mode = mmi_factory_check(MMI_FACTORY_MODE); + chip->is_factory_image = mmi_factory_check(MMI_FACTORY_BUILD); chip->charging_limit_modes = CHARGING_LIMIT_UNKNOWN; if (chip->dc_cl_ma >= 0) {