driver core: Make Kconfig text for DEBUG_TEST_DRIVER_REMOVE stronger
[cascardo/linux.git] / drivers / usb / host / ohci-at91.c
1 /*
2  * OHCI HCD (Host Controller Driver) for USB.
3  *
4  *  Copyright (C) 2004 SAN People (Pty) Ltd.
5  *  Copyright (C) 2005 Thibaut VARENE <varenet@parisc-linux.org>
6  *
7  * AT91 Bus Glue
8  *
9  * Based on fragments of 2.4 driver by Rick Bronson.
10  * Based on ohci-omap.c
11  *
12  * This file is licenced under the GPL.
13  */
14
15 #include <linux/clk.h>
16 #include <linux/dma-mapping.h>
17 #include <linux/of_platform.h>
18 #include <linux/of_gpio.h>
19 #include <linux/platform_device.h>
20 #include <linux/platform_data/atmel.h>
21 #include <linux/io.h>
22 #include <linux/kernel.h>
23 #include <linux/module.h>
24 #include <linux/mfd/syscon.h>
25 #include <linux/regmap.h>
26 #include <linux/usb.h>
27 #include <linux/usb/hcd.h>
28 #include <soc/at91/atmel-sfr.h>
29
30 #include "ohci.h"
31
32 #define valid_port(index)       ((index) >= 0 && (index) < AT91_MAX_USBH_PORTS)
33 #define at91_for_each_port(index)       \
34                 for ((index) = 0; (index) < AT91_MAX_USBH_PORTS; (index)++)
35
36 /* interface, function and usb clocks; sometimes also an AHB clock */
37 #define hcd_to_ohci_at91_priv(h) \
38         ((struct ohci_at91_priv *)hcd_to_ohci(h)->priv)
39
40 #define AT91_MAX_USBH_PORTS     3
41 struct at91_usbh_data {
42         int vbus_pin[AT91_MAX_USBH_PORTS];      /* port power-control pin */
43         int overcurrent_pin[AT91_MAX_USBH_PORTS];
44         u8 ports;                               /* number of ports on root hub */
45         u8 overcurrent_supported;
46         u8 vbus_pin_active_low[AT91_MAX_USBH_PORTS];
47         u8 overcurrent_status[AT91_MAX_USBH_PORTS];
48         u8 overcurrent_changed[AT91_MAX_USBH_PORTS];
49 };
50
51 struct ohci_at91_priv {
52         struct clk *iclk;
53         struct clk *fclk;
54         struct clk *hclk;
55         bool clocked;
56         bool wakeup;            /* Saved wake-up state for resume */
57         struct regmap *sfr_regmap;
58 };
59 /* interface and function clocks; sometimes also an AHB clock */
60
61 #define DRIVER_DESC "OHCI Atmel driver"
62
63 static const char hcd_name[] = "ohci-atmel";
64
65 static struct hc_driver __read_mostly ohci_at91_hc_driver;
66
67 static const struct ohci_driver_overrides ohci_at91_drv_overrides __initconst = {
68         .extra_priv_size = sizeof(struct ohci_at91_priv),
69 };
70
71 extern int usb_disabled(void);
72
73 /*-------------------------------------------------------------------------*/
74
75 static void at91_start_clock(struct ohci_at91_priv *ohci_at91)
76 {
77         if (ohci_at91->clocked)
78                 return;
79
80         clk_set_rate(ohci_at91->fclk, 48000000);
81         clk_prepare_enable(ohci_at91->hclk);
82         clk_prepare_enable(ohci_at91->iclk);
83         clk_prepare_enable(ohci_at91->fclk);
84         ohci_at91->clocked = true;
85 }
86
87 static void at91_stop_clock(struct ohci_at91_priv *ohci_at91)
88 {
89         if (!ohci_at91->clocked)
90                 return;
91
92         clk_disable_unprepare(ohci_at91->fclk);
93         clk_disable_unprepare(ohci_at91->iclk);
94         clk_disable_unprepare(ohci_at91->hclk);
95         ohci_at91->clocked = false;
96 }
97
98 static void at91_start_hc(struct platform_device *pdev)
99 {
100         struct usb_hcd *hcd = platform_get_drvdata(pdev);
101         struct ohci_regs __iomem *regs = hcd->regs;
102         struct ohci_at91_priv *ohci_at91 = hcd_to_ohci_at91_priv(hcd);
103
104         dev_dbg(&pdev->dev, "start\n");
105
106         /*
107          * Start the USB clocks.
108          */
109         at91_start_clock(ohci_at91);
110
111         /*
112          * The USB host controller must remain in reset.
113          */
114         writel(0, &regs->control);
115 }
116
117 static void at91_stop_hc(struct platform_device *pdev)
118 {
119         struct usb_hcd *hcd = platform_get_drvdata(pdev);
120         struct ohci_regs __iomem *regs = hcd->regs;
121         struct ohci_at91_priv *ohci_at91 = hcd_to_ohci_at91_priv(hcd);
122
123         dev_dbg(&pdev->dev, "stop\n");
124
125         /*
126          * Put the USB host controller into reset.
127          */
128         writel(0, &regs->control);
129
130         /*
131          * Stop the USB clocks.
132          */
133         at91_stop_clock(ohci_at91);
134 }
135
136
137 /*-------------------------------------------------------------------------*/
138
139 static void usb_hcd_at91_remove (struct usb_hcd *, struct platform_device *);
140
141 static struct regmap *at91_dt_syscon_sfr(void)
142 {
143         struct regmap *regmap;
144
145         regmap = syscon_regmap_lookup_by_compatible("atmel,sama5d2-sfr");
146         if (IS_ERR(regmap))
147                 regmap = NULL;
148
149         return regmap;
150 }
151
152 /* configure so an HC device and id are always provided */
153 /* always called with process context; sleeping is OK */
154
155
156 /**
157  * usb_hcd_at91_probe - initialize AT91-based HCDs
158  * Context: !in_interrupt()
159  *
160  * Allocates basic resources for this USB host controller, and
161  * then invokes the start() method for the HCD associated with it
162  * through the hotplug entry's driver_data.
163  */
164 static int usb_hcd_at91_probe(const struct hc_driver *driver,
165                         struct platform_device *pdev)
166 {
167         struct at91_usbh_data *board;
168         struct ohci_hcd *ohci;
169         int retval;
170         struct usb_hcd *hcd;
171         struct ohci_at91_priv *ohci_at91;
172         struct device *dev = &pdev->dev;
173         struct resource *res;
174         int irq;
175
176         irq = platform_get_irq(pdev, 0);
177         if (irq < 0) {
178                 dev_dbg(dev, "hcd probe: missing irq resource\n");
179                 return irq;
180         }
181
182         hcd = usb_create_hcd(driver, dev, "at91");
183         if (!hcd)
184                 return -ENOMEM;
185         ohci_at91 = hcd_to_ohci_at91_priv(hcd);
186
187         res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
188         hcd->regs = devm_ioremap_resource(dev, res);
189         if (IS_ERR(hcd->regs)) {
190                 retval = PTR_ERR(hcd->regs);
191                 goto err;
192         }
193         hcd->rsrc_start = res->start;
194         hcd->rsrc_len = resource_size(res);
195
196         ohci_at91->iclk = devm_clk_get(dev, "ohci_clk");
197         if (IS_ERR(ohci_at91->iclk)) {
198                 dev_err(dev, "failed to get ohci_clk\n");
199                 retval = PTR_ERR(ohci_at91->iclk);
200                 goto err;
201         }
202         ohci_at91->fclk = devm_clk_get(dev, "uhpck");
203         if (IS_ERR(ohci_at91->fclk)) {
204                 dev_err(dev, "failed to get uhpck\n");
205                 retval = PTR_ERR(ohci_at91->fclk);
206                 goto err;
207         }
208         ohci_at91->hclk = devm_clk_get(dev, "hclk");
209         if (IS_ERR(ohci_at91->hclk)) {
210                 dev_err(dev, "failed to get hclk\n");
211                 retval = PTR_ERR(ohci_at91->hclk);
212                 goto err;
213         }
214
215         ohci_at91->sfr_regmap = at91_dt_syscon_sfr();
216         if (!ohci_at91->sfr_regmap)
217                 dev_warn(dev, "failed to find sfr node\n");
218
219         board = hcd->self.controller->platform_data;
220         ohci = hcd_to_ohci(hcd);
221         ohci->num_ports = board->ports;
222         at91_start_hc(pdev);
223
224         retval = usb_add_hcd(hcd, irq, IRQF_SHARED);
225         if (retval == 0) {
226                 device_wakeup_enable(hcd->self.controller);
227                 return retval;
228         }
229
230         /* Error handling */
231         at91_stop_hc(pdev);
232
233  err:
234         usb_put_hcd(hcd);
235         return retval;
236 }
237
238
239 /* may be called with controller, bus, and devices active */
240
241 /**
242  * usb_hcd_at91_remove - shutdown processing for AT91-based HCDs
243  * @dev: USB Host Controller being removed
244  * Context: !in_interrupt()
245  *
246  * Reverses the effect of usb_hcd_at91_probe(), first invoking
247  * the HCD's stop() method.  It is always called from a thread
248  * context, "rmmod" or something similar.
249  *
250  */
251 static void usb_hcd_at91_remove(struct usb_hcd *hcd,
252                                 struct platform_device *pdev)
253 {
254         usb_remove_hcd(hcd);
255         at91_stop_hc(pdev);
256         usb_put_hcd(hcd);
257 }
258
259 /*-------------------------------------------------------------------------*/
260 static void ohci_at91_usb_set_power(struct at91_usbh_data *pdata, int port, int enable)
261 {
262         if (!valid_port(port))
263                 return;
264
265         if (!gpio_is_valid(pdata->vbus_pin[port]))
266                 return;
267
268         gpio_set_value(pdata->vbus_pin[port],
269                        pdata->vbus_pin_active_low[port] ^ enable);
270 }
271
272 static int ohci_at91_usb_get_power(struct at91_usbh_data *pdata, int port)
273 {
274         if (!valid_port(port))
275                 return -EINVAL;
276
277         if (!gpio_is_valid(pdata->vbus_pin[port]))
278                 return -EINVAL;
279
280         return gpio_get_value(pdata->vbus_pin[port]) ^
281                 pdata->vbus_pin_active_low[port];
282 }
283
284 /*
285  * Update the status data from the hub with the over-current indicator change.
286  */
287 static int ohci_at91_hub_status_data(struct usb_hcd *hcd, char *buf)
288 {
289         struct at91_usbh_data *pdata = hcd->self.controller->platform_data;
290         int length = ohci_hub_status_data(hcd, buf);
291         int port;
292
293         at91_for_each_port(port) {
294                 if (pdata->overcurrent_changed[port]) {
295                         if (!length)
296                                 length = 1;
297                         buf[0] |= 1 << (port + 1);
298                 }
299         }
300
301         return length;
302 }
303
304 static int ohci_at91_port_suspend(struct regmap *regmap, u8 set)
305 {
306         u32 regval;
307         int ret;
308
309         if (!regmap)
310                 return 0;
311
312         ret = regmap_read(regmap, AT91_SFR_OHCIICR, &regval);
313         if (ret)
314                 return ret;
315
316         if (set)
317                 regval |= AT91_OHCIICR_USB_SUSPEND;
318         else
319                 regval &= ~AT91_OHCIICR_USB_SUSPEND;
320
321         regmap_write(regmap, AT91_SFR_OHCIICR, regval);
322
323         return 0;
324 }
325
326 /*
327  * Look at the control requests to the root hub and see if we need to override.
328  */
329 static int ohci_at91_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
330                                  u16 wIndex, char *buf, u16 wLength)
331 {
332         struct at91_usbh_data *pdata = dev_get_platdata(hcd->self.controller);
333         struct ohci_at91_priv *ohci_at91 = hcd_to_ohci_at91_priv(hcd);
334         struct usb_hub_descriptor *desc;
335         int ret = -EINVAL;
336         u32 *data = (u32 *)buf;
337
338         dev_dbg(hcd->self.controller,
339                 "ohci_at91_hub_control(%p,0x%04x,0x%04x,0x%04x,%p,%04x)\n",
340                 hcd, typeReq, wValue, wIndex, buf, wLength);
341
342         wIndex--;
343
344         switch (typeReq) {
345         case SetPortFeature:
346                 switch (wValue) {
347                 case USB_PORT_FEAT_POWER:
348                         dev_dbg(hcd->self.controller, "SetPortFeat: POWER\n");
349                         if (valid_port(wIndex)) {
350                                 ohci_at91_usb_set_power(pdata, wIndex, 1);
351                                 ret = 0;
352                         }
353
354                         goto out;
355
356                 case USB_PORT_FEAT_SUSPEND:
357                         dev_dbg(hcd->self.controller, "SetPortFeat: SUSPEND\n");
358                         if (valid_port(wIndex)) {
359                                 ohci_at91_port_suspend(ohci_at91->sfr_regmap,
360                                                        1);
361                                 return 0;
362                         }
363                         break;
364                 }
365                 break;
366
367         case ClearPortFeature:
368                 switch (wValue) {
369                 case USB_PORT_FEAT_C_OVER_CURRENT:
370                         dev_dbg(hcd->self.controller,
371                                 "ClearPortFeature: C_OVER_CURRENT\n");
372
373                         if (valid_port(wIndex)) {
374                                 pdata->overcurrent_changed[wIndex] = 0;
375                                 pdata->overcurrent_status[wIndex] = 0;
376                         }
377
378                         goto out;
379
380                 case USB_PORT_FEAT_OVER_CURRENT:
381                         dev_dbg(hcd->self.controller,
382                                 "ClearPortFeature: OVER_CURRENT\n");
383
384                         if (valid_port(wIndex))
385                                 pdata->overcurrent_status[wIndex] = 0;
386
387                         goto out;
388
389                 case USB_PORT_FEAT_POWER:
390                         dev_dbg(hcd->self.controller,
391                                 "ClearPortFeature: POWER\n");
392
393                         if (valid_port(wIndex)) {
394                                 ohci_at91_usb_set_power(pdata, wIndex, 0);
395                                 return 0;
396                         }
397                         break;
398
399                 case USB_PORT_FEAT_SUSPEND:
400                         dev_dbg(hcd->self.controller, "ClearPortFeature: SUSPEND\n");
401                         if (valid_port(wIndex)) {
402                                 ohci_at91_port_suspend(ohci_at91->sfr_regmap,
403                                                        0);
404                                 return 0;
405                         }
406                         break;
407                 }
408                 break;
409         }
410
411         ret = ohci_hub_control(hcd, typeReq, wValue, wIndex + 1, buf, wLength);
412         if (ret)
413                 goto out;
414
415         switch (typeReq) {
416         case GetHubDescriptor:
417
418                 /* update the hub's descriptor */
419
420                 desc = (struct usb_hub_descriptor *)buf;
421
422                 dev_dbg(hcd->self.controller, "wHubCharacteristics 0x%04x\n",
423                         desc->wHubCharacteristics);
424
425                 /* remove the old configurations for power-switching, and
426                  * over-current protection, and insert our new configuration
427                  */
428
429                 desc->wHubCharacteristics &= ~cpu_to_le16(HUB_CHAR_LPSM);
430                 desc->wHubCharacteristics |=
431                         cpu_to_le16(HUB_CHAR_INDV_PORT_LPSM);
432
433                 if (pdata->overcurrent_supported) {
434                         desc->wHubCharacteristics &= ~cpu_to_le16(HUB_CHAR_OCPM);
435                         desc->wHubCharacteristics |=
436                                 cpu_to_le16(HUB_CHAR_INDV_PORT_OCPM);
437                 }
438
439                 dev_dbg(hcd->self.controller, "wHubCharacteristics after 0x%04x\n",
440                         desc->wHubCharacteristics);
441
442                 return ret;
443
444         case GetPortStatus:
445                 /* check port status */
446
447                 dev_dbg(hcd->self.controller, "GetPortStatus(%d)\n", wIndex);
448
449                 if (valid_port(wIndex)) {
450                         if (!ohci_at91_usb_get_power(pdata, wIndex))
451                                 *data &= ~cpu_to_le32(RH_PS_PPS);
452
453                         if (pdata->overcurrent_changed[wIndex])
454                                 *data |= cpu_to_le32(RH_PS_OCIC);
455
456                         if (pdata->overcurrent_status[wIndex])
457                                 *data |= cpu_to_le32(RH_PS_POCI);
458                 }
459         }
460
461  out:
462         return ret;
463 }
464
465 /*-------------------------------------------------------------------------*/
466
467 static irqreturn_t ohci_hcd_at91_overcurrent_irq(int irq, void *data)
468 {
469         struct platform_device *pdev = data;
470         struct at91_usbh_data *pdata = dev_get_platdata(&pdev->dev);
471         int val, gpio, port;
472
473         /* From the GPIO notifying the over-current situation, find
474          * out the corresponding port */
475         at91_for_each_port(port) {
476                 if (gpio_is_valid(pdata->overcurrent_pin[port]) &&
477                                 gpio_to_irq(pdata->overcurrent_pin[port]) == irq) {
478                         gpio = pdata->overcurrent_pin[port];
479                         break;
480                 }
481         }
482
483         if (port == AT91_MAX_USBH_PORTS) {
484                 dev_err(& pdev->dev, "overcurrent interrupt from unknown GPIO\n");
485                 return IRQ_HANDLED;
486         }
487
488         val = gpio_get_value(gpio);
489
490         /* When notified of an over-current situation, disable power
491            on the corresponding port, and mark this port in
492            over-current. */
493         if (!val) {
494                 ohci_at91_usb_set_power(pdata, port, 0);
495                 pdata->overcurrent_status[port]  = 1;
496                 pdata->overcurrent_changed[port] = 1;
497         }
498
499         dev_dbg(& pdev->dev, "overcurrent situation %s\n",
500                 val ? "exited" : "notified");
501
502         return IRQ_HANDLED;
503 }
504
505 static const struct of_device_id at91_ohci_dt_ids[] = {
506         { .compatible = "atmel,at91rm9200-ohci" },
507         { /* sentinel */ }
508 };
509
510 MODULE_DEVICE_TABLE(of, at91_ohci_dt_ids);
511
512 /*-------------------------------------------------------------------------*/
513
514 static int ohci_hcd_at91_drv_probe(struct platform_device *pdev)
515 {
516         struct device_node *np = pdev->dev.of_node;
517         struct at91_usbh_data   *pdata;
518         int                     i;
519         int                     gpio;
520         int                     ret;
521         enum of_gpio_flags      flags;
522         u32                     ports;
523
524         /* Right now device-tree probed devices don't get dma_mask set.
525          * Since shared usb code relies on it, set it here for now.
526          * Once we have dma capability bindings this can go away.
527          */
528         ret = dma_coerce_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(32));
529         if (ret)
530                 return ret;
531
532         pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL);
533         if (!pdata)
534                 return -ENOMEM;
535
536         pdev->dev.platform_data = pdata;
537
538         if (!of_property_read_u32(np, "num-ports", &ports))
539                 pdata->ports = ports;
540
541         at91_for_each_port(i) {
542                 /*
543                  * do not configure PIO if not in relation with
544                  * real USB port on board
545                  */
546                 if (i >= pdata->ports) {
547                         pdata->vbus_pin[i] = -EINVAL;
548                         pdata->overcurrent_pin[i] = -EINVAL;
549                         continue;
550                 }
551
552                 gpio = of_get_named_gpio_flags(np, "atmel,vbus-gpio", i,
553                                                &flags);
554                 pdata->vbus_pin[i] = gpio;
555                 if (!gpio_is_valid(gpio))
556                         continue;
557                 pdata->vbus_pin_active_low[i] = flags & OF_GPIO_ACTIVE_LOW;
558
559                 ret = gpio_request(gpio, "ohci_vbus");
560                 if (ret) {
561                         dev_err(&pdev->dev,
562                                 "can't request vbus gpio %d\n", gpio);
563                         continue;
564                 }
565                 ret = gpio_direction_output(gpio,
566                                         !pdata->vbus_pin_active_low[i]);
567                 if (ret) {
568                         dev_err(&pdev->dev,
569                                 "can't put vbus gpio %d as output %d\n",
570                                 gpio, !pdata->vbus_pin_active_low[i]);
571                         gpio_free(gpio);
572                         continue;
573                 }
574
575                 ohci_at91_usb_set_power(pdata, i, 1);
576         }
577
578         at91_for_each_port(i) {
579                 if (i >= pdata->ports)
580                         break;
581
582                 pdata->overcurrent_pin[i] =
583                         of_get_named_gpio_flags(np, "atmel,oc-gpio", i, &flags);
584
585                 if (!gpio_is_valid(pdata->overcurrent_pin[i]))
586                         continue;
587                 gpio = pdata->overcurrent_pin[i];
588
589                 ret = gpio_request(gpio, "ohci_overcurrent");
590                 if (ret) {
591                         dev_err(&pdev->dev,
592                                 "can't request overcurrent gpio %d\n",
593                                 gpio);
594                         continue;
595                 }
596
597                 ret = gpio_direction_input(gpio);
598                 if (ret) {
599                         dev_err(&pdev->dev,
600                                 "can't configure overcurrent gpio %d as input\n",
601                                 gpio);
602                         gpio_free(gpio);
603                         continue;
604                 }
605
606                 ret = request_irq(gpio_to_irq(gpio),
607                                   ohci_hcd_at91_overcurrent_irq,
608                                   IRQF_SHARED, "ohci_overcurrent", pdev);
609                 if (ret) {
610                         gpio_free(gpio);
611                         dev_err(&pdev->dev,
612                                 "can't get gpio IRQ for overcurrent\n");
613                 }
614         }
615
616         device_init_wakeup(&pdev->dev, 1);
617         return usb_hcd_at91_probe(&ohci_at91_hc_driver, pdev);
618 }
619
620 static int ohci_hcd_at91_drv_remove(struct platform_device *pdev)
621 {
622         struct at91_usbh_data   *pdata = dev_get_platdata(&pdev->dev);
623         int                     i;
624
625         if (pdata) {
626                 at91_for_each_port(i) {
627                         if (!gpio_is_valid(pdata->vbus_pin[i]))
628                                 continue;
629                         ohci_at91_usb_set_power(pdata, i, 0);
630                         gpio_free(pdata->vbus_pin[i]);
631                 }
632
633                 at91_for_each_port(i) {
634                         if (!gpio_is_valid(pdata->overcurrent_pin[i]))
635                                 continue;
636                         free_irq(gpio_to_irq(pdata->overcurrent_pin[i]), pdev);
637                         gpio_free(pdata->overcurrent_pin[i]);
638                 }
639         }
640
641         device_init_wakeup(&pdev->dev, 0);
642         usb_hcd_at91_remove(platform_get_drvdata(pdev), pdev);
643         return 0;
644 }
645
646 static int __maybe_unused
647 ohci_hcd_at91_drv_suspend(struct device *dev)
648 {
649         struct usb_hcd  *hcd = dev_get_drvdata(dev);
650         struct ohci_hcd *ohci = hcd_to_ohci(hcd);
651         struct ohci_at91_priv *ohci_at91 = hcd_to_ohci_at91_priv(hcd);
652         int             ret;
653
654         /*
655          * Disable wakeup if we are going to sleep with slow clock mode
656          * enabled.
657          */
658         ohci_at91->wakeup = device_may_wakeup(dev)
659                         && !at91_suspend_entering_slow_clock();
660
661         if (ohci_at91->wakeup)
662                 enable_irq_wake(hcd->irq);
663
664         ohci_at91_port_suspend(ohci_at91->sfr_regmap, 1);
665
666         ret = ohci_suspend(hcd, ohci_at91->wakeup);
667         if (ret) {
668                 if (ohci_at91->wakeup)
669                         disable_irq_wake(hcd->irq);
670                 return ret;
671         }
672         /*
673          * The integrated transceivers seem unable to notice disconnect,
674          * reconnect, or wakeup without the 48 MHz clock active.  so for
675          * correctness, always discard connection state (using reset).
676          *
677          * REVISIT: some boards will be able to turn VBUS off...
678          */
679         if (!ohci_at91->wakeup) {
680                 ohci->hc_control = ohci_readl(ohci, &ohci->regs->control);
681                 ohci->hc_control &= OHCI_CTRL_RWC;
682                 ohci_writel(ohci, ohci->hc_control, &ohci->regs->control);
683                 ohci->rh_state = OHCI_RH_HALTED;
684
685                 /* flush the writes */
686                 (void) ohci_readl (ohci, &ohci->regs->control);
687                 at91_stop_clock(ohci_at91);
688         }
689
690         return ret;
691 }
692
693 static int __maybe_unused
694 ohci_hcd_at91_drv_resume(struct device *dev)
695 {
696         struct usb_hcd  *hcd = dev_get_drvdata(dev);
697         struct ohci_at91_priv *ohci_at91 = hcd_to_ohci_at91_priv(hcd);
698
699         if (ohci_at91->wakeup)
700                 disable_irq_wake(hcd->irq);
701
702         at91_start_clock(ohci_at91);
703
704         ohci_resume(hcd, false);
705
706         ohci_at91_port_suspend(ohci_at91->sfr_regmap, 0);
707
708         return 0;
709 }
710
711 static SIMPLE_DEV_PM_OPS(ohci_hcd_at91_pm_ops, ohci_hcd_at91_drv_suspend,
712                                         ohci_hcd_at91_drv_resume);
713
714 static struct platform_driver ohci_hcd_at91_driver = {
715         .probe          = ohci_hcd_at91_drv_probe,
716         .remove         = ohci_hcd_at91_drv_remove,
717         .shutdown       = usb_hcd_platform_shutdown,
718         .driver         = {
719                 .name   = "at91_ohci",
720                 .pm     = &ohci_hcd_at91_pm_ops,
721                 .of_match_table = at91_ohci_dt_ids,
722         },
723 };
724
725 static int __init ohci_at91_init(void)
726 {
727         if (usb_disabled())
728                 return -ENODEV;
729
730         pr_info("%s: " DRIVER_DESC "\n", hcd_name);
731         ohci_init_driver(&ohci_at91_hc_driver, &ohci_at91_drv_overrides);
732
733         /*
734          * The Atmel HW has some unusual quirks, which require Atmel-specific
735          * workarounds. We override certain hc_driver functions here to
736          * achieve that. We explicitly do not enhance ohci_driver_overrides to
737          * allow this more easily, since this is an unusual case, and we don't
738          * want to encourage others to override these functions by making it
739          * too easy.
740          */
741
742         ohci_at91_hc_driver.hub_status_data     = ohci_at91_hub_status_data;
743         ohci_at91_hc_driver.hub_control         = ohci_at91_hub_control;
744
745         return platform_driver_register(&ohci_hcd_at91_driver);
746 }
747 module_init(ohci_at91_init);
748
749 static void __exit ohci_at91_cleanup(void)
750 {
751         platform_driver_unregister(&ohci_hcd_at91_driver);
752 }
753 module_exit(ohci_at91_cleanup);
754
755 MODULE_DESCRIPTION(DRIVER_DESC);
756 MODULE_LICENSE("GPL");
757 MODULE_ALIAS("platform:at91_ohci");