diff --git a/us144mkii.c b/us144mkii.c index 44a658d..21c8c11 100644 --- a/us144mkii.c +++ b/us144mkii.c @@ -253,9 +253,18 @@ static int tascam_probe(struct usb_interface *intf, const struct usb_device_id * goto free_card; } - usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), VENDOR_REQ_MODE_CONTROL, + msleep(100); + + for (int retry = 0; retry < 3; retry++) { + int handshake_result = usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), VENDOR_REQ_MODE_CONTROL, RT_D2H_VENDOR_DEV, MODE_VAL_HANDSHAKE_READ, 0x0000, tascam->scratch_buf, 1, USB_CTRL_TIMEOUT_MS); + if (handshake_result >= 0) + break; + + dev_warn(&dev->dev, "Handshake failed (attempt %d/3), retrying...\n", retry + 1); + msleep(50); + } usb_set_interface(dev, 0, 1); usb_set_interface(dev, 1, 1);