On Thu, Aug 23, 2012 at 07:30:47PM +0200, Marc Kleine-Budde wrote:
> From: Michael Grzeschik <m.grzesc...@pengutronix.de>
> 
> Add function to physicaly enable or disable of pullup connection on the USB-D+
> line. The uvc gaget will fail, if this function is not implemented.
> 
> Signed-off-by: Michael Grzeschik <m.grzesc...@pengutronix.de>
> Signed-off-by: Marc Kleine-Budde <m...@pengutronix.de>

Acked-by: Felipe Balbi <ba...@ti.com>

> ---
>  drivers/usb/chipidea/udc.c |   21 +++++++++++++++++----
>  1 file changed, 17 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/usb/chipidea/udc.c b/drivers/usb/chipidea/udc.c
> index 3bfc030..5f99b17 100644
> --- a/drivers/usb/chipidea/udc.c
> +++ b/drivers/usb/chipidea/udc.c
> @@ -78,8 +78,7 @@ static inline int ep_to_bit(struct ci13xxx *ci, int n)
>  }
>  
>  /**
> - * hw_device_state: enables/disables interrupts & starts/stops device 
> (execute
> - *                  without interruption)
> + * hw_device_state: enables/disables interrupts (execute without 
> interruption)
>   * @dma: 0 => disable, !0 => enable and set dma engine
>   *
>   * This function returns an error code
> @@ -91,9 +90,7 @@ static int hw_device_state(struct ci13xxx *ci, u32 dma)
>               /* interrupt, error, port change, reset, sleep/suspend */
>               hw_write(ci, OP_USBINTR, ~0,
>                            USBi_UI|USBi_UEI|USBi_PCI|USBi_URI|USBi_SLI);
> -             hw_write(ci, OP_USBCMD, USBCMD_RS, USBCMD_RS);
>       } else {
> -             hw_write(ci, OP_USBCMD, USBCMD_RS, 0);
>               hw_write(ci, OP_USBINTR, ~0, 0);
>       }
>       return 0;
> @@ -1417,6 +1414,21 @@ static int ci13xxx_vbus_draw(struct usb_gadget 
> *_gadget, unsigned mA)
>       return -ENOTSUPP;
>  }
>  
> +/* Change Data+ pullup status
> + * this func is used by usb_gadget_connect/disconnet
> + */
> +static int ci13xxx_pullup(struct usb_gadget *_gadget, int is_on)
> +{
> +     struct ci13xxx *ci = container_of(_gadget, struct ci13xxx, gadget);
> +
> +     if (is_on)
> +             hw_write(ci, OP_USBCMD, USBCMD_RS, USBCMD_RS);
> +     else
> +             hw_write(ci, OP_USBCMD, USBCMD_RS, 0);
> +
> +     return 0;
> +}
> +
>  static int ci13xxx_start(struct usb_gadget *gadget,
>                        struct usb_gadget_driver *driver);
>  static int ci13xxx_stop(struct usb_gadget *gadget,
> @@ -1429,6 +1441,7 @@ static int ci13xxx_stop(struct usb_gadget *gadget,
>  static const struct usb_gadget_ops usb_gadget_ops = {
>       .vbus_session   = ci13xxx_vbus_session,
>       .wakeup         = ci13xxx_wakeup,
> +     .pullup         = ci13xxx_pullup,
>       .vbus_draw      = ci13xxx_vbus_draw,
>       .udc_start      = ci13xxx_start,
>       .udc_stop       = ci13xxx_stop,
> -- 
> 1.7.10.4
> 

-- 
balbi

Attachment: signature.asc
Description: Digital signature

Reply via email to