char name[128];
        char phys[64];
        enum mceusb_model_type model;
+
+       bool need_reset;        /* flag to issue a device resume cmd */
 };
 
 /* MCE Device Command Strings, generally a port and command pair */
 
 static void mce_async_out(struct mceusb_dev *ir, unsigned char *data, int size)
 {
+       int rsize = sizeof(DEVICE_RESUME);
+
+       if (ir->need_reset) {
+               ir->need_reset = false;
+               mce_request_packet(ir, DEVICE_RESUME, rsize, MCEUSB_TX);
+               msleep(10);
+       }
+
        mce_request_packet(ir, data, size, MCEUSB_TX);
        msleep(10);
 }
        case MCE_RSP_EQIRRXPORTEN:
                ir->learning_enabled = ((hi & 0x02) == 0x02);
                break;
+       case MCE_RSP_CMD_ILLEGAL:
+               ir->need_reset = true;
+               break;
        default:
                break;
        }