| From c78947c1adb99d1287bb005b121c298d1299be1e Mon Sep 17 00:00:00 2001 |
| From: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com> |
| Date: Sun, 2 Jun 2013 01:33:56 +0400 |
| Subject: ehci-platform: add pre_setup() method to platform data |
| |
| Sometimes there is a need to initialize some non-standard registers mapped to |
| the EHCI region before accessing the standard EHCI registers. Add pre_setup() |
| method with 'struct usb_hcd *' parameter to be called just before ehci_setup() |
| to the 'ehci-platform' driver's platform data for this purpose... |
| |
| While at it, add the missing incomplete declaration of 'struct platform_device' |
| to <linux/usb/ehci_pdriver.h>... |
| |
| The patch has been tested on the Marzen and BOCK-W boards. |
| |
| Suggested-by: Alan Stern <stern@rowland.harvard.edu> |
| Signed-off-by: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com> |
| Acked-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> |
| Acked-by: Alan Stern <stern@rowland.harvard.edu> |
| Signed-off-by: Simon Horman <horms+renesas@verge.net.au> |
| (cherry picked from commit 743fcce0a89e04dc511b4ea40eba8e3f7cec92d4) |
| Signed-off-by: Simon Horman <horms+renesas@verge.net.au> |
| --- |
| drivers/usb/host/ehci-platform.c | 6 ++++++ |
| include/linux/usb/ehci_pdriver.h | 4 ++++ |
| 2 files changed, 10 insertions(+) |
| |
| diff --git a/drivers/usb/host/ehci-platform.c b/drivers/usb/host/ehci-platform.c |
| index f47f2594..d1f5cea4 100644 |
| --- a/drivers/usb/host/ehci-platform.c |
| +++ b/drivers/usb/host/ehci-platform.c |
| @@ -48,6 +48,12 @@ static int ehci_platform_reset(struct usb_hcd *hcd) |
| ehci->big_endian_desc = pdata->big_endian_desc; |
| ehci->big_endian_mmio = pdata->big_endian_mmio; |
| |
| + if (pdata->pre_setup) { |
| + retval = pdata->pre_setup(hcd); |
| + if (retval < 0) |
| + return retval; |
| + } |
| + |
| ehci->caps = hcd->regs + pdata->caps_offset; |
| retval = ehci_setup(hcd); |
| if (retval) |
| diff --git a/include/linux/usb/ehci_pdriver.h b/include/linux/usb/ehci_pdriver.h |
| index 99238b09..7eb4dcd0 100644 |
| --- a/include/linux/usb/ehci_pdriver.h |
| +++ b/include/linux/usb/ehci_pdriver.h |
| @@ -19,6 +19,9 @@ |
| #ifndef __USB_CORE_EHCI_PDRIVER_H |
| #define __USB_CORE_EHCI_PDRIVER_H |
| |
| +struct platform_device; |
| +struct usb_hcd; |
| + |
| /** |
| * struct usb_ehci_pdata - platform_data for generic ehci driver |
| * |
| @@ -50,6 +53,7 @@ struct usb_ehci_pdata { |
| /* Turn on only VBUS suspend power and hotplug detection, |
| * turn off everything else */ |
| void (*power_suspend)(struct platform_device *pdev); |
| + int (*pre_setup)(struct usb_hcd *hcd); |
| }; |
| |
| #endif /* __USB_CORE_EHCI_PDRIVER_H */ |
| -- |
| 1.8.4.3.gca3854a |
| |