Skip to content

Commit

Permalink
USB: EHCI: Export the ehci_hub_control function
Browse files Browse the repository at this point in the history
Platform drivers sometimes need to perform specific handling of hub
control requests. Make this possible by exporting the ehci_hub_control()
function which can then be called from a custom hub control handler in
the default case.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Acked-by: Alan Stern <stern@rowland.harvard.edu>
Acked-by: Stephen Warren <swarren@nvidia.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
Laurent Pinchart authored and Greg Kroah-Hartman committed Apr 24, 2014
1 parent 42b59eb commit 3776993
Show file tree
Hide file tree
Showing 3 changed files with 6 additions and 17 deletions.
12 changes: 2 additions & 10 deletions drivers/usb/host/ehci-hub.c
Original file line number Diff line number Diff line change
Expand Up @@ -33,15 +33,6 @@

#ifdef CONFIG_PM

static int ehci_hub_control(
struct usb_hcd *hcd,
u16 typeReq,
u16 wValue,
u16 wIndex,
char *buf,
u16 wLength
);

static int persist_enabled_on_companion(struct usb_device *udev, void *unused)
{
return !udev->maxchild && udev->persist_enabled &&
Expand Down Expand Up @@ -865,7 +856,7 @@ static int ehset_single_step_set_feature(struct usb_hcd *hcd, int port)
#endif /* CONFIG_USB_HCD_TEST_MODE */
/*-------------------------------------------------------------------------*/

static int ehci_hub_control (
int ehci_hub_control(
struct usb_hcd *hcd,
u16 typeReq,
u16 wValue,
Expand Down Expand Up @@ -1285,6 +1276,7 @@ static int ehci_hub_control (
spin_unlock_irqrestore (&ehci->lock, flags);
return retval;
}
EXPORT_SYMBOL_GPL(ehci_hub_control);

static void ehci_relinquish_port(struct usb_hcd *hcd, int portnum)
{
Expand Down
8 changes: 1 addition & 7 deletions drivers/usb/host/ehci-tegra.c
Original file line number Diff line number Diff line change
Expand Up @@ -51,10 +51,6 @@ struct tegra_ehci_soc_config {
bool has_hostpc;
};

static int (*orig_hub_control)(struct usb_hcd *hcd,
u16 typeReq, u16 wValue, u16 wIndex,
char *buf, u16 wLength);

struct tegra_ehci_hcd {
struct tegra_usb_phy *phy;
struct clk *clk;
Expand Down Expand Up @@ -236,7 +232,7 @@ static int tegra_ehci_hub_control(
spin_unlock_irqrestore(&ehci->lock, flags);

/* Handle the hub control events here */
return orig_hub_control(hcd, typeReq, wValue, wIndex, buf, wLength);
return ehci_hub_control(hcd, typeReq, wValue, wIndex, buf, wLength);

done:
spin_unlock_irqrestore(&ehci->lock, flags);
Expand Down Expand Up @@ -554,8 +550,6 @@ static int __init ehci_tegra_init(void)
* too easy.
*/

orig_hub_control = tegra_ehci_hc_driver.hub_control;

tegra_ehci_hc_driver.map_urb_for_dma = tegra_ehci_map_urb_for_dma;
tegra_ehci_hc_driver.unmap_urb_for_dma = tegra_ehci_unmap_urb_for_dma;
tegra_ehci_hc_driver.hub_control = tegra_ehci_hub_control;
Expand Down
3 changes: 3 additions & 0 deletions drivers/usb/host/ehci.h
Original file line number Diff line number Diff line change
Expand Up @@ -872,4 +872,7 @@ extern int ehci_suspend(struct usb_hcd *hcd, bool do_wakeup);
extern int ehci_resume(struct usb_hcd *hcd, bool hibernated);
#endif /* CONFIG_PM */

extern int ehci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
u16 wIndex, char *buf, u16 wLength);

#endif /* __LINUX_EHCI_HCD_H */

0 comments on commit 3776993

Please sign in to comment.