Hi Marek,
Thank you for the patch.
On ven., juin 14, 2024 at 02:51, Marek Vasut
wrote:
> Introduce .ops for USB_GADGET_GENERIC uclass. The first new ops is
> .handle_interrupts which must be implemented by DM capable USB gadget
> controller drivers and must implement interrupt handling similar to
> dm_usb_gadget_handle_interrupts(). This patch currently provides weak
> dm_usb_gadget_handle_interrupts() implementation which is overriden by
> the drivers, but this will be removed once conversion to handle_interrupts
> callback is complete.
>
> Signed-off-by: Marek Vasut
Reviewed-by: Mattijs Korpershoek
> ---
> Cc: Alexander Sverdlin
> Cc: Felipe Balbi
> Cc: Lukasz Majewski
> Cc: Mattijs Korpershoek
> Cc: Nishanth Menon
> Cc: Simon Glass
> Cc: Thinh Nguyen
> Cc: Tom Rini
> Cc: u-boot@lists.denx.de
> ---
> drivers/usb/gadget/udc/udc-uclass.c | 24
> include/linux/usb/gadget.h | 8
> 2 files changed, 32 insertions(+)
>
> diff --git a/drivers/usb/gadget/udc/udc-uclass.c
> b/drivers/usb/gadget/udc/udc-uclass.c
> index 5dc23a55bb5..2320039fe3b 100644
> --- a/drivers/usb/gadget/udc/udc-uclass.c
> +++ b/drivers/usb/gadget/udc/udc-uclass.c
> @@ -12,6 +12,25 @@
> #include
>
> #if CONFIG_IS_ENABLED(DM_USB_GADGET)
> +static inline const struct usb_gadget_generic_ops *
> +usb_gadget_generic_dev_ops(struct udevice *dev)
> +{
> + return (const struct usb_gadget_generic_ops *)dev->driver->ops;
> +}
> +
> +__weak int dm_usb_gadget_handle_interrupts(struct udevice *dev)
> +{
> + const struct usb_gadget_generic_ops *ops;
> +
> + ops = usb_gadget_generic_dev_ops(dev);
> + if (!ops)
> + return -EFAULT;
> + if (!ops->handle_interrupts)
> + return -ENOSYS;
> +
> + return ops->handle_interrupts(dev);
> +}
> +
> int udc_device_get_by_index(int index, struct udevice **udev)
> {
> struct udevice *dev = NULL;
> @@ -54,6 +73,11 @@ int udc_device_put(struct udevice *udev)
> {
> return board_usb_cleanup(legacy_index, USB_INIT_DEVICE);
> }
> +
> +__weak int dm_usb_gadget_handle_interrupts(struct udevice *dev)
> +{
> + return 0;
> +}
> #endif
>
> #if CONFIG_IS_ENABLED(DM)
> diff --git a/include/linux/usb/gadget.h b/include/linux/usb/gadget.h
> index 36572be89e6..cf2161603d6 100644
> --- a/include/linux/usb/gadget.h
> +++ b/include/linux/usb/gadget.h
> @@ -970,6 +970,14 @@ extern void usb_ep_autoconfig_reset(struct usb_gadget *);
>
> extern int dm_usb_gadget_handle_interrupts(struct udevice *);
>
> +/**
> + * struct usb_gadget_generic_ops - The functions that a gadget driver must
> implement.
> + * @handle_interrupts: Handle UDC interrupts.
> + */
> +struct usb_gadget_generic_ops {
> + int (*handle_interrupts)(struct udevice *udevice);
> +};
> +
> /**
> * udc_device_get_by_index() - Get UDC udevice by index
> * @index: UDC device index
> --
> 2.43.0