static void ibat_mode_set(enum bcl_device_mode mode) { int ret = 0; if (mode == BCL_DEVICE_ENABLED) { gbcl->btm_mode = BCL_VPH_MONITOR_MODE; ret = bcl_config_vph_adc(gbcl, BCL_LOW_THRESHOLD_TYPE); if (ret) { pr_err("Vph config error. ret:%d\n", ret); gbcl->bcl_mode = BCL_DEVICE_DISABLED; gbcl->btm_mode = BCL_MONITOR_DISABLED; return; } } else { switch (gbcl->btm_mode) { case BCL_IBAT_MONITOR_MODE: case BCL_IBAT_HIGH_LOAD_MODE: ret = ibat_disable(); if (ret) return; ret = vph_disable(); if (ret) return; break; case BCL_VPH_MONITOR_MODE: ret = vph_disable(); if (ret) return; break; case BCL_MONITOR_DISABLED: default: break; } gbcl->btm_mode = BCL_MONITOR_DISABLED; } return; }
static int bcl_suspend(struct device *dev) { int ret = 0; struct bcl_context *bcl = dev_get_drvdata(dev); if (bcl->bcl_monitor_type == BCL_IBAT_MONITOR_TYPE && bcl->bcl_mode == BCL_DEVICE_ENABLED) { switch (bcl->btm_mode) { case BCL_IBAT_MONITOR_MODE: case BCL_IBAT_HIGH_LOAD_MODE: ret = ibat_disable(); if (!ret) vph_disable(); break; case BCL_VPH_MONITOR_MODE: vph_disable(); break; case BCL_MONITOR_DISABLED: default: break; } } return 0; }
/* * Set BCL mode */ static void bcl_mode_set(enum bcl_device_mode mode) { int ret = 0; if (!gbcl) return; gbcl->bcl_mode = mode; if (BCL_DEVICE_DISABLED == mode) { vph_disable(); } else { mutex_lock(&bcl_notify_mutex); gbcl->btm_mode = BCL_VPH_MONITOR_MODE; mutex_unlock(&bcl_notify_mutex); ret = bcl_config_vph_adc(gbcl, BCL_LOW_THRESHOLD_TYPE); if (ret) { pr_err("Vph config error. ret:%d\n", ret); return; } } return; }