On Wed, Sep 12, 2012 at 7:58 PM, Alexander Shishkin
<alexander.shish...@linux.intel.com> 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.
>
> Cc: <sta...@vger.kernel.org>
> Signed-off-by: Michael Grzeschik <m.grzesc...@pengutronix.de>
> Acked-by: Felipe Balbi <ba...@ti.com>
> Signed-off-by: Marc Kleine-Budde <m...@pengutronix.de>
> Signed-off-by: Alexander Shishkin <alexander.shish...@linux.intel.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 7801a3f..32ee870 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);
>         }

Hi Marc, your above change break the function that load gadget before
plug usb cable.
Does your change is because the set/clear usbcmd.rs twice at
usb_gadget_probe_driver
/usb_gadget_remove_driver? If it is, do you mind I submit  a patch to re-add it?

>         return 0;
> @@ -1420,6 +1417,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,
> @@ -1432,6 +1444,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
>
> --
> 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
--
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