All of lore.kernel.org
 help / color / mirror / Atom feed
From: Heikki Krogerus <heikki.krogerus@linux.intel.com>
To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Guenter Roeck <linux@roeck-us.net>, Ajay Gupta <ajayg@nvidia.com>,
	linux-usb@vger.kernel.org
Subject: [PATCH v3 04/18] usb: typec: tcpm: Start using struct typec_operations
Date: Fri, 25 Oct 2019 11:23:10 +0300	[thread overview]
Message-ID: <20191025082324.75731-5-heikki.krogerus@linux.intel.com> (raw)
In-Reply-To: <20191025082324.75731-1-heikki.krogerus@linux.intel.com>

Supplying the operation callbacks as part of a struct
typec_operations instead of as part of struct
typec_capability during port registration.

Signed-off-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Reviewed-by: Guenter Roeck <linux@roeck-us.net>
---
 drivers/usb/typec/tcpm/tcpm.c | 45 ++++++++++++++++-------------------
 1 file changed, 20 insertions(+), 25 deletions(-)

diff --git a/drivers/usb/typec/tcpm/tcpm.c b/drivers/usb/typec/tcpm/tcpm.c
index 5f61d9977a15..bc9edb4c013b 100644
--- a/drivers/usb/typec/tcpm/tcpm.c
+++ b/drivers/usb/typec/tcpm/tcpm.c
@@ -390,12 +390,6 @@ static enum tcpm_state tcpm_default_state(struct tcpm_port *port)
 	return SRC_UNATTACHED;
 }
 
