From: Badhri Jagan Sridharan <badhri@google.com>
To: Guenter Roeck <linux@roeck-us.net>,
Heikki Krogerus <heikki.krogerus@linux.intel.com>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Rob Herring <robh+dt@kernel.org>,
Lee Jones <lee.jones@linaro.org>, Mark Brown <broonie@kernel.org>,
Maxime Ripard <mripard@kernel.org>,
Alexandre Belloni <alexandre.belloni@bootlin.com>,
Thierry Reding <treding@nvidia.com>,
Prashant Malani <pmalani@chromium.org>,
Badhri Jagan Sridharan <badhri@google.com>
Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-usb@vger.kernel.org
Subject: [PATCH v9 07/15] usb: typec: tcpci: Implement callbacks for FRS
Date: Mon, 28 Sep 2020 19:39:56 -0700 [thread overview]
Message-ID: <20200929024004.244992-8-badhri@google.com> (raw)
In-Reply-To: <20200929024004.244992-1-badhri@google.com>
Implement tcpc.enable_frs to enable TCPC to receive
Fast role swap signal.
Additionally set the sink disconnect threshold to 4v
to prevent disconnect during Fast Role swap.
Signed-off-by: Badhri Jagan Sridharan <badhri@google.com>
Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
---
Changes since v1:
- Changing patch version to v6 to fix version number confusion.
Changes since v6:
- Rebase on usb-next.
- Fixed formatting error.
- Added Reviewed-by: Heikki.
Changes since v7:
- Rebase on usb-next.
Changes since v8:
- None.
---
drivers/usb/typec/tcpm/tcpci.c | 17 +++++++++++++++++
drivers/usb/typec/tcpm/tcpci.h | 8 ++++++++
2 files changed, 25 insertions(+)
diff --git a/drivers/usb/typec/tcpm/tcpci.c b/drivers/usb/typec/tcpm/tcpci.c
index d6a6fac82d48..f9f0af64da5f 100644
--- a/drivers/usb/typec/tcpm/tcpci.c
+++ b/drivers/usb/typec/tcpm/tcpci.c
@@ -268,6 +268,22 @@ static int tcpci_set_vconn(struct tcpc_dev *tcpc, bool enable)
enable ? TCPC_POWER_CTRL_VCONN_ENABLE : 0);
}
+static int tcpci_enable_frs(struct tcpc_dev *dev, bool enable)
+{
+ struct tcpci *tcpci = tcpc_to_tcpci(dev);
+ int ret;
+
+ /* To prevent disconnect during FRS, set disconnect threshold to 3.5V */
+ ret = tcpci_write16(tcpci, TCPC_VBUS_SINK_DISCONNECT_THRESH, enable ? 0 : 0x8c);
+ if (ret < 0)
+ return ret;
+
+ ret = regmap_update_bits(tcpci->regmap, TCPC_POWER_CTRL, TCPC_FAST_ROLE_SWAP_EN, enable ?
+ TCPC_FAST_ROLE_SWAP_EN : 0);
+
+ return ret;
+}
+
static int tcpci_set_bist_data(struct tcpc_dev *tcpc, bool enable)
{
struct tcpci *tcpci = tcpc_to_tcpci(tcpc);
@@ -611,6 +627,7 @@ struct tcpci *tcpci_register_port(struct device *dev, struct tcpci_data *data)
tcpci->tcpc.set_roles = tcpci_set_roles;
tcpci->tcpc.pd_transmit = tcpci_pd_transmit;
tcpci->tcpc.set_bist_data = tcpci_set_bist_data;
+ tcpci->tcpc.enable_frs = tcpci_enable_frs;
err = tcpci_parse_config(tcpci);
if (err < 0)
diff --git a/drivers/usb/typec/tcpm/tcpci.h b/drivers/usb/typec/tcpm/tcpci.h
index 82f021a82456..5ef07a56d67a 100644
--- a/drivers/usb/typec/tcpm/tcpci.h
+++ b/drivers/usb/typec/tcpm/tcpci.h
@@ -16,6 +16,7 @@
#define TCPC_PD_INT_REV 0xa
#define TCPC_ALERT 0x10
+#define TCPC_ALERT_EXTND BIT(14)
#define TCPC_ALERT_EXTENDED_STATUS BIT(13)
#define TCPC_ALERT_VBUS_DISCNCT BIT(11)
#define TCPC_ALERT_RX_BUF_OVF BIT(10)
@@ -37,6 +38,9 @@
#define TCPC_EXTENDED_STATUS_MASK 0x16
#define TCPC_EXTENDED_STATUS_MASK_VSAFE0V BIT(0)
+#define TCPC_ALERT_EXTENDED_MASK 0x17
+#define TCPC_SINK_FAST_ROLE_SWAP BIT(0)
+
#define TCPC_CONFIG_STD_OUTPUT 0x18
#define TCPC_TCPC_CTRL 0x19
@@ -63,6 +67,7 @@
#define TCPC_POWER_CTRL 0x1c
#define TCPC_POWER_CTRL_VCONN_ENABLE BIT(0)
+#define TCPC_FAST_ROLE_SWAP_EN BIT(7)
#define TCPC_CC_STATUS 0x1d
#define TCPC_CC_STATUS_TOGGLING BIT(5)
@@ -74,11 +79,14 @@
#define TCPC_POWER_STATUS 0x1e
#define TCPC_POWER_STATUS_UNINIT BIT(6)
+#define TCPC_POWER_STATUS_SOURCING_VBUS BIT(4)
#define TCPC_POWER_STATUS_VBUS_DET BIT(3)
#define TCPC_POWER_STATUS_VBUS_PRES BIT(2)
#define TCPC_FAULT_STATUS 0x1f
+#define TCPC_ALERT_EXTENDED 0x21
+
#define TCPC_COMMAND 0x23
#define TCPC_CMD_WAKE_I2C 0x11
#define TCPC_CMD_DISABLE_VBUS_DETECT 0x22
--
2.28.0.709.gb0816b6eb0-goog
next prev parent reply other threads:[~2020-09-29 2:41 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-09-29 2:39 [PATCH v9 00/15] TCPM support for FRS and AutoDischarge Disconnect Badhri Jagan Sridharan
2020-09-29 2:39 ` [PATCH v9 01/15] usb: typec: tcpci: Add a getter method to retrieve tcpm_port reference Badhri Jagan Sridharan
2020-09-29 2:39 ` [PATCH v9 02/15] usb: typec: tcpci: Add set_vbus tcpci callback Badhri Jagan Sridharan
2020-10-02 13:39 ` Greg Kroah-Hartman
2020-10-02 13:40 ` Greg Kroah-Hartman
2020-10-02 16:08 ` Badhri Jagan Sridharan
2020-10-03 15:57 ` Greg Kroah-Hartman
2020-10-08 6:32 ` Badhri Jagan Sridharan
2020-09-29 2:39 ` [PATCH v9 03/15] dt-bindings: usb: Maxim type-c controller device tree binding document Badhri Jagan Sridharan
2020-10-05 14:46 ` Rob Herring
2020-10-08 0:42 ` Badhri Jagan Sridharan
2020-10-13 13:43 ` Rob Herring
2020-10-13 13:50 ` Rob Herring
2020-10-20 6:16 ` Badhri Jagan Sridharan
2020-09-29 2:39 ` [PATCH v9 04/15] usb: typec: tcpci_maxim: Chip level TCPC driver Badhri Jagan Sridharan
2020-09-29 2:39 ` [PATCH v9 05/15] dt-bindings: connector: Add property to set initial current cap for FRS Badhri Jagan Sridharan
2020-10-06 18:29 ` Rob Herring
2020-10-08 1:06 ` Badhri Jagan Sridharan
2020-10-13 14:15 ` Rob Herring
2020-10-20 9:43 ` Badhri Jagan Sridharan
2020-09-29 2:39 ` [PATCH v9 06/15] usb: typec: tcpm: Add support for Sink Fast Role SWAP(FRS) Badhri Jagan Sridharan
2020-09-29 2:39 ` Badhri Jagan Sridharan [this message]
2020-09-29 2:39 ` [PATCH v9 08/15] usb: typec: tcpci_maxim: Add support for Sink FRS Badhri Jagan Sridharan
2020-09-29 2:39 ` [PATCH v9 09/15] usb: typec: tcpm: frs sourcing vbus callback Badhri Jagan Sridharan
2020-09-29 2:39 ` [PATCH v9 10/15] usb: typec: tcpci: " Badhri Jagan Sridharan
2020-09-29 2:40 ` [PATCH v9 11/15] usb: typec: tcpci_max77759: Fix vbus stuck on upon diconnecting sink Badhri Jagan Sridharan
2020-09-29 2:40 ` [PATCH v9 12/15] usb: typec: tcpm: Parse frs type-c current from device tree Badhri Jagan Sridharan
2020-09-29 2:40 ` [PATCH v9 13/15] usb: typec: tcpm: Implement enabling Auto Discharge disconnect support Badhri Jagan Sridharan
2020-09-29 2:40 ` [PATCH v9 14/15] usb: typec: tcpci: Implement Auto discharge disconnect callbacks Badhri Jagan Sridharan
2020-09-29 2:40 ` [PATCH v9 15/15] usb: typec: tcpci_maxim: Enable auto discharge disconnect Badhri Jagan Sridharan
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200929024004.244992-8-badhri@google.com \
--to=badhri@google.com \
--cc=alexandre.belloni@bootlin.com \
--cc=broonie@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=gregkh@linuxfoundation.org \
--cc=heikki.krogerus@linux.intel.com \
--cc=lee.jones@linaro.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=linux@roeck-us.net \
--cc=mripard@kernel.org \
--cc=pmalani@chromium.org \
--cc=robh+dt@kernel.org \
--cc=treding@nvidia.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.