Re: [PATCH v3 2/5] usb: chipidea: udc: add pullup fuction, needed by the uvc gadget

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Marc Kleine-Budde <mkl@xxxxxxxxxxxxxx> writes:

> From: Michael Grzeschik <m.grzeschik@xxxxxxxxxxxxxx>
>
> 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.grzeschik@xxxxxxxxxxxxxx>
> Signed-off-by: Marc Kleine-Budde <mkl@xxxxxxxxxxxxxx>
> Acked-by: Felipe Balbi <balbi@xxxxxx>

Acked-by: Alexander Shishkin <alexander.shishkin@xxxxxxxxxxxxxxx>

> ---
>  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);
>  	}
>  	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 majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux