12 #include <linux/kernel.h>
13 #include <linux/module.h>
20 #define CAPLENGTH_MASK (0xff)
41 static void ehci_clock_enable(
struct ehci_hcd_mv *ehci_mv)
45 for (i = 0; i < ehci_mv->
clknum; i++)
49 static void ehci_clock_disable(
struct ehci_hcd_mv *ehci_mv)
53 for (i = 0; i < ehci_mv->
clknum; i++)
57 static int mv_ehci_enable(
struct ehci_hcd_mv *ehci_mv)
61 ehci_clock_enable(ehci_mv);
62 if (ehci_mv->
pdata->phy_init) {
71 static void mv_ehci_disable(
struct ehci_hcd_mv *ehci_mv)
73 if (ehci_mv->
pdata->phy_deinit)
75 ehci_clock_disable(ehci_mv);
78 static int mv_ehci_reset(
struct usb_hcd *hcd)
80 struct device *
dev = hcd->self.controller;
84 if (ehci_mv ==
NULL) {
85 dev_err(dev,
"Can not find private ehci data\n");
91 retval = ehci_setup(hcd);
93 dev_err(dev,
"ehci_setup failed %d\n", retval);
98 static const struct hc_driver mv_ehci_hc_driver = {
99 .description = hcd_name,
100 .product_desc =
"Marvell EHCI",
101 .hcd_priv_size =
sizeof(
struct ehci_hcd),
107 .flags = HCD_MEMORY | HCD_USB2,
112 .reset = mv_ehci_reset,
115 .shutdown = ehci_shutdown,
120 .urb_enqueue = ehci_urb_enqueue,
121 .urb_dequeue = ehci_urb_dequeue,
122 .endpoint_disable = ehci_endpoint_disable,
123 .endpoint_reset = ehci_endpoint_reset,
124 .clear_tt_buffer_complete = ehci_clear_tt_buffer_complete,
129 .get_frame_number = ehci_get_frame,
134 .hub_status_data = ehci_hub_status_data,
135 .hub_control = ehci_hub_control,
147 int clk_i, retval = -
ENODEV;
152 dev_err(&pdev->
dev,
"missing platform_data\n");
163 size =
sizeof(*ehci_mv) +
sizeof(
struct clk *) * pdata->
clknum;
165 if (ehci_mv ==
NULL) {
166 dev_err(&pdev->
dev,
"cannot allocate ehci_hcd_mv\n");
171 platform_set_drvdata(pdev, ehci_mv);
176 for (clk_i = 0; clk_i < ehci_mv->
clknum; clk_i++) {
177 ehci_mv->
clk[clk_i] =
179 if (IS_ERR(ehci_mv->
clk[clk_i])) {
180 dev_err(&pdev->
dev,
"error get clck \"%s\"\n",
182 retval = PTR_ERR(ehci_mv->
clk[clk_i]);
183 goto err_clear_drvdata;
189 dev_err(&pdev->
dev,
"no phy I/O memory resource defined\n");
191 goto err_clear_drvdata;
197 dev_err(&pdev->
dev,
"failed to map phy I/O memory\n");
199 goto err_clear_drvdata;
204 dev_err(&pdev->
dev,
"no I/O memory resource defined\n");
206 goto err_clear_drvdata;
212 dev_err(&pdev->
dev,
"failed to map I/O memory\n");
214 goto err_clear_drvdata;
217 retval = mv_ehci_enable(ehci_mv);
219 dev_err(&pdev->
dev,
"init phy error %d\n", retval);
220 goto err_clear_drvdata;
227 hcd->rsrc_start = r->
start;
228 hcd->rsrc_len = r->
end - r->
start + 1;
235 goto err_disable_clk;
238 ehci = hcd_to_ehci(hcd);
243 #ifdef CONFIG_USB_OTG_UTILS
245 if (IS_ERR_OR_NULL(ehci_mv->
otg)) {
247 "unable to find transceiver\n");
249 goto err_disable_clk;
252 retval = otg_set_host(ehci_mv->
otg->otg, &hcd->self);
255 "unable to register with transceiver\n");
257 goto err_disable_clk;
260 mv_ehci_disable(ehci_mv);
263 "must have CONFIG_USB_OTG_UTILS enabled\n");
264 goto err_disable_clk;
273 "failed to add hcd with err %d\n", retval);
282 "successful find EHCI device with regs 0x%p irq %d"
283 " working in %s mode\n", hcd->regs, hcd->irq,
292 mv_ehci_disable(ehci_mv);
294 platform_set_drvdata(pdev,
NULL);
303 struct ehci_hcd_mv *ehci_mv = platform_get_drvdata(pdev);
304 struct usb_hcd *hcd = ehci_mv->
hcd;
307 if (hcd->rh_registered)
310 if (!IS_ERR_OR_NULL(ehci_mv->
otg))
311 otg_set_host(ehci_mv->
otg->otg,
NULL);
314 if (ehci_mv->
pdata->set_vbus)
315 ehci_mv->
pdata->set_vbus(0);
317 mv_ehci_disable(ehci_mv);
320 platform_set_drvdata(pdev,
NULL);
339 struct ehci_hcd_mv *ehci_mv = platform_get_drvdata(pdev);
340 struct usb_hcd *hcd = ehci_mv->
hcd;
342 if (!hcd->rh_registered)
345 if (hcd->driver->shutdown)
346 hcd->driver->shutdown(hcd);
350 .probe = mv_ehci_probe,
351 .remove = mv_ehci_remove,
352 .shutdown = mv_ehci_shutdown,
357 .id_table = ehci_id_table,