提交 42b59eba 编写于 作者: L Laurent Pinchart 提交者: Greg Kroah-Hartman

USB: OHCI: Export the OHCI hub control and status_data functions

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: NLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Acked-by: NAlan Stern <stern@rowland.harvard.edu>
Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
上级 0021a75a
...@@ -46,9 +46,6 @@ static const char hcd_name[] = "ohci-atmel"; ...@@ -46,9 +46,6 @@ static const char hcd_name[] = "ohci-atmel";
static struct hc_driver __read_mostly ohci_at91_hc_driver; static struct hc_driver __read_mostly ohci_at91_hc_driver;
static int clocked; 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); extern int usb_disabled(void);
...@@ -262,7 +259,7 @@ static int ohci_at91_usb_get_power(struct at91_usbh_data *pdata, int port) ...@@ -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) static int ohci_at91_hub_status_data(struct usb_hcd *hcd, char *buf)
{ {
struct at91_usbh_data *pdata = hcd->self.controller->platform_data; 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; int port;
at91_for_each_port(port) { at91_for_each_port(port) {
...@@ -340,8 +337,7 @@ static int ohci_at91_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue, ...@@ -340,8 +337,7 @@ static int ohci_at91_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
break; break;
} }
ret = orig_ohci_hub_control(hcd, typeReq, wValue, wIndex + 1, ret = ohci_hub_control(hcd, typeReq, wValue, wIndex + 1, buf, wLength);
buf, wLength);
if (ret) if (ret)
goto out; goto out;
...@@ -690,9 +686,6 @@ static int __init ohci_at91_init(void) ...@@ -690,9 +686,6 @@ static int __init ohci_at91_init(void)
* too easy. * 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_status_data = ohci_at91_hub_status_data;
ohci_at91_hc_driver.hub_control = ohci_at91_hub_control; ohci_at91_hc_driver.hub_control = ohci_at91_hub_control;
......
...@@ -438,8 +438,7 @@ static int ohci_root_hub_state_changes(struct ohci_hcd *ohci, int changed, ...@@ -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 */ /* build "status change" packet (one or two bytes) from HC registers */
static int int ohci_hub_status_data(struct usb_hcd *hcd, char *buf)
ohci_hub_status_data (struct usb_hcd *hcd, char *buf)
{ {
struct ohci_hcd *ohci = hcd_to_ohci (hcd); struct ohci_hcd *ohci = hcd_to_ohci (hcd);
int i, changed = 0, length = 1; int i, changed = 0, length = 1;
...@@ -504,6 +503,7 @@ ohci_hub_status_data (struct usb_hcd *hcd, char *buf) ...@@ -504,6 +503,7 @@ ohci_hub_status_data (struct usb_hcd *hcd, char *buf)
return changed ? length : 0; return changed ? length : 0;
} }
EXPORT_SYMBOL_GPL(ohci_hub_status_data);
/*-------------------------------------------------------------------------*/ /*-------------------------------------------------------------------------*/
...@@ -646,7 +646,7 @@ static inline int root_port_reset (struct ohci_hcd *ohci, unsigned port) ...@@ -646,7 +646,7 @@ static inline int root_port_reset (struct ohci_hcd *ohci, unsigned port)
return 0; return 0;
} }
static int ohci_hub_control ( int ohci_hub_control(
struct usb_hcd *hcd, struct usb_hcd *hcd,
u16 typeReq, u16 typeReq,
u16 wValue, u16 wValue,
...@@ -772,4 +772,4 @@ static int ohci_hub_control ( ...@@ -772,4 +772,4 @@ static int ohci_hub_control (
} }
return retval; return retval;
} }
EXPORT_SYMBOL_GPL(ohci_hub_control);
...@@ -45,10 +45,6 @@ static struct clk *usb_clk; ...@@ -45,10 +45,6 @@ static struct clk *usb_clk;
/* forward definitions */ /* 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); static void s3c2410_hcd_oc(struct s3c2410_hcd_info *info, int port_oc);
/* conversion functions */ /* conversion functions */
...@@ -110,7 +106,7 @@ ohci_s3c2410_hub_status_data(struct usb_hcd *hcd, char *buf) ...@@ -110,7 +106,7 @@ ohci_s3c2410_hub_status_data(struct usb_hcd *hcd, char *buf)
int orig; int orig;
int portno; int portno;
orig = orig_ohci_hub_status_data(hcd, buf); orig = ohci_hub_status_data(hcd, buf);
if (info == NULL) if (info == NULL)
return orig; return orig;
...@@ -181,7 +177,7 @@ static int ohci_s3c2410_hub_control( ...@@ -181,7 +177,7 @@ static int ohci_s3c2410_hub_control(
* process the request straight away and exit */ * process the request straight away and exit */
if (info == NULL) { if (info == NULL) {
ret = orig_ohci_hub_control(hcd, typeReq, wValue, ret = ohci_hub_control(hcd, typeReq, wValue,
wIndex, buf, wLength); wIndex, buf, wLength);
goto out; goto out;
} }
...@@ -231,7 +227,7 @@ static int ohci_s3c2410_hub_control( ...@@ -231,7 +227,7 @@ static int ohci_s3c2410_hub_control(
break; break;
} }
ret = orig_ohci_hub_control(hcd, typeReq, wValue, wIndex, buf, wLength); ret = ohci_hub_control(hcd, typeReq, wValue, wIndex, buf, wLength);
if (ret) if (ret)
goto out; goto out;
...@@ -489,9 +485,6 @@ static int __init ohci_s3c2410_init(void) ...@@ -489,9 +485,6 @@ static int __init ohci_s3c2410_init(void)
* override these functions by making it too easy. * 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_status_data = ohci_s3c2410_hub_status_data;
ohci_s3c2410_hc_driver.hub_control = ohci_s3c2410_hub_control; ohci_s3c2410_hc_driver.hub_control = ohci_s3c2410_hub_control;
......
...@@ -727,3 +727,6 @@ extern int ohci_setup(struct usb_hcd *hcd); ...@@ -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_suspend(struct usb_hcd *hcd, bool do_wakeup);
extern int ohci_resume(struct usb_hcd *hcd, bool hibernated); extern int ohci_resume(struct usb_hcd *hcd, bool hibernated);
#endif #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);
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册