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>
Cc: linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org,
Kyle Tso <kyletso@google.com>,
devicetree@vger.kernel.org,
Badhri Jagan Sridharan <badhri@google.com>
Subject: [PATCH 2/4] usb: typec: tcpci: Add tcpc chip level callbacks
Date: Thu, 11 Mar 2021 02:03:11 -0800 [thread overview]
Message-ID: <20210311100313.3591254-2-badhri@google.com> (raw)
In-Reply-To: <20210311100313.3591254-1-badhri@google.com>
This change adds chip callbacks for the following operations:
1. Setting/getting vbus voltage and current limits.
2. Notifying presence of PD capable partner
3. Notifying port role
4. Notifying orientation
Signed-off-by: Badhri Jagan Sridharan <badhri@google.com>
---
drivers/usb/typec/tcpm/tcpci.c | 45 +++++++++++++++++++++++++++++++++-
drivers/usb/typec/tcpm/tcpci.h | 7 ++++++
2 files changed, 51 insertions(+), 1 deletion(-)
diff --git a/drivers/usb/typec/tcpm/tcpci.c b/drivers/usb/typec/tcpm/tcpci.c
index 027afd7dfdce..35f229d1dde8 100644
--- a/drivers/usb/typec/tcpm/tcpci.c
+++ b/drivers/usb/typec/tcpm/tcpci.c
@@ -265,9 +265,16 @@ static int tcpci_set_polarity(struct tcpc_dev *tcpc,
if (ret < 0)
return ret;
- return regmap_write(tcpci->regmap, TCPC_TCPC_CTRL,
+ ret = regmap_write(tcpci->regmap, TCPC_TCPC_CTRL,
(polarity == TYPEC_POLARITY_CC2) ?
TCPC_TCPC_CTRL_ORIENTATION : 0);
+ if (ret < 0)
+ return ret;
+
+ if (tcpci->data->set_cc_polarity)
+ tcpci->data->set_cc_polarity(tcpci, tcpci->data, polarity);
+
+ return ret;
}
static void tcpci_set_partner_usb_comm_capable(struct tcpc_dev *tcpc, bool capable)
@@ -395,6 +402,9 @@ static int tcpci_set_roles(struct tcpc_dev *tcpc, bool attached,
if (ret < 0)
return ret;
+ if (tcpci->data->set_roles)
+ tcpci->data->set_roles(tcpci, tcpci->data, attached, role, data);
+
return 0;
}
@@ -439,6 +449,36 @@ static bool tcpci_is_vbus_vsafe0v(struct tcpc_dev *tcpc)
return !!(reg & TCPC_EXTENDED_STATUS_VSAFE0V);
}
+static void tcpci_set_pd_capable(struct tcpc_dev *tcpc, bool capable)
+{
+ struct tcpci *tcpci = tcpc_to_tcpci(tcpc);
+
+ if (tcpci->data->set_pd_capable)
+ tcpci->data->set_pd_capable(tcpci, tcpci->data, capable);
+}
+
+static int tcpci_get_current_limit(struct tcpc_dev *tcpc)
+{
+ struct tcpci *tcpci = tcpc_to_tcpci(tcpc);
+
+ if (tcpci->data->get_current_limit)
+ return tcpci->data->get_current_limit(tcpci, tcpci->data);
+
+ return 0;
+}
+
+static int tcpci_set_current_limit(struct tcpc_dev *tcpc, u32 max_ma, u32 mv)
+{
+ struct tcpci *tcpci = tcpc_to_tcpci(tcpc);
+ int ret = 0;
+
+ if (tcpci->data->set_current_limit)
+ ret = tcpci->data->set_current_limit(tcpci, tcpci->data, max_ma,
+ mv);
+
+ return ret;
+}
+
static int tcpci_set_vbus(struct tcpc_dev *tcpc, bool source, bool sink)
{
struct tcpci *tcpci = tcpc_to_tcpci(tcpc);
@@ -744,6 +784,9 @@ struct tcpci *tcpci_register_port(struct device *dev, struct tcpci_data *data)
tcpci->tcpc.enable_frs = tcpci_enable_frs;
tcpci->tcpc.frs_sourcing_vbus = tcpci_frs_sourcing_vbus;
tcpci->tcpc.set_partner_usb_comm_capable = tcpci_set_partner_usb_comm_capable;
+ tcpci->tcpc.set_pd_capable = tcpci_set_pd_capable;
+ tcpci->tcpc.set_current_limit = tcpci_set_current_limit;
+ tcpci->tcpc.get_current_limit = tcpci_get_current_limit;
if (tcpci->data->auto_discharge_disconnect) {
tcpci->tcpc.enable_auto_vbus_discharge = tcpci_enable_auto_vbus_discharge;
diff --git a/drivers/usb/typec/tcpm/tcpci.h b/drivers/usb/typec/tcpm/tcpci.h
index 57b6e24e0a0c..6fdad15ce1f2 100644
--- a/drivers/usb/typec/tcpm/tcpci.h
+++ b/drivers/usb/typec/tcpm/tcpci.h
@@ -181,6 +181,13 @@ struct tcpci_data {
void (*frs_sourcing_vbus)(struct tcpci *tcpci, struct tcpci_data *data);
void (*set_partner_usb_comm_capable)(struct tcpci *tcpci, struct tcpci_data *data,
bool capable);
+ void (*set_pd_capable)(struct tcpci *tcpci, struct tcpci_data *data, bool capable);
+ int (*get_current_limit)(struct tcpci *tcpci, struct tcpci_data *data);
+ int (*set_current_limit)(struct tcpci *tcpci, struct tcpci_data *data, u32 max_ma, u32 mv);
+ void (*set_roles)(struct tcpci *tcpci, struct tcpci_data *data, bool attached,
+ enum typec_role role, enum typec_data_role data_role);
+ void (*set_cc_polarity)(struct tcpci *tcpci, struct tcpci_data *data,
+ enum typec_cc_polarity polarity);
};
struct tcpci *tcpci_register_port(struct device *dev, struct tcpci_data *data);
--
2.31.0.rc2.261.g7f71774620-goog
next prev parent reply other threads:[~2021-03-11 10:04 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-03-11 10:03 [PATCH 1/4] usb: typec: tcpm: Add callback to notify pd_capable partner Badhri Jagan Sridharan
2021-03-11 10:03 ` Badhri Jagan Sridharan [this message]
2021-03-11 10:03 ` [PATCH 3/4] usb: typec: tcpci_maxim: configure charging & data paths Badhri Jagan Sridharan
2021-03-11 13:33 ` Heikki Krogerus
2021-03-12 5:08 ` Badhri Jagan Sridharan
2021-03-16 22:02 ` Badhri Jagan Sridharan
2021-03-11 10:03 ` [PATCH 4/4] dt-bindings: usb: Add chg-psy-name property Maxim 33359 binding Badhri Jagan Sridharan
2021-03-24 14:50 ` Rob Herring
2021-03-24 20:01 ` 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=20210311100313.3591254-2-badhri@google.com \
--to=badhri@google.com \
--cc=devicetree@vger.kernel.org \
--cc=gregkh@linuxfoundation.org \
--cc=heikki.krogerus@linux.intel.com \
--cc=kyletso@google.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=linux@roeck-us.net \
--cc=robh+dt@kernel.org \
/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.