On Mon, 18 Aug 2014, Peter Chen wrote:

> We introduce the connect API at usb_gadget_driver, the udc driver
> uses it to tell gadget driver that it is ready to CONNECT, and the
> dp can be pulled up from now on.
> 
> Meanwhile, we introduce an API usb_udc_ready_to_connect to encapsulate
> above operation.
> 
> Signed-off-by: Peter Chen <peter.c...@freescale.com>
> ---
>  include/linux/usb/gadget.h |   29 ++++++++++++++++++++++++++++-
>  1 file changed, 28 insertions(+), 1 deletion(-)
> 
> diff --git a/include/linux/usb/gadget.h b/include/linux/usb/gadget.h
> index c3a6185..385af59 100644
> --- a/include/linux/usb/gadget.h
> +++ b/include/linux/usb/gadget.h
> @@ -873,12 +873,39 @@ struct usb_gadget_driver {
>       void                    (*disconnect)(struct usb_gadget *);
>       void                    (*suspend)(struct usb_gadget *);
>       void                    (*resume)(struct usb_gadget *);
> +     int                     (*connect)(struct usb_gadget *, bool connect);
>  
>       /* FIXME support safe rmmod */
>       struct device_driver    driver;
>  };

This looks strange.  Why do you have the "bool connect" parameter?  
There's already a disconnect callback.

Also, you forgot to update the kerneldoc.

> -
> +/**
> + * usb_udc_ready_to_connect - The udc is ready to connect (physical pullup 
> dp)
> + * @driver: the gadget driver for this gadget
> + * @gadget: the udc device
> + * @connect: whether the udc is ready to connect or not
> + *
> + * The USB 2.0 spec 7.2.1 and 7.1.5 requires the dp should not be pulled up 
> if
> + * the vbus is not there, else it will fail Back-voltage Testing at below
> + * USB-IF certification test.
> + * www.usb.org/developers/docs/USB-IFTestProc1_3.pdf
> + *
> + * Some udcs have hardware logic that even the pullup bit is set by software,
> + * it can still meet above Back-voltage Testing requirement, these kinds of
> + * udcs only need to set connect as true at its .udc_start. But other udcs
> + * may have no this capability, so they need the software pullup bit is not
> + * set when the vbus is not there, otherwise it will break the spec, and 
> can't
> + * pass Back-voltage Testing. So they need to set connect as false when the
> + * vbus is not there, and set connect as true when the vbus is there.
> + */
> +static inline int usb_udc_ready_to_connect(struct usb_gadget_driver *driver,
> +             struct usb_gadget *gadget, bool connect)
> +{
> +     if (driver->connect)
> +             return driver->connect(gadget, connect);
> +     else
> +             return -EOPNOTSUPP;
> +}
>  
>  /*-------------------------------------------------------------------------*/

Again, the "connect" argument isn't needed.

Alan Stern

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to