From 7b1b44ea74c7d936bac1509cbe0a4637c7635f94 Mon Sep 17 00:00:00 2001 From: anarkia1976 Date: Mon, 29 Jun 2015 16:41:07 +0200 Subject: [PATCH] drivers: usb: keyboard/mouse: Added Boot mode patch --- drivers/usb/gadget/f_hid.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/drivers/usb/gadget/f_hid.c b/drivers/usb/gadget/f_hid.c index fa52b72..4b49e6e 100644 --- a/drivers/usb/gadget/f_hid.c +++ b/drivers/usb/gadget/f_hid.c @@ -403,7 +403,12 @@ static int hidg_setup(struct usb_function *f, case ((USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_INTERFACE) << 8 | HID_REQ_GET_PROTOCOL): VDBG(cdev, "get_protocol\n"); - goto stall; + length = min_t(unsigned, length, 1); + if (hidg->bInterfaceSubClass == USB_INTERFACE_SUBCLASS_BOOT) + ((u8 *) req->buf)[0] = 0; /* Boot protocol */ + else + ((u8 *) req->buf)[0] = 1; /* Report protocol */ + goto respond; break; case ((USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_INTERFACE) << 8 @@ -417,6 +422,14 @@ static int hidg_setup(struct usb_function *f, case ((USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_INTERFACE) << 8 | HID_REQ_SET_PROTOCOL): VDBG(cdev, "set_protocol\n"); + length = 0; + if (hidg->bInterfaceSubClass == USB_INTERFACE_SUBCLASS_BOOT) { + if (value == 0) /* Boot protocol */ + goto respond; + } else { + if (value == 1) /* Report protocol */ + goto respond; + } goto stall; break;