diff --git a/repos/dde_linux/src/drivers/usb_hid/lx_emul.c b/repos/dde_linux/src/drivers/usb_hid/lx_emul.c index 0489a48afd..7b649a2b61 100644 --- a/repos/dde_linux/src/drivers/usb_hid/lx_emul.c +++ b/repos/dde_linux/src/drivers/usb_hid/lx_emul.c @@ -33,3 +33,26 @@ struct usb_driver usbfs_driver = { const struct attribute_group *usb_device_groups[] = { }; +/* + * Taken and ajdusted from linux/drivers/usb/core/message.c If this is required + * by more drivers in the future, we will move it to + * dde_linux/src/lib/virt/shadow/drivers/usb/core/message.c + */ +int usb_clear_halt(struct usb_device *dev, int pipe) +{ + int result; + int endp = usb_pipeendpoint(pipe); + + if (usb_pipein(pipe)) + endp |= USB_DIR_IN; + + /* we don't care if it wasn't halted first. in fact some devices + * (like some ibmcam model 1 units) seem to expect hosts to make + * this request for iso endpoints, which can't halt! + */ + result = usb_control_msg(dev, usb_sndctrlpipe(dev, endp), + USB_REQ_CLEAR_FEATURE, USB_RECIP_ENDPOINT, + USB_ENDPOINT_HALT, endp, NULL, 0, + USB_CTRL_SET_TIMEOUT); + return result; +} diff --git a/repos/dde_linux/src/drivers/usb_hid/spec/arm_v6/generated_dummies.c b/repos/dde_linux/src/drivers/usb_hid/spec/arm_v6/generated_dummies.c index 6e7fc08671..c860daa702 100644 --- a/repos/dde_linux/src/drivers/usb_hid/spec/arm_v6/generated_dummies.c +++ b/repos/dde_linux/src/drivers/usb_hid/spec/arm_v6/generated_dummies.c @@ -491,14 +491,6 @@ void usb_block_urb(struct urb * urb) } -#include - -int usb_clear_halt(struct usb_device * dev,int pipe) -{ - lx_emul_trace_and_stop(__func__); -} - - extern void usb_devio_cleanup(void); void usb_devio_cleanup(void) { diff --git a/repos/dde_linux/src/drivers/usb_hid/spec/arm_v7/generated_dummies.c b/repos/dde_linux/src/drivers/usb_hid/spec/arm_v7/generated_dummies.c index f10452cea0..69c8f0dc8a 100644 --- a/repos/dde_linux/src/drivers/usb_hid/spec/arm_v7/generated_dummies.c +++ b/repos/dde_linux/src/drivers/usb_hid/spec/arm_v7/generated_dummies.c @@ -491,14 +491,6 @@ void usb_block_urb(struct urb * urb) } -#include - -int usb_clear_halt(struct usb_device * dev,int pipe) -{ - lx_emul_trace_and_stop(__func__); -} - - extern void usb_devio_cleanup(void); void usb_devio_cleanup(void) { diff --git a/repos/dde_linux/src/drivers/usb_hid/spec/arm_v8/generated_dummies.c b/repos/dde_linux/src/drivers/usb_hid/spec/arm_v8/generated_dummies.c index 56834790d1..76403e3441 100644 --- a/repos/dde_linux/src/drivers/usb_hid/spec/arm_v8/generated_dummies.c +++ b/repos/dde_linux/src/drivers/usb_hid/spec/arm_v8/generated_dummies.c @@ -456,14 +456,6 @@ void usb_block_urb(struct urb * urb) } -#include - -int usb_clear_halt(struct usb_device * dev,int pipe) -{ - lx_emul_trace_and_stop(__func__); -} - - extern void usb_devio_cleanup(void); void usb_devio_cleanup(void) { diff --git a/repos/dde_linux/src/drivers/usb_hid/spec/x86_32/generated_dummies.c b/repos/dde_linux/src/drivers/usb_hid/spec/x86_32/generated_dummies.c index 4ac60ca408..d6631b34cf 100644 --- a/repos/dde_linux/src/drivers/usb_hid/spec/x86_32/generated_dummies.c +++ b/repos/dde_linux/src/drivers/usb_hid/spec/x86_32/generated_dummies.c @@ -371,14 +371,6 @@ void usb_block_urb(struct urb * urb) } -#include - -int usb_clear_halt(struct usb_device * dev,int pipe) -{ - lx_emul_trace_and_stop(__func__); -} - - extern void usb_devio_cleanup(void); void usb_devio_cleanup(void) { diff --git a/repos/dde_linux/src/drivers/usb_hid/spec/x86_64/generated_dummies.c b/repos/dde_linux/src/drivers/usb_hid/spec/x86_64/generated_dummies.c index 24d36447f4..c95bd233a4 100644 --- a/repos/dde_linux/src/drivers/usb_hid/spec/x86_64/generated_dummies.c +++ b/repos/dde_linux/src/drivers/usb_hid/spec/x86_64/generated_dummies.c @@ -339,14 +339,6 @@ void usb_block_urb(struct urb * urb) } -#include - -int usb_clear_halt(struct usb_device * dev,int pipe) -{ - lx_emul_trace_and_stop(__func__); -} - - extern void usb_devio_cleanup(void); void usb_devio_cleanup(void) {