From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [v3,3/3] usb: typec: tcpm: charge current handling for sink during hard reset From: Badhri Jagan Sridharan Message-Id: <20181001194501.58338-3-badhri@google.com> Date: Mon, 1 Oct 2018 12:45:01 -0700 To: Rob Herring , Mark Rutland , Heikki Krogerus , Greg Kroah-Hartman , Chanwoo Choi , Andrzej Hajda , Li Jun , linux@roeck-us.net, jackp@codeaurora.org Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org, Badhri Jagan Sridharan List-ID: RHVyaW5nIHRoZSBpbml0aWFsIGNvbm5lY3QgdG8gYSBub24tcGQgcG9ydCwgc2luayB3b3VsZCBo YXJkIHJlc2V0CnR3aWNlIGJlZm9yZSBkZWVtaW5nIHRoYXQgdGhlIHBvcnQgcGFydG5lciBpcyBu b24tcGQuIFRDUE0gc2V0cyB0aGUKdGhlIGNoYXJnZSBwYXRoIHRvIGZhbHNlIGR1cmluZyB0aGUg aGFyZCByZXNldC4gVGhpcyBjYXVzZXMgdW5uZWNlc3NhcnkKY29ubmVjdHMvZGlzY29ubmVjdHMg b2YgY2hhcmdlIHBhdGggYW5kIG1ha2VzIHBvcnQgdGFrZSBsb25nZXIgdG8KY2hhcmdlIGZyb20g dGhlIG5vbi1wZCBwb3J0cy4gQXZvaWQgdGhpcyBieSBub3Qgc2V0dGluZyB0aGUgY2hhcmdlIHBh dGgKdG8gZmFsc2UgdW5sZXNzIHRoZSBwYXJ0bmVyIGhhcyBhbHJlYWR5IGlkZW50aWZpZWQgdG8g YmUgcGQgY2FwYWJsZS4KCldoZW4gcGFydG5lciBpcyBhIHBkIHBvcnQsIHNldCB0aGUgY2hhcmdl IHBhdGggdG8gZmFsc2UgaW4KU05LX0hBUkRfUkVTRVRfU0lOS19PRkYuIFNldCB0aGUgY3VycmVu dCBsaW1pdHMgdG8gZGVmYXVsdCB2YWx1ZSBiYXNlZApvZiBDQyBwdWxsIHVwIGFuZCByZXN1bWUg dGhlIGNoYXJnZSBwYXRoIHdoZW4gcG9ydCBlbnRlcnMKU05LX0hBUkRfUkVTRVRfU0lOS19PTi4K ClNpZ25lZC1vZmYtYnk6IEJhZGhyaSBKYWdhbiBTcmlkaGFyYW4gPGJhZGhyaUBnb29nbGUuY29t PgoKLS0tLS0tLS0KQ2hhbmdlcyBpbiBWMzoKUmViYXNlIG9uIHRvcCBvZiB1c2ItbmV4dAoKQ2hh bmdlcyBpbiBWMjoKQmFzZWQgb24gZmVlZGJhY2sgb2YgamFja3BAY29kZWF1cm9yYS5vcmcKLSB2 c2FmZV81dl9oYXJkX3Jlc2V0IGZsYWcgZnJvbSB0Y3BjX2NvbmZpZyBpcyByZW1vdmVkCi0gUGF0 Y2ggb25seSBkaWZmZXJlbnRpYXRlcyBiZXR3ZWVuIHBkIHBvcnQgcGFydG5lciBhbmQgbm9uLXBk IHBvcnQKcGFydG5lcgoKVjEgdmVyc2lvbiBvZiB0aGUgcGF0Y2ggaXMgaGVyZToKaHR0cHM6Ly9s a21sLm9yZy9sa21sLzIwMTgvOS8xNC8xMQotLS0KIGRyaXZlcnMvdXNiL3R5cGVjL3RjcG0vdGNw bS5jIHwgOSArKysrKysrKy0KIDEgZmlsZSBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKyksIDEgZGVs ZXRpb24oLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi90eXBlYy90Y3BtL3RjcG0uYyBiL2Ry aXZlcnMvdXNiL3R5cGVjL3RjcG0vdGNwbS5jCmluZGV4IGMzYWMwZTQ2MTA2Yi4uYzI1YTY5OTIy ZWU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi90eXBlYy90Y3BtL3RjcG0uYworKysgYi9kcml2 ZXJzL3VzYi90eXBlYy90Y3BtL3RjcG0uYwpAQCAtMzI3Myw3ICszMjczLDggQEAgc3RhdGljIHZv aWQgcnVuX3N0YXRlX21hY2hpbmUoc3RydWN0IHRjcG1fcG9ydCAqcG9ydCkKIAljYXNlIFNOS19I QVJEX1JFU0VUX1NJTktfT0ZGOgogCQltZW1zZXQoJnBvcnQtPnBwc19kYXRhLCAwLCBzaXplb2Yo cG9ydC0+cHBzX2RhdGEpKTsKIAkJdGNwbV9zZXRfdmNvbm4ocG9ydCwgZmFsc2UpOwotCQl0Y3Bt X3NldF9jaGFyZ2UocG9ydCwgZmFsc2UpOworCQlpZiAocG9ydC0+cGRfY2FwYWJsZSkKKwkJCXRj cG1fc2V0X2NoYXJnZShwb3J0LCBmYWxzZSk7CiAJCXRjcG1fc2V0X3JvbGVzKHBvcnQsIHBvcnQt PnNlbGZfcG93ZXJlZCwgVFlQRUNfU0lOSywKIAkJCSAgICAgICBUWVBFQ19ERVZJQ0UpOwogCQkv KgpAQCAtMzMwNSw2ICszMzA2LDEyIEBAIHN0YXRpYyB2b2lkIHJ1bl9zdGF0ZV9tYWNoaW5lKHN0 cnVjdCB0Y3BtX3BvcnQgKnBvcnQpCiAJCSAqIFNpbWlsYXIsIGR1YWwtbW9kZSBwb3J0cyBpbiBz b3VyY2UgbW9kZSBzaG91bGQgdHJhbnNpdGlvbgogCQkgKiB0byBQRV9TTktfVHJhbnNpdGlvbl90 b19kZWZhdWx0LgogCQkgKi8KKwkJaWYgKHBvcnQtPnBkX2NhcGFibGUpIHsKKwkJCXRjcG1fc2V0 X2N1cnJlbnRfbGltaXQocG9ydCwKKwkJCQkJICAgICAgIHRjcG1fZ2V0X2N1cnJlbnRfbGltaXQo cG9ydCksCisJCQkJCSAgICAgICA1MDAwKTsKKwkJCXRjcG1fc2V0X2NoYXJnZShwb3J0LCB0cnVl KTsKKwkJfQogCQl0Y3BtX3NldF9hdHRhY2hlZF9zdGF0ZShwb3J0LCB0cnVlKTsKIAkJdGNwbV9z ZXRfc3RhdGUocG9ydCwgU05LX1NUQVJUVVAsIDApOwogCQlicmVhazsK From mboxrd@z Thu Jan 1 00:00:00 1970 From: Badhri Jagan Sridharan Subject: [PATCH v3 3/3] usb: typec: tcpm: charge current handling for sink during hard reset Date: Mon, 1 Oct 2018 12:45:01 -0700 Message-ID: <20181001194501.58338-3-badhri@google.com> References: <20181001194501.58338-1-badhri@google.com> Mime-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Return-path: In-Reply-To: <20181001194501.58338-1-badhri@google.com> Sender: linux-kernel-owner@vger.kernel.org To: Rob Herring , Mark Rutland , Heikki Krogerus , Greg Kroah-Hartman , Chanwoo Choi , Andrzej Hajda , Li Jun , linux@roeck-us.net, jackp@codeaurora.org Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org, Badhri Jagan Sridharan List-Id: devicetree@vger.kernel.org During the initial connect to a non-pd port, sink would hard reset twice before deeming that the port partner is non-pd. TCPM sets the the charge path to false during the hard reset. This causes unnecessary connects/disconnects of charge path and makes port take longer to charge from the non-pd ports. Avoid this by not setting the charge path to false unless the partner has already identified to be pd capable. When partner is a pd port, set the charge path to false in SNK_HARD_RESET_SINK_OFF. Set the current limits to default value based of CC pull up and resume the charge path when port enters SNK_HARD_RESET_SINK_ON. Signed-off-by: Badhri Jagan Sridharan -------- Changes in V3: Rebase on top of usb-next Changes in V2: Based on feedback of jackp@codeaurora.org - vsafe_5v_hard_reset flag from tcpc_config is removed - Patch only differentiates between pd port partner and non-pd port partner V1 version of the patch is here: https://lkml.org/lkml/2018/9/14/11 --- drivers/usb/typec/tcpm/tcpm.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/drivers/usb/typec/tcpm/tcpm.c b/drivers/usb/typec/tcpm/tcpm.c index c3ac0e46106b..c25a69922ee6 100644 --- a/drivers/usb/typec/tcpm/tcpm.c +++ b/drivers/usb/typec/tcpm/tcpm.c @@ -3273,7 +3273,8 @@ static void run_state_machine(struct tcpm_port *port) case SNK_HARD_RESET_SINK_OFF: memset(&port->pps_data, 0, sizeof(port->pps_data)); tcpm_set_vconn(port, false); - tcpm_set_charge(port, false); + if (port->pd_capable) + tcpm_set_charge(port, false); tcpm_set_roles(port, port->self_powered, TYPEC_SINK, TYPEC_DEVICE); /* @@ -3305,6 +3306,12 @@ static void run_state_machine(struct tcpm_port *port) * Similar, dual-mode ports in source mode should transition * to PE_SNK_Transition_to_default. */ + if (port->pd_capable) { + tcpm_set_current_limit(port, + tcpm_get_current_limit(port), + 5000); + tcpm_set_charge(port, true); + } tcpm_set_attached_state(port, true); tcpm_set_state(port, SNK_STARTUP, 0); break; -- 2.19.0.605.g01d371f741-goog