diff --git a/us144mkii.c b/us144mkii.c index 6e42972..de2abea 100644 --- a/us144mkii.c +++ b/us144mkii.c @@ -322,6 +322,13 @@ static int tascam_suspend(struct usb_interface *intf, pm_message_t message) usb_kill_anchored_urbs(&tascam->midi_in_anchor); usb_kill_anchored_urbs(&tascam->midi_out_anchor); + dev_info(&intf->dev, "sending deep sleep command\n"); + int err = usb_control_msg(tascam->dev, usb_sndctrlpipe(tascam->dev, 0), + VENDOR_REQ_DEEP_SLEEP, RT_H2D_VENDOR_DEV, + 0x0000, 0x0000, NULL, 0, USB_CTRL_TIMEOUT_MS); + if (err < 0) + dev_err(&intf->dev, "deep sleep command failed: %d\n", err); + return 0; } diff --git a/us144mkii.h b/us144mkii.h index c740a0b..ecc4c2f 100644 --- a/us144mkii.h +++ b/us144mkii.h @@ -46,6 +46,7 @@ enum uac_control_selector { enum tascam_vendor_request { VENDOR_REQ_REGISTER_WRITE = 0x41, + VENDOR_REQ_DEEP_SLEEP = 0x44, VENDOR_REQ_MODE_CONTROL = 0x49, }; diff --git a/us144mkii_pcm.c b/us144mkii_pcm.c index bc13338..5a066ce 100644 --- a/us144mkii_pcm.c +++ b/us144mkii_pcm.c @@ -118,6 +118,7 @@ int us144mkii_configure_device_for_rate(struct tascam_card *tascam, int rate) u16 rate_vendor_wValue; int err = 0; const u8 *current_payload_src; + u8 *rate_payload_buf __free(kfree); static const u8 payload_44100[] = { 0x44, 0xac, 0x00 };