usb: dwc3: Fix dr_mode validation
authorThinh Nguyen <thinhn@synopsys.com>
Wed, 7 Sep 2016 02:22:03 +0000 (19:22 -0700)
committerFelipe Balbi <felipe.balbi@linux.intel.com>
Wed, 7 Sep 2016 10:29:20 +0000 (13:29 +0300)
commit9d6173e125d92e38d4e39bc71f0c3c2cf95cba1a
tree713ffadf91220dc7ab5b6ea9d5284c9d3fcf2435
parent073c47aca7b7ccc6dd3fb21a3ee8134e30d8b327
usb: dwc3: Fix dr_mode validation

This patch follows the similar fix in dwc2. See
commit 5268ed9d2e3b ("usb: dwc2: Fix dr_mode validation")

Currently, the dr_mode is only checked against the module configuration.
It also needs to be checked against the hardware capablities.

The driver now checks if both the module configuration and hardware are
capable of the dr_mode value. If not, then it will issue a warning and
fall back to a supported value. If it is unable to fall back to a
suitable value, then the probe will fail.

Behavior summary:

      module          :  actual
 HW   config  dr_mode :  dr_mode
---------------------------------
 host  host   any     :  host
 host  dev    any     :  INVALID
 host  otg    any     :  host

 dev   host   any     :  INVALID
 dev   dev    any     :  dev
 dev   otg    any     :  dev

 otg   host   any     :  host
 otg   dev    any     :  dev
 otg   otg    any     :  dr_mode

Signed-off-by: Thinh Nguyen <thinhn@synopsys.com>
Signed-off-by: John Youn <johnyoun@synopsys.com>
Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
drivers/usb/dwc3/core.c
drivers/usb/dwc3/core.h