On Mon, Feb 06, 2023 at 11:13:24AM -0800, Elson Roy Serrao wrote: > A function which is in function suspend state has to send a > function wake notification to the host in case it needs to > exit from this state and resume data transfer. Add support to > handle such requests by exposing a new gadget op. > > Signed-off-by: Elson Roy Serrao <quic_eserrao@xxxxxxxxxxx> > --- > drivers/usb/gadget/composite.c | 26 ++++++++++++++++++++++++++ > drivers/usb/gadget/udc/core.c | 19 +++++++++++++++++++ > include/linux/usb/composite.h | 6 ++++++ > include/linux/usb/gadget.h | 4 ++++ > 4 files changed, 55 insertions(+) > > diff --git a/drivers/usb/gadget/composite.c b/drivers/usb/gadget/composite.c > index e459fb0..aa243d8 100644 > --- a/drivers/usb/gadget/composite.c > +++ b/drivers/usb/gadget/composite.c > @@ -492,6 +492,32 @@ int usb_interface_id(struct usb_configuration *config, > } > EXPORT_SYMBOL_GPL(usb_interface_id); > > +int usb_func_wakeup(struct usb_function *func) > +{ > + int ret, id; > + > + if (!func->func_rw_armed) { > + ERROR(func->config->cdev, "func remote wakeup not enabled\n"); > + return -EINVAL; > + } > + > + DBG(func->config->cdev, "%s function wakeup\n", func->name); > + > + for (id = 0; id < MAX_CONFIG_INTERFACES; id++) > + if (func->config->interface[id] == func) > + break; > + > + if (id == MAX_CONFIG_INTERFACES) { > + ERROR(func->config->cdev, "Invalid function id:%d\n", id); > + return -EINVAL; > + } > + > + ret = usb_gadget_func_wakeup(func->config->cdev->gadget, id); > + > + return ret; > +} > +EXPORT_SYMBOL(usb_func_wakeup); EXPORT_SYMBOL_GPL() please. thanks, greg k-h