Commit 726a85ca authored by Jack Pham's avatar Jack Pham Committed by Greg Kroah-Hartman

usb: host: add Kconfig option for EHSET

commit 9841f37a ("usb: ehci: Add support for SINGLE_STEP_SET_FEATURE
test of EHSET") added additional code to the EHCI hub driver but it is
anticipated to only have a limited audience (e.g. embedded silicon
vendors and integrators). Avoid subjecting all EHCI (and in the future
maybe xHCI/OHCI, etc.) HCD users to code bloat by conditionally
compiling the EHSET-specific additions with a new Kconfig option,
CONFIG_USB_HCD_TEST_MODE.
Signed-off-by: default avatarJack Pham <jackp@codeaurora.org>
Acked-by: default avatarAlan Stern <stern@rowland.harvard.edu>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 034d1527
...@@ -699,3 +699,20 @@ config USB_HCD_SSB ...@@ -699,3 +699,20 @@ config USB_HCD_SSB
for ehci and ohci. for ehci and ohci.
If unsure, say N. If unsure, say N.
config USB_HCD_TEST_MODE
bool "HCD test mode support"
---help---
Say 'Y' to enable additional software test modes that may be
supported by the host controller drivers.
One such test mode is the Embedded High-speed Host Electrical Test
(EHSET) for EHCI host controller hardware, specifically the "Single
Step Set Feature" test. Typically this will be enabled for On-the-Go
or embedded hosts that need to undergo USB-IF compliance testing with
the aid of special testing hardware. In the future, this may expand
to include other tests that require support from a HCD driver.
This option is of interest only to developers who need to validate
their USB hardware designs. It is not needed for normal use. If
unsure, say N.
...@@ -712,6 +712,8 @@ ehci_hub_descriptor ( ...@@ -712,6 +712,8 @@ ehci_hub_descriptor (
} }
/*-------------------------------------------------------------------------*/ /*-------------------------------------------------------------------------*/
#ifdef CONFIG_USB_HCD_TEST_MODE
#define EHSET_TEST_SINGLE_STEP_SET_FEATURE 0x06 #define EHSET_TEST_SINGLE_STEP_SET_FEATURE 0x06
static void usb_ehset_completion(struct urb *urb) static void usb_ehset_completion(struct urb *urb)
...@@ -847,6 +849,7 @@ static int ehset_single_step_set_feature(struct usb_hcd *hcd, int port) ...@@ -847,6 +849,7 @@ static int ehset_single_step_set_feature(struct usb_hcd *hcd, int port)
kfree(buf); kfree(buf);
return retval; return retval;
} }
#endif /* CONFIG_USB_HCD_TEST_MODE */
/*-------------------------------------------------------------------------*/ /*-------------------------------------------------------------------------*/
static int ehci_hub_control ( static int ehci_hub_control (
...@@ -1222,13 +1225,16 @@ static int ehci_hub_control ( ...@@ -1222,13 +1225,16 @@ static int ehci_hub_control (
* about the EHCI-specific stuff. * about the EHCI-specific stuff.
*/ */
case USB_PORT_FEAT_TEST: case USB_PORT_FEAT_TEST:
#ifdef CONFIG_USB_HCD_TEST_MODE
if (selector == EHSET_TEST_SINGLE_STEP_SET_FEATURE) { if (selector == EHSET_TEST_SINGLE_STEP_SET_FEATURE) {
spin_unlock_irqrestore(&ehci->lock, flags); spin_unlock_irqrestore(&ehci->lock, flags);
retval = ehset_single_step_set_feature(hcd, retval = ehset_single_step_set_feature(hcd,
wIndex); wIndex);
spin_lock_irqsave(&ehci->lock, flags); spin_lock_irqsave(&ehci->lock, flags);
break; break;
} else if (!selector || selector > 5) }
#endif
if (!selector || selector > 5)
goto error; goto error;
spin_unlock_irqrestore(&ehci->lock, flags); spin_unlock_irqrestore(&ehci->lock, flags);
ehci_quiesce(ehci); ehci_quiesce(ehci);
......
...@@ -1139,6 +1139,7 @@ submit_async ( ...@@ -1139,6 +1139,7 @@ submit_async (
} }
/*-------------------------------------------------------------------------*/ /*-------------------------------------------------------------------------*/
#ifdef CONFIG_USB_HCD_TEST_MODE
/* /*
* This function creates the qtds and submits them for the * This function creates the qtds and submits them for the
* SINGLE_STEP_SET_FEATURE Test. * SINGLE_STEP_SET_FEATURE Test.
...@@ -1238,6 +1239,7 @@ static int submit_single_step_set_feature( ...@@ -1238,6 +1239,7 @@ static int submit_single_step_set_feature(
qtd_list_free(ehci, urb, head); qtd_list_free(ehci, urb, head);
return -1; return -1;
} }
#endif /* CONFIG_USB_HCD_TEST_MODE */
/*-------------------------------------------------------------------------*/ /*-------------------------------------------------------------------------*/
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment