Re: [RFC PATCHv2] usb: USB Type-C Connector Class

From: Guenter Roeck
Date: Wed May 25 2016 - 09:12:43 EST

On 05/25/2016 04:30 AM, Heikki Krogerus wrote:

On Tue, May 24, 2016 at 06:42:09AM -0700, Guenter Roeck wrote:
+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

True, the API now is in practice broken.

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 ?

Sounds reasonable.

I'll send a follow-up patch hopefully later today which fixes all the problems
I have found so far.