-static inline
-struct tcpm_port *typec_cap_to_tcpm(const struct typec_capability *cap)
-{
-	return container_of(cap, struct tcpm_port, typec_caps);
-}
-
 static bool tcpm_port_is_disconnected(struct tcpm_port *port)
 {
 	return (!port->attached && port->cc1 == TYPEC_CC_OPEN &&
@@ -3970,10 +3964,9 @@ void tcpm_pd_hard_reset(struct tcpm_port *port)
 }
 EXPORT_SYMBOL_GPL(tcpm_pd_hard_reset);
 
-static int tcpm_dr_set(const struct typec_capability *cap,
-		       enum typec_data_role data)
+static int tcpm_dr_set(struct typec_port *p, enum typec_data_role data)
 {
-	struct tcpm_port *port = typec_cap_to_tcpm(cap);
+	struct tcpm_port *port = typec_get_drvdata(p);
 	int ret;
 
 	mutex_lock(&port->swap_lock);
@@ -4038,10 +4031,9 @@ static int tcpm_dr_set(const struct typec_capability *cap,
 	return ret;
 }
 
-static int tcpm_pr_set(const struct typec_capability *cap,
-		       enum typec_role role)
+static int tcpm_pr_set(struct typec_port *p, enum typec_role role)
 {
-	struct tcpm_port *port = typec_cap_to_tcpm(cap);
+	struct tcpm_port *port = typec_get_drvdata(p);
 	int ret;
 
 	mutex_lock(&port->swap_lock);
@@ -4082,10 +4074,9 @@ static int tcpm_pr_set(const struct typec_capability *cap,
 	return ret;
 }
 
-static int tcpm_vconn_set(const struct typec_capability *cap,
-			  enum typec_role role)
+static int tcpm_vconn_set(struct typec_port *p, enum typec_role role)
 {
-	struct tcpm_port *port = typec_cap_to_tcpm(cap);
+	struct tcpm_port *port = typec_get_drvdata(p);
 	int ret;
 
 	mutex_lock(&port->swap_lock);
@@ -4122,9 +4113,9 @@ static int tcpm_vconn_set(const struct typec_capability *cap,
 	return ret;
 }
 
-static int tcpm_try_role(const struct typec_capability *cap, int role)
+static int tcpm_try_role(struct typec_port *p, int role)
 {
-	struct tcpm_port *port = typec_cap_to_tcpm(cap);
+	struct tcpm_port *port = typec_get_drvdata(p);
 	struct tcpc_dev	*tcpc = port->tcpc;
 	int ret = 0;
 
@@ -4331,10 +4322,9 @@ static void tcpm_init(struct tcpm_port *port)
 	tcpm_set_state(port, PORT_RESET, 0);
 }
 
-static int tcpm_port_type_set(const struct typec_capability *cap,
-			      enum typec_port_type type)
+static int tcpm_port_type_set(struct typec_port *p, enum typec_port_type type)
 {
-	struct tcpm_port *port = typec_cap_to_tcpm(cap);
+	struct tcpm_port *port = typec_get_drvdata(p);
 
 	mutex_lock(&port->lock);
 	if (type == port->port_type)
@@ -4359,6 +4349,14 @@ static int tcpm_port_type_set(const struct typec_capability *cap,
 	return 0;
 }
 
+static const struct typec_operations tcpm_ops = {
+	.try_role = tcpm_try_role,
+	.dr_set = tcpm_dr_set,
+	.pr_set = tcpm_pr_set,
+	.vconn_set = tcpm_vconn_set,
+	.port_type_set = tcpm_port_type_set
+};
+
 void tcpm_tcpc_reset(struct tcpm_port *port)
 {
 	mutex_lock(&port->lock);
@@ -4772,11 +4770,8 @@ struct tcpm_port *tcpm_register_port(struct device *dev, struct tcpc_dev *tcpc)
 	port->typec_caps.fwnode = tcpc->fwnode;
 	port->typec_caps.revision = 0x0120;	/* Type-C spec release 1.2 */
 	port->typec_caps.pd_revision = 0x0300;	/* USB-PD spec release 3.0 */
-	port->typec_caps.dr_set = tcpm_dr_set;
-	port->typec_caps.pr_set = tcpm_pr_set;
-	port->typec_caps.vconn_set = tcpm_vconn_set;
-	port->typec_caps.try_role = tcpm_try_role;
-	port->typec_caps.port_type_set = tcpm_port_type_set;
+	port->typec_caps.driver_data = port;
+	port->typec_caps.ops = &tcpm_ops;
 
 	port->partner_desc.identity = &port->partner_ident;
 	port->port_type = port->typec_caps.type;
-- 
2.23.0


  parent reply	other threads:[~2019-10-25  8:23 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-10-25  8:23 [PATCH v3 00/18] usb: typec: API improvements Heikki Krogerus
2019-10-25  8:23 ` [PATCH v3 01/18] usb: typec: Copy everything from struct typec_capability during registration Heikki Krogerus
2019-10-25  8:23 ` [PATCH v3 02/18] usb: typec: Introduce typec_get_drvdata() Heikki Krogerus
2019-10-25  8:23 ` [PATCH v3 03/18] usb: typec: Separate the operations vector Heikki Krogerus
2019-10-25  8:23 ` Heikki Krogerus [this message]
2019-10-25  8:23 ` [PATCH v3 05/18] usb: typec: tps6598x: Start using struct typec_operations Heikki Krogerus
2019-10-25  8:23 ` [PATCH v3 06/18] usb: typec: ucsi: " Heikki Krogerus
2019-10-25  8:23 ` [PATCH v3 07/18] usb: typec: hd3ss3220: " Heikki Krogerus
2019-10-25  8:23 ` [PATCH v3 08/18] usb: typec: Remove the callback members from struct typec_capability Heikki Krogerus
2019-10-25  8:23 ` [PATCH v3 09/18] usb: typec: Remove unused " Heikki Krogerus
2019-10-25  8:23 ` [PATCH v3 10/18] usb: typec: hd3ss3220: Give the connector fwnode to the port device Heikki Krogerus
2019-11-02 16:11   ` Guenter Roeck
2019-11-04  7:50     ` Biju Das
2019-10-25  8:23 ` [PATCH v3 11/18] usb: typec: ucsi: Simplified registration and I/O API Heikki Krogerus
2019-11-02 16:21   ` Guenter Roeck
2019-10-25  8:23 ` [PATCH v3 12/18] usb: typec: ucsi: acpi: Move to the new API Heikki Krogerus
2019-11-02 16:31   ` Guenter Roeck
2019-11-04  9:07     ` Heikki Krogerus
2019-10-25  8:23 ` [PATCH v3 13/18] usb: typec: ucsi: ccg: " Heikki Krogerus
2019-11-02 16:34   ` Guenter Roeck
2019-11-04  8:45     ` Heikki Krogerus
2019-10-25  8:23 ` [PATCH v3 14/18] usb: typec: ucsi: Remove the old API Heikki Krogerus
2019-10-25  8:23 ` [PATCH v3 15/18] usb: typec: ucsi: Remove struct ucsi_control Heikki Krogerus
2019-11-02 17:00   ` Guenter Roeck
2019-10-25  8:23 ` [PATCH v3 16/18] usb: typec: ucsi: Remove all bit-fields Heikki Krogerus
2019-10-25  8:23 ` [PATCH v3 17/18] usb: typec: ucsi: New error codes Heikki Krogerus
2019-10-25  8:23 ` [PATCH v3 18/18] usb: typec: ucsi: Optimise ucsi_unregister() Heikki Krogerus

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=20191025082324.75731-5-heikki.krogerus@linux.intel.com \
    --to=heikki.krogerus@linux.intel.com \
    --cc=ajayg@nvidia.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=linux-usb@vger.kernel.org \
    --cc=linux@roeck-us.net \
    /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.