lkml.org 
[lkml]   [2021]   [Jun]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    Subject[PATCH v1] usb: typec: tcpci: Fix up sink disconnect thresholds for PD
    From
    "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: e1a97bf80a022 ("usb: typec: tcpci: Implement Auto discharge disconnect callbacks")
    Signed-off-by: Badhri Jagan Sridharan <badhri@google.com>
    ---
    drivers/usb/typec/tcpm/tcpci.c | 18 ++++++++++++------
    1 file changed, 12 insertions(+), 6 deletions(-)

    diff --git a/drivers/usb/typec/tcpm/tcpci.c b/drivers/usb/typec/tcpm/tcpci.c
    index 22862345d1ab..9858716698df 100644
    --- a/drivers/usb/typec/tcpm/tcpci.c
    +++ b/drivers/usb/typec/tcpm/tcpci.c
    @@ -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;
    --
    2.32.0.272.g935e593368-goog
    \
     
     \ /
      Last update: 2021-06-15 19:44    [W:3.836 / U:0.004 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site