lkml.org 
[lkml]   [2021]   [Jul]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.12 025/700] usb: typec: tcpci: Fix up sink disconnect thresholds for PD
    Date
    From: Badhri Jagan Sridharan <badhri@google.com>

    commit 4288debeaa4e21d8dd5132739ffba2d343892bbf upstream.

    "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")
    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>

    ---
    drivers/usb/typec/tcpm/tcpci.c | 18 ++++++++++++------
    1 file changed, 12 insertions(+), 6 deletions(-)

    --- 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_cc1_rd(reg) \
    (!(TCPC_ROLE_CTRL_DRP & (reg)) && \
    @@ -328,11 +332,13 @@ static int tcpci_set_auto_vbus_discharge
    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;

    \
     
     \ /
      Last update: 2021-07-12 09:40    [W:4.059 / U:0.020 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site