Tuesday, December 29, 2015

Windows 10 USB Selective Suspend

Recently I lost hours of my life due to an odd USB setting in Windows 10.  If you are experiencing or have experienced issues with USB devices and Windows 10 then hopefully you can keep reading and save yourself the hours of frustration and rage inducing failures that I’ve been dealing with since first starting to use Windows 10.

First a bit of background, USB Selective Suspend is not new.  It has been around since USB 2.0 in Windows XP.  Selective Suspend allows the operating system to save power by placing specific USB ports into a suspended mode to save power, similar to how a laptop or tablet can be placed into sleep mode.  What’s cool about it is that it can do USB ports individually without powering down all the USB ports or the entire USB bus.

What’s bad about it is that it really isn’t necessary on a desktop machine that is plugged into power. Powering down USB ports won’t save the grid that much power on a desktop.  Now on a laptop or tablet on battery power it’s a different story.  That’s why Windows allows you to enable or disable USB Selective Suspend based on the computer being plugged in or on battery power.

Another interesting fact here is that previous versions of Windows allows you access to the USB Selective Suspend setting easily in the advanced power profile settings.  Windows 10 hides that setting unless you modify the registry.

One more gotcha here, the driver for the USB device must support Selective Suspend in order for it to work properly.  This has been around since Windows XP and USB 2.0 so you’d think that it is widely supported.  Well…...cue the rage inducing failures.

I started using Windows 10 on a Surface Pro 2 using a Toshiba USB 3.0 dock to connect to my keyboard, mouse, and dual monitors.  I had no issues.  Then I got my Surface Pro 4 and the new Surface Dock and things started to go south in a hurry.  The biggest issue I faced was that my display port monitors would go to sleep and rarely wake up when connected to the dock.  Randomly they would come back on but most of the time in order to use my monitors connected to the Surface Dock I’d have to unplug the Surface Dock Connector from my Surface and then plug it in again.

After spending weeks trying to figure out why the monitors wouldn’t wake up I finally broke down and called Microsoft support.  They told me it was probably a hardware issue with the Surface Dock so they sent me another one.  I hooked the new one up and the same problem.  I had a hunch all along it was either a firmware issue with the Surface Dock or it was a driver issue on the Surface itself.

Without any solution I continued to unplug my new Surface Dock from my Surface multiple times every day to wake up my monitors.  The convenience of the new Surface Dock with its single connection into the Surface that provides communications and power was totally lost.

A few days before Christmas I decided to update my TomTom GPS with the latest map before we did some traveling for the holiday.  I plugged the GPS into one my Surface Dock USB ports and told it to update but it kept dropping its connection.  It would update for a few seconds and then say it wasn’t connected.  I then plugged the GPS USB cable and plugged it directly into the Surface.  Same problem.  So I unplugged the Surface Dock completely and still the GPS would connect and then drop its connection.

Must be a cable problem, right?  I tried 3 different cables and they all had the same issue.  Was the micro USB port on my GPS bad?  Seemed unlikely but I checked it out.  After another hour of testing and messing with it I still had no luck and by this point my GPS map was totally hosed because of the constant connecting and reconnecting.

Time to take a step back and relax.  Sometimes when troubleshooting an issue, you can lose the forest for the tress so I decided it best to take a break.  I did a few other things, took a shower, and then came back to start again.  This time I started researching USB connection issues with my GPS and Windows 10.  After about an hour of reading it appeared based on some user forums that Selective Suspend was to blame because the TomTom MyDrive software and GPS driver were not configured to support Selective Suspend in Windows 10.

That made sense.  Windows 10 kept trying to enable Selective Suspend on the port and that caused the connection to drop because the TomTom driver wasn’t updated to let Windows 10 know it could not enabled suspend on the port while the GPS was connected and trying to update a 6gb map.

To test this, I went to disable Selective Suspend in the advanced power profile settings but found the USB Settings option missing.  Really?  A quick Google revealed that in order to see the advanced power options you had to modify a registry entry.  Part of me understands why Microsoft would hide this, part of me doesn’t.  You can find plenty of articles online with detailed in instructions for how to change a reg key so you can see these settings.  I changed the key, rebooted and sure enough the USB Selective Suspend settings appeared.

The options are enable and disabled for plugged in and on battery.  I disabled mine while plugged in but left it turned on while on battery.  Rarely would I every attempt to update my GPS while on battery power and if it does save me some juice to make my battery life last longer then fine.

Immediately my GPS connected and updated as it should.  My rendered useless GPS became useful once again.  While I took the long way around the barn was I grateful that the issue was fixed.  So I connected my Surface to the dock again and went to bed.

The next morning, I got up expecting to have to unplug my Surface Dock from my Surface to get my monitors to wake up but found that when I moved the mouse the monitors woke right up.  Intrigued I let the monitors go back to sleep again and they again woke up as they should.  Fascinating.  I finished what I was doing and left for the day.  When I got back later that night my monitors again woke up when I moved the mouse or touched the keyboard.  Could it be?  Could the Selective Suspend issue have caused my Surface Dock to not work properly?

While I didn’t find any articles saying that there was a connection for the new Surface Dock, remember it has only been out for just over a month, I found many related to docks using USB.  Since the new Surface Dock doesn’t use USB I didn’t think the issues would be connected but my experience suggests that they are, even if the evidence is circumstantial.

It baffles me that Microsoft’s own hardware isn’t compatible with Selective Suspend.  Why TomTom hasn’t kept their driver current is also a bit of a surprise but Windows 10 is still relatively new.  I don’t see any excuse for Microsoft.

For now, at least it appears that my Surface Dock works as it should and my GPS can be updated anytime I want.  If you are having similar struggles with a dock or USB device, you might want to check out the power saving convenience that is USB Selective Suspend.