summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2017-01-18 14:23:17 -0800
committerGerrit - the friendly Code Review server <code-review@localhost>2017-01-18 14:23:17 -0800
commit89b611d0f0b41e04cb41e5335eb7f81c65d25f7b (patch)
treec80b6a825cceec2f7439d69b3790315707add8e5
parented5ce44f85f2cd6cbf9caf111240257451995f7a (diff)
parentb4fe7907b019cc313d3fcbc72c74e96f0cd2e797 (diff)
Merge "qcom-charger: smb2: suspend USB path for fake battery or debug board"
-rw-r--r--drivers/power/supply/qcom/qpnp-fg-gen3.c7
-rw-r--r--drivers/power/supply/qcom/qpnp-smb2.c3
-rw-r--r--drivers/power/supply/qcom/smb-lib.c26
-rw-r--r--drivers/power/supply/qcom/smb-lib.h2
4 files changed, 36 insertions, 2 deletions
diff --git a/drivers/power/supply/qcom/qpnp-fg-gen3.c b/drivers/power/supply/qcom/qpnp-fg-gen3.c
index 8523efa1a4ab..a441ff310e9f 100644
--- a/drivers/power/supply/qcom/qpnp-fg-gen3.c
+++ b/drivers/power/supply/qcom/qpnp-fg-gen3.c
@@ -2543,6 +2543,9 @@ static int fg_psy_get_property(struct power_supply *psy,
case POWER_SUPPLY_PROP_SOC_REPORTING_READY:
pval->intval = chip->soc_reporting_ready;
break;
+ case POWER_SUPPLY_PROP_DEBUG_BATTERY:
+ pval->intval = is_debug_batt_id(chip);
+ break;
default:
pr_err("unsupported property %d\n", psp);
rc = -EINVAL;
@@ -2641,6 +2644,7 @@ static enum power_supply_property fg_psy_props[] = {
POWER_SUPPLY_PROP_TIME_TO_FULL_AVG,
POWER_SUPPLY_PROP_TIME_TO_EMPTY_AVG,
POWER_SUPPLY_PROP_SOC_REPORTING_READY,
+ POWER_SUPPLY_PROP_DEBUG_BATTERY,
};
static const struct power_supply_desc fg_psy_desc = {
@@ -2977,6 +2981,9 @@ enable_bmd:
if (rc < 0)
pr_err("Error in enabling BMD, rc=%d\n", rc);
+ if (chip->fg_psy)
+ power_supply_changed(chip->fg_psy);
+
return IRQ_HANDLED;
}
diff --git a/drivers/power/supply/qcom/qpnp-smb2.c b/drivers/power/supply/qcom/qpnp-smb2.c
index 98a917273328..4a12af466c36 100644
--- a/drivers/power/supply/qcom/qpnp-smb2.c
+++ b/drivers/power/supply/qcom/qpnp-smb2.c
@@ -1468,7 +1468,10 @@ static int smb2_setup_wa_flags(struct smb2 *chip)
static int smb2_determine_initial_status(struct smb2 *chip)
{
struct smb_irq_data irq_data = {chip, "determine-initial-status"};
+ struct smb_charger *chg = &chip->chg;
+ if (chg->bms_psy)
+ smblib_suspend_on_debug_battery(chg);
smblib_handle_usb_plugin(0, &irq_data);
smblib_handle_usb_typec_change(0, &irq_data);
smblib_handle_usb_source_change(0, &irq_data);
diff --git a/drivers/power/supply/qcom/smb-lib.c b/drivers/power/supply/qcom/smb-lib.c
index 9728490736ff..d3f7e43ea10e 100644
--- a/drivers/power/supply/qcom/smb-lib.c
+++ b/drivers/power/supply/qcom/smb-lib.c
@@ -532,7 +532,7 @@ static int smblib_notifier_call(struct notifier_block *nb,
if (!strcmp(psy->desc->name, "bms")) {
if (!chg->bms_psy)
chg->bms_psy = psy;
- if (ev == PSY_EVENT_PROP_CHANGED && chg->batt_psy)
+ if (ev == PSY_EVENT_PROP_CHANGED)
schedule_work(&chg->bms_update_work);
}
@@ -642,6 +642,24 @@ static bool smblib_sysok_reason_usbin(struct smb_charger *chg)
return stat & SYSOK_REASON_USBIN_BIT;
}
+void smblib_suspend_on_debug_battery(struct smb_charger *chg)
+{
+ int rc;
+ union power_supply_propval val;
+
+ rc = power_supply_get_property(chg->bms_psy,
+ POWER_SUPPLY_PROP_DEBUG_BATTERY, &val);
+ if (rc < 0) {
+ smblib_err(chg, "Couldn't get debug battery prop rc=%d\n", rc);
+ return;
+ }
+
+ vote(chg->usb_suspend_votable, DEBUG_BOARD_VOTER, val.intval, 0);
+ vote(chg->dc_suspend_votable, DEBUG_BOARD_VOTER, val.intval, 0);
+ if (val.intval)
+ pr_info("Input suspended: Fake battery\n");
+}
+
/*********************
* VOTABLE CALLBACKS *
*********************/
@@ -3299,7 +3317,11 @@ static void bms_update_work(struct work_struct *work)
{
struct smb_charger *chg = container_of(work, struct smb_charger,
bms_update_work);
- power_supply_changed(chg->batt_psy);
+
+ smblib_suspend_on_debug_battery(chg);
+
+ if (chg->batt_psy)
+ power_supply_changed(chg->batt_psy);
}
static void step_soc_req_work(struct work_struct *work)
diff --git a/drivers/power/supply/qcom/smb-lib.h b/drivers/power/supply/qcom/smb-lib.h
index efce7eb987ab..c5d014193fd6 100644
--- a/drivers/power/supply/qcom/smb-lib.h
+++ b/drivers/power/supply/qcom/smb-lib.h
@@ -51,6 +51,7 @@ enum print_reason {
#define BOOST_BACK_VOTER "BOOST_BACK_VOTER"
#define HVDCP_INDIRECT_VOTER "HVDCP_INDIRECT_VOTER"
#define MICRO_USB_VOTER "MICRO_USB_VOTER"
+#define DEBUG_BOARD_VOTER "DEBUG_BOARD_VOTER"
#define VCONN_MAX_ATTEMPTS 3
#define OTG_MAX_ATTEMPTS 3
@@ -383,6 +384,7 @@ int smblib_get_prop_slave_current_now(struct smb_charger *chg,
union power_supply_propval *val);
int smblib_set_prop_ship_mode(struct smb_charger *chg,
const union power_supply_propval *val);
+void smblib_suspend_on_debug_battery(struct smb_charger *chg);
int smblib_init(struct smb_charger *chg);
int smblib_deinit(struct smb_charger *chg);