summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorAbhijeet Dharmapurikar <adharmap@codeaurora.org>2016-10-06 17:25:01 -0700
committerAbhijeet Dharmapurikar <adharmap@codeaurora.org>2016-10-17 11:54:09 -0700
commitebdc69997401fa8f92597cbfe1ff574a8265a930 (patch)
treef3a4e2cbee00de23a519f5c36cad65787a652afd /drivers
parentf080134002472e9fb20e331e0a3dddce587458fa (diff)
qpnp-smb2: update to USB_PD type when pd is active
Since the USB_PD type is no more set by the PD driver, it is expected that the type be set based on pd_active property being ACTIVE. So set the type and update the userspace when it changes. Change-Id: I0f76f092d3e8de7a916e995e4d825fe0da79bf78 Signed-off-by: Abhijeet Dharmapurikar <adharmap@codeaurora.org>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/power/qcom-charger/qpnp-smb2.c8
-rw-r--r--drivers/power/qcom-charger/smb-lib.c15
-rw-r--r--drivers/power/qcom-charger/smb-lib.h2
3 files changed, 10 insertions, 15 deletions
diff --git a/drivers/power/qcom-charger/qpnp-smb2.c b/drivers/power/qcom-charger/qpnp-smb2.c
index b0edacb98edf..57ab9fe758c7 100644
--- a/drivers/power/qcom-charger/qpnp-smb2.c
+++ b/drivers/power/qcom-charger/qpnp-smb2.c
@@ -455,14 +455,6 @@ static int smb2_usb_set_prop(struct power_supply *psy,
case POWER_SUPPLY_PROP_CURRENT_MAX:
rc = smblib_set_prop_usb_current_max(chg, val);
break;
- case POWER_SUPPLY_PROP_TYPE:
- if (chg->pd_active && val->intval == POWER_SUPPLY_TYPE_USB_PD) {
- chg->usb_psy_desc.type = val->intval;
- } else {
- pr_err("set type %d not allowed\n", val->intval);
- rc = -EINVAL;
- }
- break;
case POWER_SUPPLY_PROP_TYPEC_POWER_ROLE:
rc = smblib_set_prop_typec_power_role(chg, val);
break;
diff --git a/drivers/power/qcom-charger/smb-lib.c b/drivers/power/qcom-charger/smb-lib.c
index f5b0c6a21193..bc1b8b2bf03e 100644
--- a/drivers/power/qcom-charger/smb-lib.c
+++ b/drivers/power/qcom-charger/smb-lib.c
@@ -434,8 +434,10 @@ static int smblib_update_usb_type(struct smb_charger *chg)
const struct apsd_result *apsd_result;
/* if PD is active, APSD is disabled so won't have a valid result */
- if (chg->pd_active)
- return rc;
+ if (chg->pd_active) {
+ chg->usb_psy_desc.type = POWER_SUPPLY_TYPE_USB_PD;
+ return 0;
+ }
apsd_result = smblib_get_apsd_result(chg);
chg->usb_psy_desc.type = apsd_result->pst;
@@ -1884,11 +1886,10 @@ int smblib_set_prop_pd_active(struct smb_charger *chg,
*/
if (val->intval) {
rc = smblib_read(chg, TYPE_C_STATUS_4_REG, &stat);
- if (rc < 0) {
- dev_err(chg->dev,
- "Couldn't read TYPE_C_STATUS_4 rc=%d\n",
+ if (rc < 0) {
+ dev_err(chg->dev, "Couldn't read TYPE_C_STATUS_4 rc=%d\n",
rc);
- return rc;
+ return rc;
}
stat &= CC_ORIENTATION_BIT;
@@ -1913,6 +1914,8 @@ int smblib_set_prop_pd_active(struct smb_charger *chg,
chg->pd_active = (bool)val->intval;
smblib_update_usb_type(chg);
+ power_supply_changed(chg->usb_psy);
+
return rc;
}
diff --git a/drivers/power/qcom-charger/smb-lib.h b/drivers/power/qcom-charger/smb-lib.h
index 804c5bbff013..fc1c3ba94a15 100644
--- a/drivers/power/qcom-charger/smb-lib.h
+++ b/drivers/power/qcom-charger/smb-lib.h
@@ -169,7 +169,7 @@ struct smb_charger {
/* cached status */
int voltage_min_uv;
int voltage_max_uv;
- bool pd_active;
+ int pd_active;
bool vbus_present;
int system_temp_level;