--- a/drivers/input/misc/cm109.c +++ b/drivers/input/misc/cm109.c @@ -375,13 +375,17 @@ static void cm109_submit_ctl(struct cm109_dev *dev) dev->ctl_data->byte[HID_OR2] = dev->keybit; dev->buzzer_pending = 0; - dev->ctl_urb_pending = 1; - error = usb_submit_urb(dev->urb_ctl, GFP_ATOMIC); - if (error) - dev_err(&dev->intf->dev, - "%s: usb_submit_urb (urb_ctl) failed %d\n", - __func__, error); + if (!dev->ctl_urb_pending) { + dev->ctl_urb_pending = 1; + + + error = usb_submit_urb(dev->urb_ctl, GFP_ATOMIC); + if (error) + dev_err(&dev->intf->dev, + "%s: usb_submit_urb (urb_ctl) failed %d\n", + __func__, error); + } } /*