return drm_mode_config_helper_resume(dev);
 }
 
+static int udl_usb_reset_resume(struct usb_interface *interface)
+{
+       struct drm_device *dev = usb_get_intfdata(interface);
+       struct udl_device *udl = to_udl(dev);
+
+       udl_select_std_channel(udl);
+
+       return drm_mode_config_helper_resume(dev);
+}
+
 /*
  * FIXME: Dma-buf sharing requires DMA support by the importing device.
  *        This function is a workaround to make USB devices work as well.
        .disconnect = udl_usb_disconnect,
        .suspend = udl_usb_suspend,
        .resume = udl_usb_resume,
+       .reset_resume = udl_usb_reset_resume,
        .id_table = id_table,
 };
 module_usb_driver(udl_driver);
 
                     u32 byte_offset, u32 device_byte_offset, u32 byte_width);
 
 int udl_drop_usb(struct drm_device *dev);
+int udl_select_std_channel(struct udl_device *udl);
 
 #define CMD_WRITE_RAW8   "\xAF\x60" /**< 8 bit raw write command. */
 #define CMD_WRITE_RL8    "\xAF\x61" /**< 8 bit run length command. */
 
 /*
  * Need to ensure a channel is selected before submitting URBs
  */
-static int udl_select_std_channel(struct udl_device *udl)
+int udl_select_std_channel(struct udl_device *udl)
 {
        static const u8 set_def_chn[] = {0x57, 0xCD, 0xDC, 0xA7,
                                         0x1C, 0x88, 0x5E, 0x15,