usb: gadget: Introduce handle_interrupts ops to USB_GADGET_GENERIC uclass
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 overridden by the drivers, but this will be removed once conversion to handle_interrupts callback is complete. Signed-off-by: Marek Vasut <marek.vasut+renesas@mailbox.org> Reviewed-by: Mattijs Korpershoek <mkorpershoek@baylibre.com> Tested-by: Alexander Sverdlin <alexander.sverdlin@siemens.com> Tested-by: Mattijs Korpershoek <mkorpershoek@baylibre.com> # vim3 Link: https://lore.kernel.org/r/20240614005309.34433-2-marek.vasut+renesas@mailbox.org [mkorpershoek: fixed trivial typo in commit message] Signed-off-by: Mattijs Korpershoek <mkorpershoek@baylibre.com>
This commit is contained in:
committed by
Mattijs Korpershoek
parent
1918b8010c
commit
d36ef5cbed
@@ -12,6 +12,25 @@
|
||||
#include <linux/usb/gadget.h>
|
||||
|
||||
#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)
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user