From patchwork Wed Apr 14 14:26:55 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Badhri Jagan Sridharan X-Patchwork-Id: 421223 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-26.3 required=3.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER, INCLUDES_PATCH, MAILING_LIST_MULTI, SPF_HELO_NONE, SPF_PASS, USER_AGENT_GIT, USER_IN_DEF_DKIM_WL autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4AEE5C43460 for ; Wed, 14 Apr 2021 14:27:11 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 26BF561155 for ; Wed, 14 Apr 2021 14:27:11 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1344300AbhDNO13 (ORCPT ); Wed, 14 Apr 2021 10:27:29 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33710 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1348468AbhDNO10 (ORCPT ); Wed, 14 Apr 2021 10:27:26 -0400 Received: from mail-yb1-xb4a.google.com (mail-yb1-xb4a.google.com [IPv6:2607:f8b0:4864:20::b4a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3E732C061756 for ; Wed, 14 Apr 2021 07:27:03 -0700 (PDT) Received: by mail-yb1-xb4a.google.com with SMTP id p75so14076571ybc.8 for ; Wed, 14 Apr 2021 07:27:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc; bh=JZNxMt0kYcdl81T06jwbz7bLyJzhVKeZXhsmaV0aays=; b=ZE7ec79JRJhAh8rz0SBhyvoILEfHFixFNghu6rEe2f1YexSR3aZx4u+OAuxRxQfX3W /Dtmoy4YPFGN+3lcE9oqKdLqdiRpM74GPwct/F7KBAIU2CwOCU2yk7Kgf59LNemHq+1Y uSP1VagOZTjumSCMsAhS15UE16C6RetQ0qKVUJbpghHeTvheg/ppOohtfLqDhqgBdYeZ IwEUiYg9324fRGmLYSKgprJY/aTsC0Xe+0KCg8//udlWAxRBJn4hMC0W8N7Kbtmo3oRk e2rGI+NfAXOM0aoT7GwkbQyfqau27dQEsl6Bavpz754cnIi326VDG4jGJ7VZLJ1HnVwB ADow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=JZNxMt0kYcdl81T06jwbz7bLyJzhVKeZXhsmaV0aays=; b=H7WPKFRERG6ekJueXhZEz64/8EXe81LHKi2nfBgJdBOFqKtb9YNtrqgRl/8aub4nij 6TTgAHWZ2hfhNobnOH/uJwZjy3fRFrX7sTpEFh30wVr9SYtndLRS4kBc1hx06cQUd6Fo hjXHOQQwqDxnP/njFEGY9To8JgKIqi4OwK6w5IdiV6bQxCaE1IDlb0iO/1OuDlxHPeLU JZFTsGwZ/pQAUDat2nTEuvpNpDD3XTCYKQa/zwLN7Z2QTkTHNZEgB7XdUTvsVe3YV6ca mk58+ZLOaHiXYlmzENQXtR55hbdVyblZerI0SQ3yO67tSaLYaqhcd6KseD6p3M8I4Pg1 NygQ== X-Gm-Message-State: AOAM5306PeORyFgb6ces2bNP0DvuGaLmI66JJKf6f011fCJ4JQn/2Y7X CX2z2HaJG0cYxA9cIZ9U4WwFZEaX2Ys= X-Google-Smtp-Source: ABdhPJxBXTM7Q7HPBfGGbJx2oJtJgz+0hipcgbym5Sq9aj2qEf2V897DLXh+m+8SP5J3+G90lrqV+m3pUXE= X-Received: from badhri.mtv.corp.google.com ([2620:15c:211:201:91dd:58ac:7590:aa21]) (user=badhri job=sendgmr) by 2002:a25:cc84:: with SMTP id l126mr31805689ybf.487.1618410422394; Wed, 14 Apr 2021 07:27:02 -0700 (PDT) Date: Wed, 14 Apr 2021 07:26:55 -0700 In-Reply-To: <20210414142656.63749-1-badhri@google.com> Message-Id: <20210414142656.63749-2-badhri@google.com> Mime-Version: 1.0 References: <20210414142656.63749-1-badhri@google.com> X-Mailer: git-send-email 2.31.1.295.g9ea45b61b8-goog Subject: [PATCH v4 2/3] usb: typec: tcpm: Allow slow charging loops to comply to pSnkStby From: Badhri Jagan Sridharan To: Guenter Roeck , Heikki Krogerus , Greg Kroah-Hartman , Rob Herring , Adam Thomson Cc: linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, Kyle Tso , Badhri Jagan Sridharan Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org When a PD charger advertising Rp-3.0 is connected to a sink port, the sink port current limit would 3A, during SNK_DISCOVERY, till power negotiation starts. Once the negotiation starts the power limit needs to drop down to pSnkStby(500mA @ 5V) and to negotiated current limit once the explicit contract is in place. Not all charging loops can ramp up to 3A and drop down to 500mA within tSnkStdby which is 15ms. The port partner might hard reset if tSnkStdby is not met. To solve this problem, this patch introduces slow-charger-loop which when set makes the port request PD_P_SNK_STDBY_MW upon entering SNK_DISCOVERY(instead of 3A or the 1.5A during SNK_DISCOVERY) and the actual currrent limit after RX of PD_CTRL_PSRDY for PD link or during SNK_READY for non-pd link. Signed-off-by: Badhri Jagan Sridharan Reviewed-by: Heikki Krogerus --- Changes since V3: * Added reviewed-by tag from Heikki Changes since V2: * Refactored code based on Heikki's suggestion --- drivers/usb/typec/tcpm/tcpm.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/drivers/usb/typec/tcpm/tcpm.c b/drivers/usb/typec/tcpm/tcpm.c index aedc8bb9532a..2ad5e14a6867 100644 --- a/drivers/usb/typec/tcpm/tcpm.c +++ b/drivers/usb/typec/tcpm/tcpm.c @@ -459,6 +459,12 @@ struct tcpm_port { /* Auto vbus discharge status */ bool auto_vbus_discharge_enabled; + /* + * When set, port requests PD_P_SNK_STDBY_MW upon entering SNK_DISCOVERY and + * the actual currrent limit after RX of PD_CTRL_PSRDY for PD link, + * SNK_READY for non-pd link. + */ + bool slow_charger_loop; #ifdef CONFIG_DEBUG_FS struct dentry *dentry; struct mutex logbuffer_lock; /* log buffer access lock */ @@ -4047,9 +4053,11 @@ static void run_state_machine(struct tcpm_port *port) break; case SNK_DISCOVERY: if (port->vbus_present) { - tcpm_set_current_limit(port, - tcpm_get_current_limit(port), - 5000); + u32 current_lim = tcpm_get_current_limit(port); + + if (port->slow_charger_loop || (current_lim > PD_P_SNK_STDBY_MW / 5)) + current_lim = PD_P_SNK_STDBY_MW / 5; + tcpm_set_current_limit(port, current_lim, 5000); tcpm_set_charge(port, true); tcpm_set_state(port, SNK_WAIT_CAPABILITIES, 0); break; @@ -4161,6 +4169,8 @@ static void run_state_machine(struct tcpm_port *port) port->pwr_opmode = TYPEC_PWR_MODE_PD; } + if (!port->pd_capable && port->slow_charger_loop) + tcpm_set_current_limit(port, tcpm_get_current_limit(port), 5000); tcpm_swap_complete(port, 0); tcpm_typec_connect(port); mod_enable_frs_delayed_work(port, 0); @@ -5763,6 +5773,7 @@ static int tcpm_fw_get_caps(struct tcpm_port *port, port->typec_caps.type = ret; port->port_type = port->typec_caps.type; + port->slow_charger_loop = fwnode_property_read_bool(fwnode, "slow-charger-loop"); if (port->port_type == TYPEC_PORT_SNK) goto sink; From patchwork Wed Apr 14 14:26:56 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Badhri Jagan Sridharan X-Patchwork-Id: 421944 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-26.3 required=3.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER, INCLUDES_PATCH, MAILING_LIST_MULTI, SPF_HELO_NONE, SPF_PASS, USER_AGENT_GIT,USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 307A4C433B4 for ; Wed, 14 Apr 2021 14:27:12 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 17A7961155 for ; Wed, 14 Apr 2021 14:27:12 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1349535AbhDNO1c (ORCPT ); Wed, 14 Apr 2021 10:27:32 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33728 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1349460AbhDNO10 (ORCPT ); Wed, 14 Apr 2021 10:27:26 -0400 Received: from mail-qt1-x849.google.com (mail-qt1-x849.google.com [IPv6:2607:f8b0:4864:20::849]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0EDA6C06175F for ; Wed, 14 Apr 2021 07:27:05 -0700 (PDT) Received: by mail-qt1-x849.google.com with SMTP id x7-20020a05622a0007b029019d73c63053so2008533qtw.16 for ; Wed, 14 Apr 2021 07:27:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc; bh=aTQH+8QFadrYoaEx7teEfO6F+xF81qJm/gbu7SJfp4M=; b=p+Dy4+wR6puYM9D4rzYQ0dFlGkQtuZiNm05XebXvDRpCrpegQGd4o/KJUwQLnWcb+C BV+LYnY3Brvs4c6UXyblt4WVNqxO4TnsC4IpYTF7PpzIggBhhOwe7tmrYcufexaCx+YE N9q1DjDTTz4DcN1KjkqXsFpCOYmLmQ7SWSQ/dK0gkFiqTyPXUUoTdzVgQCQglg7oJ53T FOTIlNNL7kIlRJWd9uc6aWVy08NIjrTCIdTIuoDvkBqjpQX0iJzTe4mL1IA9gLGWO59Q rgkG4E/DctjmZDiNfn5U+wwVZWp5+SMTQ8uI+WWzVNJvyzXf61gEUNgXk119i9QWHce9 J+4g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=aTQH+8QFadrYoaEx7teEfO6F+xF81qJm/gbu7SJfp4M=; b=TLcZIC8htptElKaovLI+zAy2LSGoK/ymgGd08CIDp6eqYLxZHgf1sBswyikPQDXXGA mzkqbH3NaHCBrvGMz14tXlmSBVPQxx3h8l8/ZNjps9rIml1xWKL74fuCyFi4hN1Wfat4 judjYRS00j9fGQTJztEHBhYZpoQ/P3LBi2lN9TnafaOXsWoHNQHnreC4cfHkvhAg9JO9 P7humi/gn6dOWJswXDt/OvJOieuPgj+9/mveRa/F7tjeE8eiaFxaeQ8OYwRj92FRZHkW veZnQurqs5Tc5AnmA3S2DNw4f4krCl7HqL6kq/c8PKAXncJj6bjznL2iq6NmiIQqPJ6T QANQ== X-Gm-Message-State: AOAM533ghGn4fLoRHSJIfF440IkCANlFgVugfxNZnXYwbXGxEVkr3wLx /Eo9o11vG1oXaHXAUcg6m8lsvLP72mQ= X-Google-Smtp-Source: ABdhPJy6NCAvWnn2HR6o730wtjP3t0Cu4NnswFnFKu09GrC3WOAoD7SpzOiFFKNOgxoH+d7GVf3p6tR16eY= X-Received: from badhri.mtv.corp.google.com ([2620:15c:211:201:91dd:58ac:7590:aa21]) (user=badhri job=sendgmr) by 2002:a0c:ff02:: with SMTP id w2mr38604856qvt.23.1618410424116; Wed, 14 Apr 2021 07:27:04 -0700 (PDT) Date: Wed, 14 Apr 2021 07:26:56 -0700 In-Reply-To: <20210414142656.63749-1-badhri@google.com> Message-Id: <20210414142656.63749-3-badhri@google.com> Mime-Version: 1.0 References: <20210414142656.63749-1-badhri@google.com> X-Mailer: git-send-email 2.31.1.295.g9ea45b61b8-goog Subject: [PATCH v4 3/3] dt-bindings: connector: Add slow-charger-loop definition From: Badhri Jagan Sridharan To: Guenter Roeck , Heikki Krogerus , Greg Kroah-Hartman , Rob Herring , Adam Thomson Cc: linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, Kyle Tso , Badhri Jagan Sridharan Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org Allows PMIC charger loops which are slow(i.e. cannot meet the 15ms deadline) to still comply to pSnkStby i.e Maximum power that can be consumed by sink while in Sink Standby state as defined in 7.4.2 Sink Electrical Parameters of USB Power Delivery Specification Revision 3.0, Version 1.2. This patch introduces slow-charger-loop which when set makes the port request PD_P_SNK_STDBY_MW(2.5W i.e 500mA@5V) upon entering SNK_DISCOVERY (instead of 3A or the 1.5A during SNK_DISCOVERY) and the actual currrent limit after RX of PD_CTRL_PSRDY for PD link or during SNK_READY for non-pd link. Signed-off-by: Badhri Jagan Sridharan --- Changes since v3: * Removed additional semi-colon in the subject line Changes since V2: To address Rob's comments * Updated commit and the binding description. * Updated subject as well. --- .../devicetree/bindings/connector/usb-connector.yaml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Documentation/devicetree/bindings/connector/usb-connector.yaml b/Documentation/devicetree/bindings/connector/usb-connector.yaml index b6daedd62516..32509b98142e 100644 --- a/Documentation/devicetree/bindings/connector/usb-connector.yaml +++ b/Documentation/devicetree/bindings/connector/usb-connector.yaml @@ -197,6 +197,16 @@ properties: $ref: /schemas/types.yaml#/definitions/uint32 enum: [1, 2, 3] + slow-charger-loop: + description: Allows PMIC charger loops which are slow(i.e. cannot meet the 15ms deadline) to + still comply to pSnkStby i.e Maximum power that can be consumed by sink while in Sink Standby + state as defined in 7.4.2 Sink Electrical Parameters of USB Power Delivery Specification + Revision 3.0, Version 1.2. When the property is set, the port requests pSnkStby(2.5W - + 5V@500mA) upon entering SNK_DISCOVERY(instead of 3A or the 1.5A, Rp current advertised, during + SNK_DISCOVERY) and the actual currrent limit after reception of PS_Ready for PD link or during + SNK_READY for non-pd link. + type: boolean + required: - compatible