From 6d4bf9d3606df8b5266bdb8deba9256fe5b08a3e Mon Sep 17 00:00:00 2001 From: serifpersia Date: Mon, 21 Jul 2025 15:44:09 +0200 Subject: [PATCH] config handshake fix --- us144mkii.c | 59 +++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 41 insertions(+), 18 deletions(-) diff --git a/us144mkii.c b/us144mkii.c index 106b5be..7bc5c75 100644 --- a/us144mkii.c +++ b/us144mkii.c @@ -42,25 +42,44 @@ static int dev_idx; #define RT_D2H_CLASS_EP (USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_ENDPOINT) #define RT_H2D_VENDOR_DEV (USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE) #define RT_D2H_VENDOR_DEV (USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE) -#define UAC_SET_CUR 0x01 -#define UAC_GET_CUR 0x81 -#define UAC_SAMPLING_FREQ_CONTROL 0x0100 -#define VENDOR_REQ_REGISTER_WRITE 0x41 -#define VENDOR_REQ_MODE_CONTROL 0x49 -#define MODE_VAL_HANDSHAKE_READ 0x0000 -#define MODE_VAL_CONFIG 0x0010 -#define MODE_VAL_STREAM_START 0x0030 + +enum uac_request { + UAC_SET_CUR = 0x01, + UAC_GET_CUR = 0x81, +}; + +enum uac_control_selector { + UAC_SAMPLING_FREQ_CONTROL = 0x0100, +}; + +enum tascam_vendor_request { + VENDOR_REQ_REGISTER_WRITE = 0x41, + VENDOR_REQ_MODE_CONTROL = 0x49, +}; + +enum tascam_mode_value { + MODE_VAL_HANDSHAKE_READ = 0x0000, + MODE_VAL_CONFIG = 0x0010, + MODE_VAL_STREAM_START = 0x0030, +}; + #define HANDSHAKE_SUCCESS_VAL 0x12 -#define REG_ADDR_UNKNOWN_0D 0x0d04 -#define REG_ADDR_UNKNOWN_0E 0x0e00 -#define REG_ADDR_UNKNOWN_0F 0x0f00 -#define REG_ADDR_RATE_44100 0x1000 -#define REG_ADDR_RATE_48000 0x1002 -#define REG_ADDR_RATE_88200 0x1008 -#define REG_ADDR_RATE_96000 0x100a -#define REG_ADDR_UNKNOWN_11 0x110b + +enum tascam_register { + REG_ADDR_UNKNOWN_0D = 0x0d04, + REG_ADDR_UNKNOWN_0E = 0x0e00, + REG_ADDR_UNKNOWN_0F = 0x0f00, + REG_ADDR_RATE_44100 = 0x1000, + REG_ADDR_RATE_48000 = 0x1002, + REG_ADDR_RATE_88200 = 0x1008, + REG_ADDR_RATE_96000 = 0x100a, + REG_ADDR_UNKNOWN_11 = 0x110b, +}; + #define REG_VAL_ENABLE 0x0101 + + /* --- URB Configuration --- */ #define NUM_PLAYBACK_URBS 8 #define PLAYBACK_URB_PACKETS 4 @@ -2056,8 +2075,12 @@ static int tascam_probe(struct usb_interface *intf, const struct usb_device_id * if (err == 1 && handshake_buf[0] == HANDSHAKE_SUCCESS_VAL) { dev_info(&intf->dev, "Handshake successful.\n"); } else { - dev_warn(&intf->dev, "Handshake failed (err %d, val 0x%02x), continuing anyway.\n", - err, (unsigned int)(err > 0 ? handshake_buf[0] : 0)); + if (handshake_buf[0] != HANDSHAKE_SUCCESS_VAL && + handshake_buf[0] != MODE_VAL_STREAM_START && + handshake_buf[0] != 0x32) { + dev_warn(&intf->dev, "Handshake failed with unexpected value (err %d, val 0x%02x), continuing anyway.\n", + err, (unsigned int)(err > 0 ? handshake_buf[0] : 0)); + } } kfree(handshake_buf);