summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2016-10-15 01:20:00 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2016-10-15 01:19:59 -0700
commite024b79852c57be61b737d33ce299ea037c8459a (patch)
treec7d3c194ad7c5469032320ad167e519239a0f0b7
parentcb74f5d749578e1596f68f2dd5493ff85d80d004 (diff)
parent5b100713ecb922b373c0334cf69b5dfae9f3a5c1 (diff)
Merge "usb: pd: Use new power_supply PD_IN_HARD_RESET property"
-rw-r--r--drivers/usb/pd/policy_engine.c50
1 files changed, 37 insertions, 13 deletions
diff --git a/drivers/usb/pd/policy_engine.c b/drivers/usb/pd/policy_engine.c
index 114824e5ba3f..7a1174b32a38 100644
--- a/drivers/usb/pd/policy_engine.c
+++ b/drivers/usb/pd/policy_engine.c
@@ -658,10 +658,6 @@ static void usbpd_set_state(struct usbpd *pd, enum usbpd_state next_state)
pd->pd_phy_opened = true;
}
- val.intval = 1;
- power_supply_set_property(pd->usb_psy,
- POWER_SUPPLY_PROP_PD_ACTIVE, &val);
-
pd->current_state = PE_SRC_SEND_CAPABILITIES;
if (pd->in_pr_swap) {
pd->in_pr_swap = false;
@@ -776,6 +772,10 @@ static void usbpd_set_state(struct usbpd *pd, enum usbpd_state next_state)
}
}
+ val.intval = 0;
+ power_supply_set_property(pd->usb_psy,
+ POWER_SUPPLY_PROP_PD_IN_HARD_RESET, &val);
+
usbpd_set_state(pd, PE_SRC_STARTUP);
break;
@@ -1397,6 +1397,9 @@ static void usbpd_sm(struct work_struct *w)
val.intval = 0;
power_supply_set_property(pd->usb_psy,
+ POWER_SUPPLY_PROP_PD_IN_HARD_RESET, &val);
+
+ power_supply_set_property(pd->usb_psy,
POWER_SUPPLY_PROP_PD_ACTIVE, &val);
if (pd->current_pr == PR_SRC)
@@ -1434,6 +1437,10 @@ static void usbpd_sm(struct work_struct *w)
/* Hard reset? */
if (pd->hard_reset) {
+ val.intval = 1;
+ power_supply_set_property(pd->usb_psy,
+ POWER_SUPPLY_PROP_PD_IN_HARD_RESET, &val);
+
reset_vdm_state(pd);
if (pd->current_pr == PR_SINK)
@@ -1506,15 +1513,15 @@ static void usbpd_sm(struct work_struct *w)
break;
}
+ val.intval = 1;
+ power_supply_set_property(pd->usb_psy,
+ POWER_SUPPLY_PROP_PD_ACTIVE, &val);
+
/* transmit was successful if GoodCRC was received */
pd->caps_count = 0;
pd->hard_reset_count = 0;
pd->pd_connected = true; /* we know peer is PD capable */
- val.intval = pd->psy_type = POWER_SUPPLY_TYPE_USB_PD;
- power_supply_set_property(pd->usb_psy,
- POWER_SUPPLY_PROP_TYPE, &val);
-
/* wait for REQUEST */
pd->current_state = PE_SRC_SEND_CAPABILITIES_WAIT;
kick_sm(pd, SENDER_RESPONSE_TIME);
@@ -1601,6 +1608,10 @@ static void usbpd_sm(struct work_struct *w)
break;
case PE_SRC_HARD_RESET:
+ val.intval = 1;
+ power_supply_set_property(pd->usb_psy,
+ POWER_SUPPLY_PROP_PD_IN_HARD_RESET, &val);
+
pd_send_hard_reset(pd);
pd->in_explicit_contract = false;
reset_vdm_state(pd);
@@ -1612,22 +1623,35 @@ static void usbpd_sm(struct work_struct *w)
case PE_SNK_WAIT_FOR_CAPABILITIES:
if (data_recvd == MSG_SOURCE_CAPABILITIES) {
- val.intval = 1;
+ val.intval = 0;
power_supply_set_property(pd->usb_psy,
- POWER_SUPPLY_PROP_PD_ACTIVE, &val);
+ POWER_SUPPLY_PROP_PD_IN_HARD_RESET,
+ &val);
- val.intval = pd->psy_type = POWER_SUPPLY_TYPE_USB_PD;
+ val.intval = 1;
power_supply_set_property(pd->usb_psy,
- POWER_SUPPLY_PROP_TYPE, &val);
+ POWER_SUPPLY_PROP_PD_ACTIVE, &val);
usbpd_set_state(pd, PE_SNK_EVALUATE_CAPABILITY);
} else if (pd->hard_reset_count < 3) {
usbpd_set_state(pd, PE_SNK_HARD_RESET);
} else if (pd->pd_connected) {
usbpd_info(&pd->dev, "Sink hard reset count exceeded, forcing reconnect\n");
+
+ val.intval = 0;
+ power_supply_set_property(pd->usb_psy,
+ POWER_SUPPLY_PROP_PD_IN_HARD_RESET,
+ &val);
+
usbpd_set_state(pd, PE_ERROR_RECOVERY);
} else {
usbpd_dbg(&pd->dev, "Sink hard reset count exceeded, disabling PD\n");
+
+ val.intval = 0;
+ power_supply_set_property(pd->usb_psy,
+ POWER_SUPPLY_PROP_PD_IN_HARD_RESET,
+ &val);
+
val.intval = 0;
power_supply_set_property(pd->usb_psy,
POWER_SUPPLY_PROP_PD_ACTIVE, &val);
@@ -1822,7 +1846,7 @@ static void usbpd_sm(struct work_struct *w)
/* prepare charger for VBUS change */
val.intval = 1;
power_supply_set_property(pd->usb_psy,
- POWER_SUPPLY_PROP_PD_ACTIVE, &val);
+ POWER_SUPPLY_PROP_PD_IN_HARD_RESET, &val);
pd->requested_voltage = 5000000;