bool tx_control;
        unsigned char usb_rx_buf[8];
        unsigned char usb_tx_buf[8];
+       unsigned int send_packet_delay;
 
        struct tx_t {
                unsigned char data_buf[35];     /* user data buffer */
        IMON_KEY_PANEL  = 2,
 };
 
+enum {
+       IMON_NEED_20MS_PKT_DELAY = 1
+};
+
 /*
  * USB Device ID for iMON USB Control Boards
  *
        /* SoundGraph iMON OEM Touch LCD (IR & 4.3" VGA LCD) */
        { USB_DEVICE(0x15c2, 0x0035) },
        /* SoundGraph iMON OEM VFD (IR & VFD) */
-       { USB_DEVICE(0x15c2, 0x0036) },
+       { USB_DEVICE(0x15c2, 0x0036), .driver_info = IMON_NEED_20MS_PKT_DELAY },
        /* device specifics unknown */
        { USB_DEVICE(0x15c2, 0x0037) },
        /* SoundGraph iMON OEM LCD (IR & LCD) */
        kfree(control_req);
 
        /*
-        * Induce a mandatory 5ms delay before returning, as otherwise,
+        * Induce a mandatory delay before returning, as otherwise,
         * send_packet can get called so rapidly as to overwhelm the device,
         * particularly on faster systems and/or those with quirky usb.
         */
-       timeout = msecs_to_jiffies(5);
-       set_current_state(TASK_UNINTERRUPTIBLE);
+       timeout = msecs_to_jiffies(ictx->send_packet_delay);
+       set_current_state(TASK_INTERRUPTIBLE);
        schedule_timeout(timeout);
 
        return retval;
 
        }
 
+       /* default send_packet delay is 5ms but some devices need more */
+       ictx->send_packet_delay = id->driver_info & IMON_NEED_20MS_PKT_DELAY ?
+                                 20 : 5;
+
        usb_set_intfdata(interface, ictx);
 
        if (ifnum == 0) {