Skip to content

Commit

Permalink
USB: OHCI: Export the OHCI hub control and status_data functions
Browse files Browse the repository at this point in the history
Platform drivers sometimes need to perform specific handling of hub
control requests and status data. Make this possible by exporting the
ohci_hub_control() and ohci_hub_status_data() functions which can then
be called from custom hub operations in the default case.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Acked-by: Alan Stern <stern@rowland.harvard.edu>
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 0021a75 commit 42b59eb
Show file tree
Hide file tree
Showing 4 changed files with 12 additions and 23 deletions.
11 changes: 2 additions & 9 deletions drivers/usb/host/ohci-at91.c
Original file line number Diff line number Diff line change
Expand Up @@ -46,9 +46,6 @@ static const char hcd_name[] = "ohci-atmel";

static struct hc_driver __read_mostly ohci_at91_hc_driver;
static int clocked;
static int (*orig_ohci_hub_control)(struct usb_hcd *hcd, u16 typeReq,
u16 wValue, u16 wIndex, char *buf, u16 wLength);
static int (*orig_ohci_hub_status_data)(struct usb_hcd *hcd, char *buf);

extern int usb_disabled(void);

Expand Down Expand Up @@ -262,7 +259,7 @@ static int ohci_at91_usb_get_power(struct at91_usbh_data *pdata, int port)
static int ohci_at91_hub_status_data(struct usb_hcd *hcd, char *buf)
{
struct at91_usbh_data *pdata = hcd->self.controller->platform_data;
int length = orig_ohci_hub_status_data(hcd, buf);
int length = ohci_hub_status_data(hcd, buf);
int port;

at91_for_each_port(port) {
Expand Down Expand Up @@ -340,8 +337,7 @@ static int ohci_at91_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
break;
}

ret = orig_ohci_hub_control(hcd, typeReq, wValue, wIndex + 1,
buf, wLength);
ret = ohci_hub_control(hcd, typeReq, wValue, wIndex + 1, buf, wLength);
if (ret)
goto out;

Expand Down Expand Up @@ -690,9 +686,6 @@ static int __init ohci_at91_init(void)
* too easy.
*/

orig_ohci_hub_control = ohci_at91_hc_driver.hub_control;
orig_ohci_hub_status_data = ohci_at91_hc_driver.hub_status_data;

ohci_at91_hc_driver.hub_status_data = ohci_at91_hub_status_data;
ohci_at91_hc_driver.hub_control = ohci_at91_hub_control;

Expand Down
8 changes: 4 additions & 4 deletions drivers/usb/host/ohci-hub.c
Original file line number Diff line number Diff line change
Expand Up @@ -438,8 +438,7 @@ static int ohci_root_hub_state_changes(struct ohci_hcd *ohci, int changed,

/* build "status change" packet (one or two bytes) from HC registers */

static int
ohci_hub_status_data (struct usb_hcd *hcd, char *buf)
int ohci_hub_status_data(struct usb_hcd *hcd, char *buf)
{
struct ohci_hcd *ohci = hcd_to_ohci (hcd);
int i, changed = 0, length = 1;
Expand Down Expand Up @@ -504,6 +503,7 @@ ohci_hub_status_data (struct usb_hcd *hcd, char *buf)

return changed ? length : 0;
}
EXPORT_SYMBOL_GPL(ohci_hub_status_data);

/*-------------------------------------------------------------------------*/

Expand Down Expand Up @@ -646,7 +646,7 @@ static inline int root_port_reset (struct ohci_hcd *ohci, unsigned port)
return 0;
}

static int ohci_hub_control (
int ohci_hub_control(
struct usb_hcd *hcd,
u16 typeReq,
u16 wValue,
Expand Down Expand Up @@ -772,4 +772,4 @@ static int ohci_hub_control (
}
return retval;
}

EXPORT_SYMBOL_GPL(ohci_hub_control);
13 changes: 3 additions & 10 deletions drivers/usb/host/ohci-s3c2410.c
Original file line number Diff line number Diff line change
Expand Up @@ -45,10 +45,6 @@ static struct clk *usb_clk;

/* forward definitions */

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

static void s3c2410_hcd_oc(struct s3c2410_hcd_info *info, int port_oc);

/* conversion functions */
Expand Down Expand Up @@ -110,7 +106,7 @@ ohci_s3c2410_hub_status_data(struct usb_hcd *hcd, char *buf)
int orig;
int portno;

orig = orig_ohci_hub_status_data(hcd, buf);
orig = ohci_hub_status_data(hcd, buf);

if (info == NULL)
return orig;
Expand Down Expand Up @@ -181,7 +177,7 @@ static int ohci_s3c2410_hub_control(
* process the request straight away and exit */

if (info == NULL) {
ret = orig_ohci_hub_control(hcd, typeReq, wValue,
ret = ohci_hub_control(hcd, typeReq, wValue,
wIndex, buf, wLength);
goto out;
}
Expand Down Expand Up @@ -231,7 +227,7 @@ static int ohci_s3c2410_hub_control(
break;
}

ret = orig_ohci_hub_control(hcd, typeReq, wValue, wIndex, buf, wLength);
ret = ohci_hub_control(hcd, typeReq, wValue, wIndex, buf, wLength);
if (ret)
goto out;

Expand Down Expand Up @@ -489,9 +485,6 @@ static int __init ohci_s3c2410_init(void)
* override these functions by making it too easy.
*/

orig_ohci_hub_control = ohci_s3c2410_hc_driver.hub_control;
orig_ohci_hub_status_data = ohci_s3c2410_hc_driver.hub_status_data;

ohci_s3c2410_hc_driver.hub_status_data = ohci_s3c2410_hub_status_data;
ohci_s3c2410_hc_driver.hub_control = ohci_s3c2410_hub_control;

Expand Down
3 changes: 3 additions & 0 deletions drivers/usb/host/ohci.h
Original file line number Diff line number Diff line change
Expand Up @@ -727,3 +727,6 @@ extern int ohci_setup(struct usb_hcd *hcd);
extern int ohci_suspend(struct usb_hcd *hcd, bool do_wakeup);
extern int ohci_resume(struct usb_hcd *hcd, bool hibernated);
#endif
extern int ohci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
u16 wIndex, char *buf, u16 wLength);
extern int ohci_hub_status_data(struct usb_hcd *hcd, char *buf);

0 comments on commit 42b59eb

Please sign in to comment.