From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753496AbcEXNmb (ORCPT ); Tue, 24 May 2016 09:42:31 -0400 Received: from bh-25.webhostbox.net ([208.91.199.152]:53244 "EHLO bh-25.webhostbox.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751299AbcEXNmK (ORCPT ); Tue, 24 May 2016 09:42:10 -0400 Subject: Re: [RFC PATCHv2] usb: USB Type-C Connector Class To: Heikki Krogerus References: <1463661894-22820-1-git-send-email-heikki.krogerus@linux.intel.com> Cc: Greg KH , Mathias Nyman , Felipe Balbi , Oliver Neukum , Rajaram R , Andy Shevchenko , linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org From: Guenter Roeck Message-ID: <57445A31.9060304@roeck-us.net> Date: Tue, 24 May 2016 06:42:09 -0700 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.7.2 MIME-Version: 1.0 In-Reply-To: <1463661894-22820-1-git-send-email-heikki.krogerus@linux.intel.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit X-Authenticated_sender: linux@roeck-us.net X-OutGoing-Spam-Status: No, score=-1.0 X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - bh-25.webhostbox.net X-AntiAbuse: Original Domain - vger.kernel.org X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - roeck-us.net X-Get-Message-Sender-Via: bh-25.webhostbox.net: authenticated_id: linux@roeck-us.net X-Authenticated-Sender: bh-25.webhostbox.net: linux@roeck-us.net X-Source: X-Source-Args: X-Source-Dir: Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 05/19/2016 05:44 AM, Heikki Krogerus wrote: > The purpose of this class is to provide unified interface for user > space to get the status and basic information about USB Type-C > Connectors in the system, control data role swapping, and when USB PD > is available, also power role swapping and Alternate Modes. > > Signed-off-by: Heikki Krogerus > --- > drivers/usb/Kconfig | 2 + > drivers/usb/Makefile | 2 + > drivers/usb/type-c/Kconfig | 7 + > drivers/usb/type-c/Makefile | 1 + > drivers/usb/type-c/typec.c | 957 ++++++++++++++++++++++++++++++++++++++++++++ > include/linux/usb/typec.h | 230 +++++++++++ > 6 files changed, 1199 insertions(+) > create mode 100644 drivers/usb/type-c/Kconfig > create mode 100644 drivers/usb/type-c/Makefile > create mode 100644 drivers/usb/type-c/typec.c > create mode 100644 include/linux/usb/typec.h > Hi, > +/* > + * struct typec_capability - USB Type-C Port Capabilities > + * @role: DFP (Host-only), UFP (Device-only) or DRP (Dual Role) > + * @usb_pd: USB Power Delivery support > + * @alt_modes: Alternate Modes the connector supports (null terminated) > + * @audio_accessory: Audio Accessory Adapter Mode support > + * @debug_accessory: Debug Accessory Mode support > + * @fix_role: Set a fixed data role for DRP port > + * @dr_swap: Data Role Swap support > + * @pr_swap: Power Role Swap support > + * @vconn_swap: VCONN Swap support > + * @activate_mode: Enter/exit given Alternate Mode > + * > + * Static capabilities of a single USB Type-C port. > + */ > +struct typec_capability { > + enum typec_data_role role; > + unsigned int usb_pd:1; > + struct typec_altmode *alt_modes; > + unsigned int audio_accessory:1; > + unsigned int debug_accessory:1; > + > + int (*fix_role)(struct typec_port *, > + enum typec_data_role); > + > + int (*dr_swap)(struct typec_port *); > + int (*pr_swap)(struct typec_port *); > + int (*vconn_swap)(struct typec_port *); > + The function parameter in those calls is all but useless to the caller. It needs to store the typec_port returned from typec_register(), create a list of ports, and then search through this list each time one of the functions is called. This is quite expensive for no good reason. Previously, with typec_port exported, the called code could use the stored caps pointer to map to its internal data structures. This is no longer possible. I think it would be useful to provide a better means for the called function to identify its context. Maybe provide a pointer to the private data in the registration function and use it as parameter in the callback functions ? Thanks, Guenter