usb: host: add Kconfig option for EHSET

commit 9841f37a1c ("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: Jack Pham <jackp@codeaurora.org>
Acked-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Jack Pham 2013-08-13 13:40:13 -07:00 committed by Greg Kroah-Hartman
parent 034d1527ad
commit 726a85caa3
3 changed files with 26 additions and 1 deletions

View File

@ -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.

View File

@ -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 @@ cleanup:
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 (
* 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);

View File

@ -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 @@ cleanup:
qtd_list_free(ehci, urb, head); qtd_list_free(ehci, urb, head);
return -1; return -1;
} }
#endif /* CONFIG_USB_HCD_TEST_MODE */
/*-------------------------------------------------------------------------*/ /*-------------------------------------------------------------------------*/