usb: typec: tcpci: Fix up sink disconnect thresholds for PD
"Table 4-3 VBUS Sink Characteristics" of "Type-C Cable and Connector
Specification" defines the disconnect voltage thresholds of various
configurations. This change fixes the disconnect threshold voltage
calculation based on vSinkPD_min and vSinkDisconnectPD as defined
by the table.
Fixes: e1a97bf80a
("usb: typec: tcpci: Implement Auto discharge disconnect callbacks")
Cc: stable <stable@vger.kernel.org>
Acked-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Signed-off-by: Badhri Jagan Sridharan <badhri@google.com>
Link: https://lore.kernel.org/r/20210615174323.1160132-1-badhri@google.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
73f3d9453d
commit
4288debeaa
@ -21,8 +21,12 @@
|
||||
#define PD_RETRY_COUNT_DEFAULT 3
|
||||
#define PD_RETRY_COUNT_3_0_OR_HIGHER 2
|
||||
#define AUTO_DISCHARGE_DEFAULT_THRESHOLD_MV 3500
|
||||
#define AUTO_DISCHARGE_PD_HEADROOM_MV 850
|
||||
#define AUTO_DISCHARGE_PPS_HEADROOM_MV 1250
|
||||
#define VSINKPD_MIN_IR_DROP_MV 750
|
||||
#define VSRC_NEW_MIN_PERCENT 95
|
||||
#define VSRC_VALID_MIN_MV 500
|
||||
#define VPPS_NEW_MIN_PERCENT 95
|
||||
#define VPPS_VALID_MIN_MV 100
|
||||
#define VSINKDISCONNECT_PD_MIN_PERCENT 90
|
||||
|
||||
#define tcpc_presenting_rd(reg, cc) \
|
||||
(!(TCPC_ROLE_CTRL_DRP & (reg)) && \
|
||||
@ -351,11 +355,13 @@ static int tcpci_set_auto_vbus_discharge_threshold(struct tcpc_dev *dev, enum ty
|
||||
threshold = AUTO_DISCHARGE_DEFAULT_THRESHOLD_MV;
|
||||
} else if (mode == TYPEC_PWR_MODE_PD) {
|
||||
if (pps_active)
|
||||
threshold = (95 * requested_vbus_voltage_mv / 100) -
|
||||
AUTO_DISCHARGE_PD_HEADROOM_MV;
|
||||
threshold = ((VPPS_NEW_MIN_PERCENT * requested_vbus_voltage_mv / 100) -
|
||||
VSINKPD_MIN_IR_DROP_MV - VPPS_VALID_MIN_MV) *
|
||||
VSINKDISCONNECT_PD_MIN_PERCENT / 100;
|
||||
else
|
||||
threshold = (95 * requested_vbus_voltage_mv / 100) -
|
||||
AUTO_DISCHARGE_PPS_HEADROOM_MV;
|
||||
threshold = ((VSRC_NEW_MIN_PERCENT * requested_vbus_voltage_mv / 100) -
|
||||
VSINKPD_MIN_IR_DROP_MV - VSRC_VALID_MIN_MV) *
|
||||
VSINKDISCONNECT_PD_MIN_PERCENT / 100;
|
||||
} else {
|
||||
/* 3.5V for non-pd sink */
|
||||
threshold = AUTO_DISCHARGE_DEFAULT_THRESHOLD_MV;
|
||||
|
Loading…
Reference in New Issue
Block a user