usb: misc: ehset: Rework test mode entry
authorRazvan Heghedus <heghedus.razvan@gmail.com>
Mon, 13 Dec 2021 18:36:15 +0000 (20:36 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 17 Dec 2021 16:02:04 +0000 (17:02 +0100)
commitf2b42379c57682d4b127283da109fa1a3317966a
treee835b8f0354fa0a93048bf07e42cdbadd57c72ae
parentb1e9e7ebe6c0b1b200d51ef21ad09652bb65c4b4
usb: misc: ehset: Rework test mode entry

The USB2.0 spec chapter 11.24.2.13 says that the USB port which is going
under test needs to be put in suspend state before sending the test
command. Many hubs, don't enforce this precondition and they work fine
without this step. We should follow the specification and put the USB
port in suspend before sending the test command.

Also there are some "special" hubs, which requires to disable the USB
port power instead of putting it in suspend. I found out only three hubs
which requires this step, but if more are found, they can be added to
the list.

Since this changes the default implementation, it raises the posibility
of finding other broken hubs which are not compliant with the spec and
the test command might not work is the port is suspended. If such hubs
are found, a similar workaround like the disable part can be implemented
to skip putting the port in suspend.

Signed-off-by: Razvan Heghedus <heghedus.razvan@gmail.com>
Link: https://lore.kernel.org/r/20211213183617.14156-2-heghedus.razvan@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/misc/ehset.c