From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Cyrus-Session-Id: sloti22d1t05-1068492-1519594758-2-4751112845079769303 X-Sieve: CMU Sieve 3.0 X-Spam-known-sender: no X-Spam-score: 0.0 X-Spam-hits: BAYES_00 -1.9, HEADER_FROM_DIFFERENT_DOMAINS 0.001, RCVD_IN_DNSWL_HI -5, T_RP_MATCHES_RCVD -0.01, LANGUAGES enro, BAYES_USED global, SA_VERSION 3.4.0 X-Spam-source: IP='209.132.180.67', Host='vger.kernel.org', Country='CN', FromHeader='net', MailFrom='org' X-Spam-charsets: plain='utf-8' X-Resolved-to: greg@kroah.com X-Delivered-to: greg@kroah.com X-Mail-from: linux-usb-owner@vger.kernel.org ARC-Seal: i=1; a=rsa-sha256; cv=none; d=messagingengine.com; s=arctest; t=1519594757; b=ntt9n/nHr5AEDawhyj3Ftj5Fhh3zyqYvaRSlTnM0H3bNiMh SAbdhI9znNEOzrOCy/DVuCibnToxxPd3T2eKhECyD6BIVheOHMuBpVnHDMN5Ighv z7MFdw/9r9Al4vx7rgfBJj79doHUYQIuKpmBBqnm8zRcMivf8pdta7RwBQJikUUs YjiuMkYVk2MdP8mafEkVwF/MTklJZkuia52plQ43k5UGrntO3leJ1BILbv5Yr5pZ r7pL/0Y9iS9XTsbN8cuQk+KsCgBi7t+6t2d+SdalJDQ0aJ65aR4OnFY2kvNtgKxn DR+enIRnlQE2RiKuAofwFuvEgsReuonqDIbwLyQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=subject:to:cc:references:from:message-id :date:mime-version:in-reply-to:content-type :content-transfer-encoding:sender:list-id; s=arctest; t= 1519594757; bh=jYeTgc6u61vVcwnoG83hfLxxrKqdNrCfo41V2SjXtm4=; b=Z WrlWz+E3a+2Kvm8C3bA6uQsjcjvjbsJXM1Wpefy4NXVjh28W84p8UIfqwR0Wme8C 9IvOOEIZBLpD5YWJE2OgcIsqoyGeCkSGI22FXy8P5uDh2fsdb/17wQABz2P3jcqs Ep0qYGUyV4WRAVOMMx6axgAwCarwbnPqSYkebsZ4cbtjoocnJAxW80M9oyM1ywv7 5uxLFclBS6dyh2ADEv67KaATvRghdeIcrvGtphqu0pphue3awpQQ7SsoItATJbrn NXxakxbDuo2aV7gZHGTQKZlazeNDgRukIWGYDxwykbpxxf+4pJ2QOCtdb0pOXUEf TKo8qpj0viGn0ES+mxyWA== ARC-Authentication-Results: i=1; mx6.messagingengine.com; arc=none (no signatures found); dkim=fail (message has been altered; 2048-bit rsa key sha256) header.d=gmail.com header.i=@gmail.com header.b=gKmNU/Ta x-bits=2048 x-keytype=rsa x-algorithm=sha256 x-selector=20161025; dmarc=none (p=none,has-list-id=yes,d=none) header.from=roeck-us.net; iprev=pass policy.iprev=209.132.180.67 (vger.kernel.org); spf=none smtp.mailfrom=linux-usb-owner@vger.kernel.org smtp.helo=vger.kernel.org; x-aligned-from=fail; x-google-dkim=fail (message has been altered; 2048-bit rsa key) header.d=1e100.net header.i=@1e100.net header.b=W4z5vWk8; x-ptr=pass x-ptr-helo=vger.kernel.org x-ptr-lookup=vger.kernel.org; x-return-mx=pass smtp.domain=vger.kernel.org smtp.result=pass smtp_org.domain=kernel.org smtp_org.result=pass smtp_is_org_domain=no header.domain=roeck-us.net header.result=pass header_is_org_domain=yes Authentication-Results: mx6.messagingengine.com; arc=none (no signatures found); dkim=fail (message has been altered; 2048-bit rsa key sha256) header.d=gmail.com header.i=@gmail.com header.b=gKmNU/Ta x-bits=2048 x-keytype=rsa x-algorithm=sha256 x-selector=20161025; dmarc=none (p=none,has-list-id=yes,d=none) header.from=roeck-us.net; iprev=pass policy.iprev=209.132.180.67 (vger.kernel.org); spf=none smtp.mailfrom=linux-usb-owner@vger.kernel.org smtp.helo=vger.kernel.org; x-aligned-from=fail; x-google-dkim=fail (message has been altered; 2048-bit rsa key) header.d=1e100.net header.i=@1e100.net header.b=W4z5vWk8; x-ptr=pass x-ptr-helo=vger.kernel.org x-ptr-lookup=vger.kernel.org; x-return-mx=pass smtp.domain=vger.kernel.org smtp.result=pass smtp_org.domain=kernel.org smtp_org.result=pass smtp_is_org_domain=no header.domain=roeck-us.net header.result=pass header_is_org_domain=yes Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751935AbeBYVi7 (ORCPT ); Sun, 25 Feb 2018 16:38:59 -0500 Received: from mail-pf0-f196.google.com ([209.85.192.196]:43978 "EHLO mail-pf0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751760AbeBYVi5 (ORCPT ); Sun, 25 Feb 2018 16:38:57 -0500 X-Google-Smtp-Source: AH8x227qi30zznScEdjlJGg3nY8GG7amnZTaLSCDEspJKGxsoRUtQJdGBn01anVj1tiJMq+3nvjLSg== Subject: Re: [PATCH v2 06/12] usb: typec: tcpm: Use new Type-C switch/mux and usb-role-switch functions To: Hans de Goede , Darren Hart , Andy Shevchenko , MyungJoo Ham , Chanwoo Choi , Mathias Nyman , Greg Kroah-Hartman , Heikki Krogerus Cc: platform-driver-x86@vger.kernel.org, linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org References: <20180225152510.10159-1-hdegoede@redhat.com> <20180225152510.10159-7-hdegoede@redhat.com> From: Guenter Roeck Message-ID: <0ca0061c-c497-d33b-d500-6927129f33d2@roeck-us.net> Date: Sun, 25 Feb 2018 13:38:54 -0800 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.6.0 MIME-Version: 1.0 In-Reply-To: <20180225152510.10159-7-hdegoede@redhat.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Sender: linux-usb-owner@vger.kernel.org X-Mailing-List: linux-usb@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-Mailing-List: linux-kernel@vger.kernel.org List-ID: On 02/25/2018 07:25 AM, Hans de Goede wrote: > Remove the unused (not implemented anywhere) tcpc_mux_dev abstraction > and replace it with calling the new typec_set_orientation, > usb_role_switch_set and typec_set_mode functions. > > Reviewed-by: Heikki Krogerus > Signed-off-by: Hans de Goede Reviewed-by: Guenter Roeck > --- > Changes in v2: > -Added Heikki's Reviewed-by > --- > drivers/usb/typec/Kconfig | 1 + > drivers/usb/typec/fusb302/fusb302.c | 1 - > drivers/usb/typec/tcpm.c | 46 ++++++++++++++++++++++++++++--------- > include/linux/usb/tcpm.h | 10 -------- > 4 files changed, 36 insertions(+), 22 deletions(-) > > diff --git a/drivers/usb/typec/Kconfig b/drivers/usb/typec/Kconfig > index bcb2744c5977..a2a0684e7c82 100644 > --- a/drivers/usb/typec/Kconfig > +++ b/drivers/usb/typec/Kconfig > @@ -48,6 +48,7 @@ if TYPEC > config TYPEC_TCPM > tristate "USB Type-C Port Controller Manager" > depends on USB > + select USB_ROLE_SWITCH > help > The Type-C Port Controller Manager provides a USB PD and USB Type-C > state machine for use with Type-C Port Controllers. > diff --git a/drivers/usb/typec/fusb302/fusb302.c b/drivers/usb/typec/fusb302/fusb302.c > index dcd8ef085b30..a7b06053a538 100644 > --- a/drivers/usb/typec/fusb302/fusb302.c > +++ b/drivers/usb/typec/fusb302/fusb302.c > @@ -1249,7 +1249,6 @@ static void init_tcpc_dev(struct tcpc_dev *fusb302_tcpc_dev) > fusb302_tcpc_dev->set_roles = tcpm_set_roles; > fusb302_tcpc_dev->start_drp_toggling = tcpm_start_drp_toggling; > fusb302_tcpc_dev->pd_transmit = tcpm_pd_transmit; > - fusb302_tcpc_dev->mux = NULL; > } > > static const char * const cc_polarity_name[] = { > diff --git a/drivers/usb/typec/tcpm.c b/drivers/usb/typec/tcpm.c > index 00ca2822432f..bfcaf6618a1f 100644 > --- a/drivers/usb/typec/tcpm.c > +++ b/drivers/usb/typec/tcpm.c > @@ -20,6 +20,7 @@ > #include > #include > #include > +#include > #include > #include > #include > @@ -176,6 +177,7 @@ struct tcpm_port { > struct typec_port *typec_port; > > struct tcpc_dev *tcpc; > + struct usb_role_switch *role_sw; > > enum typec_role vconn_role; > enum typec_role pwr_role; > @@ -618,18 +620,25 @@ void tcpm_pd_transmit_complete(struct tcpm_port *port, > EXPORT_SYMBOL_GPL(tcpm_pd_transmit_complete); > > static int tcpm_mux_set(struct tcpm_port *port, enum tcpc_mux_mode mode, > - enum usb_role usb_role) > + enum usb_role usb_role, > + enum typec_orientation orientation) > { > - int ret = 0; > + int ret; > > - tcpm_log(port, "Requesting mux mode %d, usb-role %d, polarity %d", > - mode, usb_role, port->polarity); > + tcpm_log(port, "Requesting mux mode %d, usb-role %d, orientation %d", > + mode, usb_role, orientation); > > - if (port->tcpc->mux) > - ret = port->tcpc->mux->set(port->tcpc->mux, mode, usb_role, > - port->polarity); > + ret = typec_set_orientation(port->typec_port, orientation); > + if (ret) > + return ret; > > - return ret; > + if (port->role_sw) { > + ret = usb_role_switch_set_role(port->role_sw, usb_role); > + if (ret) > + return ret; > + } > + > + return typec_set_mode(port->typec_port, mode); > } > > static int tcpm_set_polarity(struct tcpm_port *port, > @@ -742,15 +751,21 @@ static int tcpm_set_attached_state(struct tcpm_port *port, bool attached) > static int tcpm_set_roles(struct tcpm_port *port, bool attached, > enum typec_role role, enum typec_data_role data) > { > + enum typec_orientation orientation; > enum usb_role usb_role; > int ret; > > + if (port->polarity == TYPEC_POLARITY_CC1) > + orientation = TYPEC_ORIENTATION_NORMAL; > + else > + orientation = TYPEC_ORIENTATION_REVERSE; > + > if (data == TYPEC_HOST) > usb_role = USB_ROLE_HOST; > else > usb_role = USB_ROLE_DEVICE; > > - ret = tcpm_mux_set(port, TYPEC_MUX_USB, usb_role); > + ret = tcpm_mux_set(port, TYPEC_MUX_USB, usb_role, orientation); > if (ret < 0) > return ret; > > @@ -2097,7 +2112,8 @@ static int tcpm_src_attach(struct tcpm_port *port) > out_disable_pd: > port->tcpc->set_pd_rx(port->tcpc, false); > out_disable_mux: > - tcpm_mux_set(port, TYPEC_MUX_NONE, USB_ROLE_NONE); > + tcpm_mux_set(port, TYPEC_MUX_NONE, USB_ROLE_NONE, > + TYPEC_ORIENTATION_NONE); > return ret; > } > > @@ -2141,7 +2157,8 @@ static void tcpm_reset_port(struct tcpm_port *port) > tcpm_init_vconn(port); > tcpm_set_current_limit(port, 0, 0); > tcpm_set_polarity(port, TYPEC_POLARITY_CC1); > - tcpm_mux_set(port, TYPEC_MUX_NONE, USB_ROLE_NONE); > + tcpm_mux_set(port, TYPEC_MUX_NONE, USB_ROLE_NONE, > + TYPEC_ORIENTATION_NONE); > tcpm_set_attached_state(port, false); > port->try_src_count = 0; > port->try_snk_count = 0; > @@ -3742,6 +3759,12 @@ struct tcpm_port *tcpm_register_port(struct device *dev, struct tcpc_dev *tcpc) > port->partner_desc.identity = &port->partner_ident; > port->port_type = tcpc->config->type; > > + port->role_sw = usb_role_switch_get(port->dev); > + if (IS_ERR(port->role_sw)) { > + err = PTR_ERR(port->role_sw); > + goto out_destroy_wq; > + } > + > port->typec_port = typec_register_port(port->dev, &port->typec_caps); > if (IS_ERR(port->typec_port)) { > err = PTR_ERR(port->typec_port); > @@ -3777,6 +3800,7 @@ struct tcpm_port *tcpm_register_port(struct device *dev, struct tcpc_dev *tcpc) > return port; > > out_destroy_wq: > + usb_role_switch_put(port->role_sw); > destroy_workqueue(port->wq); > return ERR_PTR(err); > } > diff --git a/include/linux/usb/tcpm.h b/include/linux/usb/tcpm.h > index 268721bff2c1..fe3508e6e1df 100644 > --- a/include/linux/usb/tcpm.h > +++ b/include/linux/usb/tcpm.h > @@ -16,7 +16,6 @@ > #define __LINUX_USB_TCPM_H > > #include > -#include > #include > #include "pd.h" > > @@ -112,14 +111,6 @@ enum tcpc_mux_mode { > TCPC_MUX_DP_ENABLED, > }; > > -struct tcpc_mux_dev { > - int (*set)(struct tcpc_mux_dev *dev, enum tcpc_mux_mode mux_mode, > - enum usb_role usb_role, > - enum typec_cc_polarity polarity); > - bool dfp_only; > - void *priv_data; > -}; > - > /** > * struct tcpc_dev - Port configuration and callback functions > * @config: Pointer to port configuration > @@ -171,7 +162,6 @@ struct tcpc_dev { > int (*try_role)(struct tcpc_dev *dev, int role); > int (*pd_transmit)(struct tcpc_dev *dev, enum tcpm_transmit_type type, > const struct pd_message *msg); > - struct tcpc_mux_dev *mux; > }; > > struct tcpm_port; >