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:
Hi,

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
possible.

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.

Guenter