2 * OHCI HCD (Host Controller Driver) for USB.
4 * Copyright (C) 2004 SAN People (Pty) Ltd.
5 * Copyright (C) 2005 Thibaut VARENE <varenet@parisc-linux.org>
9 * Based on fragments of 2.4 driver by Rick Bronson.
10 * Based on ohci-omap.c
12 * This file is licenced under the GPL.
15 #include <linux/clk.h>
16 #include <linux/platform_device.h>
17 #include <linux/of_platform.h>
18 #include <linux/of_gpio.h>
19 #include <linux/platform_data/atmel.h>
21 #include <mach/hardware.h>
26 #ifndef CONFIG_ARCH_AT91
27 #error "CONFIG_ARCH_AT91 must be defined."
30 #define valid_port(index) ((index) >= 0 && (index) < AT91_MAX_USBH_PORTS)
31 #define at91_for_each_port(index) \
32 for ((index) = 0; (index) < AT91_MAX_USBH_PORTS; (index)++)
34 /* interface, function and usb clocks; sometimes also an AHB clock */
35 static struct clk
*iclk
, *fclk
, *uclk
, *hclk
;
38 extern int usb_disabled(void);
40 /*-------------------------------------------------------------------------*/
42 static void at91_start_clock(void)
44 if (IS_ENABLED(CONFIG_COMMON_CLK
)) {
45 clk_set_rate(uclk
, 48000000);
46 clk_prepare_enable(uclk
);
48 clk_prepare_enable(hclk
);
49 clk_prepare_enable(iclk
);
50 clk_prepare_enable(fclk
);
54 static void at91_stop_clock(void)
56 clk_disable_unprepare(fclk
);
57 clk_disable_unprepare(iclk
);
58 clk_disable_unprepare(hclk
);
59 if (IS_ENABLED(CONFIG_COMMON_CLK
))
60 clk_disable_unprepare(uclk
);
64 static void at91_start_hc(struct platform_device
*pdev
)
66 struct usb_hcd
*hcd
= platform_get_drvdata(pdev
);
67 struct ohci_regs __iomem
*regs
= hcd
->regs
;
69 dev_dbg(&pdev
->dev
, "start\n");
72 * Start the USB clocks.
77 * The USB host controller must remain in reset.
79 writel(0, ®s
->control
);
82 static void at91_stop_hc(struct platform_device
*pdev
)
84 struct usb_hcd
*hcd
= platform_get_drvdata(pdev
);
85 struct ohci_regs __iomem
*regs
= hcd
->regs
;
87 dev_dbg(&pdev
->dev
, "stop\n");
90 * Put the USB host controller into reset.
92 writel(0, ®s
->control
);
95 * Stop the USB clocks.
101 /*-------------------------------------------------------------------------*/
103 static void usb_hcd_at91_remove (struct usb_hcd
*, struct platform_device
*);
105 /* configure so an HC device and id are always provided */
106 /* always called with process context; sleeping is OK */
110 * usb_hcd_at91_probe - initialize AT91-based HCDs
111 * Context: !in_interrupt()
113 * Allocates basic resources for this USB host controller, and
114 * then invokes the start() method for the HCD associated with it
115 * through the hotplug entry's driver_data.
117 static int usb_hcd_at91_probe(const struct hc_driver
*driver
,
118 struct platform_device
*pdev
)
121 struct usb_hcd
*hcd
= NULL
;
123 if (pdev
->num_resources
!= 2) {
124 pr_debug("hcd probe: invalid num_resources");
128 if ((pdev
->resource
[0].flags
!= IORESOURCE_MEM
)
129 || (pdev
->resource
[1].flags
!= IORESOURCE_IRQ
)) {
130 pr_debug("hcd probe: invalid resource type\n");
134 hcd
= usb_create_hcd(driver
, &pdev
->dev
, "at91");
137 hcd
->rsrc_start
= pdev
->resource
[0].start
;
138 hcd
->rsrc_len
= resource_size(&pdev
->resource
[0]);
140 if (!request_mem_region(hcd
->rsrc_start
, hcd
->rsrc_len
, hcd_name
)) {
141 pr_debug("request_mem_region failed\n");
146 hcd
->regs
= ioremap(hcd
->rsrc_start
, hcd
->rsrc_len
);
148 pr_debug("ioremap failed\n");
153 iclk
= clk_get(&pdev
->dev
, "ohci_clk");
155 dev_err(&pdev
->dev
, "failed to get ohci_clk\n");
156 retval
= PTR_ERR(iclk
);
159 fclk
= clk_get(&pdev
->dev
, "uhpck");
161 dev_err(&pdev
->dev
, "failed to get uhpck\n");
162 retval
= PTR_ERR(fclk
);
165 hclk
= clk_get(&pdev
->dev
, "hclk");
167 dev_err(&pdev
->dev
, "failed to get hclk\n");
168 retval
= PTR_ERR(hclk
);
171 if (IS_ENABLED(CONFIG_COMMON_CLK
)) {
172 uclk
= clk_get(&pdev
->dev
, "usb_clk");
174 dev_err(&pdev
->dev
, "failed to get uclk\n");
175 retval
= PTR_ERR(uclk
);
181 ohci_hcd_init(hcd_to_ohci(hcd
));
183 retval
= usb_add_hcd(hcd
, pdev
->resource
[1].start
, IRQF_SHARED
);
190 if (IS_ENABLED(CONFIG_COMMON_CLK
))
203 release_mem_region(hcd
->rsrc_start
, hcd
->rsrc_len
);
211 /* may be called with controller, bus, and devices active */
214 * usb_hcd_at91_remove - shutdown processing for AT91-based HCDs
215 * @dev: USB Host Controller being removed
216 * Context: !in_interrupt()
218 * Reverses the effect of usb_hcd_at91_probe(), first invoking
219 * the HCD's stop() method. It is always called from a thread
220 * context, "rmmod" or something similar.
223 static void usb_hcd_at91_remove(struct usb_hcd
*hcd
,
224 struct platform_device
*pdev
)
229 release_mem_region(hcd
->rsrc_start
, hcd
->rsrc_len
);
232 if (IS_ENABLED(CONFIG_COMMON_CLK
))
237 fclk
= iclk
= hclk
= NULL
;
240 /*-------------------------------------------------------------------------*/
243 ohci_at91_reset (struct usb_hcd
*hcd
)
245 struct at91_usbh_data
*board
= dev_get_platdata(hcd
->self
.controller
);
246 struct ohci_hcd
*ohci
= hcd_to_ohci (hcd
);
249 if ((ret
= ohci_init(ohci
)) < 0)
252 ohci
->num_ports
= board
->ports
;
257 ohci_at91_start (struct usb_hcd
*hcd
)
259 struct ohci_hcd
*ohci
= hcd_to_ohci (hcd
);
262 if ((ret
= ohci_run(ohci
)) < 0) {
263 dev_err(hcd
->self
.controller
, "can't start %s\n",
271 static void ohci_at91_usb_set_power(struct at91_usbh_data
*pdata
, int port
, int enable
)
273 if (!valid_port(port
))
276 if (!gpio_is_valid(pdata
->vbus_pin
[port
]))
279 gpio_set_value(pdata
->vbus_pin
[port
],
280 pdata
->vbus_pin_active_low
[port
] ^ enable
);
283 static int ohci_at91_usb_get_power(struct at91_usbh_data
*pdata
, int port
)
285 if (!valid_port(port
))
288 if (!gpio_is_valid(pdata
->vbus_pin
[port
]))
291 return gpio_get_value(pdata
->vbus_pin
[port
]) ^
292 pdata
->vbus_pin_active_low
[port
];
296 * Update the status data from the hub with the over-current indicator change.
298 static int ohci_at91_hub_status_data(struct usb_hcd
*hcd
, char *buf
)
300 struct at91_usbh_data
*pdata
= dev_get_platdata(hcd
->self
.controller
);
301 int length
= ohci_hub_status_data(hcd
, buf
);
304 at91_for_each_port(port
) {
305 if (pdata
->overcurrent_changed
[port
]) {
308 buf
[0] |= 1 << (port
+ 1);
316 * Look at the control requests to the root hub and see if we need to override.
318 static int ohci_at91_hub_control(struct usb_hcd
*hcd
, u16 typeReq
, u16 wValue
,
319 u16 wIndex
, char *buf
, u16 wLength
)
321 struct at91_usbh_data
*pdata
= dev_get_platdata(hcd
->self
.controller
);
322 struct usb_hub_descriptor
*desc
;
324 u32
*data
= (u32
*)buf
;
326 dev_dbg(hcd
->self
.controller
,
327 "ohci_at91_hub_control(%p,0x%04x,0x%04x,0x%04x,%p,%04x)\n",
328 hcd
, typeReq
, wValue
, wIndex
, buf
, wLength
);
334 if (wValue
== USB_PORT_FEAT_POWER
) {
335 dev_dbg(hcd
->self
.controller
, "SetPortFeat: POWER\n");
336 if (valid_port(wIndex
)) {
337 ohci_at91_usb_set_power(pdata
, wIndex
, 1);
345 case ClearPortFeature
:
347 case USB_PORT_FEAT_C_OVER_CURRENT
:
348 dev_dbg(hcd
->self
.controller
,
349 "ClearPortFeature: C_OVER_CURRENT\n");
351 if (valid_port(wIndex
)) {
352 pdata
->overcurrent_changed
[wIndex
] = 0;
353 pdata
->overcurrent_status
[wIndex
] = 0;
358 case USB_PORT_FEAT_OVER_CURRENT
:
359 dev_dbg(hcd
->self
.controller
,
360 "ClearPortFeature: OVER_CURRENT\n");
362 if (valid_port(wIndex
))
363 pdata
->overcurrent_status
[wIndex
] = 0;
367 case USB_PORT_FEAT_POWER
:
368 dev_dbg(hcd
->self
.controller
,
369 "ClearPortFeature: POWER\n");
371 if (valid_port(wIndex
)) {
372 ohci_at91_usb_set_power(pdata
, wIndex
, 0);
379 ret
= ohci_hub_control(hcd
, typeReq
, wValue
, wIndex
+ 1, buf
, wLength
);
384 case GetHubDescriptor
:
386 /* update the hub's descriptor */
388 desc
= (struct usb_hub_descriptor
*)buf
;
390 dev_dbg(hcd
->self
.controller
, "wHubCharacteristics 0x%04x\n",
391 desc
->wHubCharacteristics
);
393 /* remove the old configurations for power-switching, and
394 * over-current protection, and insert our new configuration
397 desc
->wHubCharacteristics
&= ~cpu_to_le16(HUB_CHAR_LPSM
);
398 desc
->wHubCharacteristics
|= cpu_to_le16(0x0001);
400 if (pdata
->overcurrent_supported
) {
401 desc
->wHubCharacteristics
&= ~cpu_to_le16(HUB_CHAR_OCPM
);
402 desc
->wHubCharacteristics
|= cpu_to_le16(0x0008|0x0001);
405 dev_dbg(hcd
->self
.controller
, "wHubCharacteristics after 0x%04x\n",
406 desc
->wHubCharacteristics
);
411 /* check port status */
413 dev_dbg(hcd
->self
.controller
, "GetPortStatus(%d)\n", wIndex
);
415 if (valid_port(wIndex
)) {
416 if (!ohci_at91_usb_get_power(pdata
, wIndex
))
417 *data
&= ~cpu_to_le32(RH_PS_PPS
);
419 if (pdata
->overcurrent_changed
[wIndex
])
420 *data
|= cpu_to_le32(RH_PS_OCIC
);
422 if (pdata
->overcurrent_status
[wIndex
])
423 *data
|= cpu_to_le32(RH_PS_POCI
);
431 /*-------------------------------------------------------------------------*/
433 static const struct hc_driver ohci_at91_hc_driver
= {
434 .description
= hcd_name
,
435 .product_desc
= "AT91 OHCI",
436 .hcd_priv_size
= sizeof(struct ohci_hcd
),
439 * generic hardware linkage
442 .flags
= HCD_USB11
| HCD_MEMORY
,
445 * basic lifecycle operations
447 .reset
= ohci_at91_reset
,
448 .start
= ohci_at91_start
,
450 .shutdown
= ohci_shutdown
,
453 * managing i/o requests and associated device resources
455 .urb_enqueue
= ohci_urb_enqueue
,
456 .urb_dequeue
= ohci_urb_dequeue
,
457 .endpoint_disable
= ohci_endpoint_disable
,
462 .get_frame_number
= ohci_get_frame
,
467 .hub_status_data
= ohci_at91_hub_status_data
,
468 .hub_control
= ohci_at91_hub_control
,
470 .bus_suspend
= ohci_bus_suspend
,
471 .bus_resume
= ohci_bus_resume
,
473 .start_port_reset
= ohci_start_port_reset
,
476 /*-------------------------------------------------------------------------*/
478 static irqreturn_t
ohci_hcd_at91_overcurrent_irq(int irq
, void *data
)
480 struct platform_device
*pdev
= data
;
481 struct at91_usbh_data
*pdata
= dev_get_platdata(&pdev
->dev
);
484 /* From the GPIO notifying the over-current situation, find
485 * out the corresponding port */
486 at91_for_each_port(port
) {
487 if (gpio_is_valid(pdata
->overcurrent_pin
[port
]) &&
488 gpio_to_irq(pdata
->overcurrent_pin
[port
]) == irq
) {
489 gpio
= pdata
->overcurrent_pin
[port
];
494 if (port
== AT91_MAX_USBH_PORTS
) {
495 dev_err(& pdev
->dev
, "overcurrent interrupt from unknown GPIO\n");
499 val
= gpio_get_value(gpio
);
501 /* When notified of an over-current situation, disable power
502 on the corresponding port, and mark this port in
505 ohci_at91_usb_set_power(pdata
, port
, 0);
506 pdata
->overcurrent_status
[port
] = 1;
507 pdata
->overcurrent_changed
[port
] = 1;
510 dev_dbg(& pdev
->dev
, "overcurrent situation %s\n",
511 val
? "exited" : "notified");
517 static const struct of_device_id at91_ohci_dt_ids
[] = {
518 { .compatible
= "atmel,at91rm9200-ohci" },
522 MODULE_DEVICE_TABLE(of
, at91_ohci_dt_ids
);
524 static int ohci_at91_of_init(struct platform_device
*pdev
)
526 struct device_node
*np
= pdev
->dev
.of_node
;
528 enum of_gpio_flags flags
;
529 struct at91_usbh_data
*pdata
;
535 /* Right now device-tree probed devices don't get dma_mask set.
536 * Since shared usb code relies on it, set it here for now.
537 * Once we have dma capability bindings this can go away.
539 if (!pdev
->dev
.dma_mask
)
540 pdev
->dev
.dma_mask
= &pdev
->dev
.coherent_dma_mask
;
541 if (!pdev
->dev
.coherent_dma_mask
)
542 pdev
->dev
.coherent_dma_mask
= DMA_BIT_MASK(32);
544 pdata
= devm_kzalloc(&pdev
->dev
, sizeof(*pdata
), GFP_KERNEL
);
548 if (!of_property_read_u32(np
, "num-ports", &ports
))
549 pdata
->ports
= ports
;
551 at91_for_each_port(i
) {
552 gpio
= of_get_named_gpio_flags(np
, "atmel,vbus-gpio", i
, &flags
);
553 pdata
->vbus_pin
[i
] = gpio
;
554 if (!gpio_is_valid(gpio
))
556 pdata
->vbus_pin_active_low
[i
] = flags
& OF_GPIO_ACTIVE_LOW
;
559 at91_for_each_port(i
)
560 pdata
->overcurrent_pin
[i
] =
561 of_get_named_gpio_flags(np
, "atmel,oc-gpio", i
, &flags
);
563 pdev
->dev
.platform_data
= pdata
;
568 static int ohci_at91_of_init(struct platform_device
*pdev
)
574 /*-------------------------------------------------------------------------*/
576 static int ohci_hcd_at91_drv_probe(struct platform_device
*pdev
)
578 struct at91_usbh_data
*pdata
;
583 ret
= ohci_at91_of_init(pdev
);
587 pdata
= dev_get_platdata(&pdev
->dev
);
590 at91_for_each_port(i
) {
592 * do not configure PIO if not in relation with
593 * real USB port on board
595 if (i
>= pdata
->ports
) {
596 pdata
->vbus_pin
[i
] = -EINVAL
;
597 pdata
->overcurrent_pin
[i
] = -EINVAL
;
601 if (!gpio_is_valid(pdata
->vbus_pin
[i
]))
603 gpio
= pdata
->vbus_pin
[i
];
605 ret
= gpio_request(gpio
, "ohci_vbus");
608 "can't request vbus gpio %d\n", gpio
);
611 ret
= gpio_direction_output(gpio
,
612 !pdata
->vbus_pin_active_low
[i
]);
615 "can't put vbus gpio %d as output %d\n",
616 gpio
, !pdata
->vbus_pin_active_low
[i
]);
621 ohci_at91_usb_set_power(pdata
, i
, 1);
624 at91_for_each_port(i
) {
625 if (!gpio_is_valid(pdata
->overcurrent_pin
[i
]))
627 gpio
= pdata
->overcurrent_pin
[i
];
629 ret
= gpio_request(gpio
, "ohci_overcurrent");
632 "can't request overcurrent gpio %d\n",
637 ret
= gpio_direction_input(gpio
);
640 "can't configure overcurrent gpio %d as input\n",
646 ret
= request_irq(gpio_to_irq(gpio
),
647 ohci_hcd_at91_overcurrent_irq
,
648 IRQF_SHARED
, "ohci_overcurrent", pdev
);
652 "can't get gpio IRQ for overcurrent\n");
657 device_init_wakeup(&pdev
->dev
, 1);
658 return usb_hcd_at91_probe(&ohci_at91_hc_driver
, pdev
);
661 static int ohci_hcd_at91_drv_remove(struct platform_device
*pdev
)
663 struct at91_usbh_data
*pdata
= dev_get_platdata(&pdev
->dev
);
667 at91_for_each_port(i
) {
668 if (!gpio_is_valid(pdata
->vbus_pin
[i
]))
670 ohci_at91_usb_set_power(pdata
, i
, 0);
671 gpio_free(pdata
->vbus_pin
[i
]);
674 at91_for_each_port(i
) {
675 if (!gpio_is_valid(pdata
->overcurrent_pin
[i
]))
677 free_irq(gpio_to_irq(pdata
->overcurrent_pin
[i
]), pdev
);
678 gpio_free(pdata
->overcurrent_pin
[i
]);
682 device_init_wakeup(&pdev
->dev
, 0);
683 usb_hcd_at91_remove(platform_get_drvdata(pdev
), pdev
);
690 ohci_hcd_at91_drv_suspend(struct platform_device
*pdev
, pm_message_t mesg
)
692 struct usb_hcd
*hcd
= platform_get_drvdata(pdev
);
693 struct ohci_hcd
*ohci
= hcd_to_ohci(hcd
);
695 if (device_may_wakeup(&pdev
->dev
))
696 enable_irq_wake(hcd
->irq
);
699 * The integrated transceivers seem unable to notice disconnect,
700 * reconnect, or wakeup without the 48 MHz clock active. so for
701 * correctness, always discard connection state (using reset).
703 * REVISIT: some boards will be able to turn VBUS off...
705 if (at91_suspend_entering_slow_clock()) {
706 ohci_usb_reset (ohci
);
707 /* flush the writes */
708 (void) ohci_readl (ohci
, &ohci
->regs
->control
);
715 static int ohci_hcd_at91_drv_resume(struct platform_device
*pdev
)
717 struct usb_hcd
*hcd
= platform_get_drvdata(pdev
);
719 if (device_may_wakeup(&pdev
->dev
))
720 disable_irq_wake(hcd
->irq
);
725 ohci_resume(hcd
, false);
729 #define ohci_hcd_at91_drv_suspend NULL
730 #define ohci_hcd_at91_drv_resume NULL
733 MODULE_ALIAS("platform:at91_ohci");
735 static struct platform_driver ohci_hcd_at91_driver
= {
736 .probe
= ohci_hcd_at91_drv_probe
,
737 .remove
= ohci_hcd_at91_drv_remove
,
738 .shutdown
= usb_hcd_platform_shutdown
,
739 .suspend
= ohci_hcd_at91_drv_suspend
,
740 .resume
= ohci_hcd_at91_drv_resume
,
743 .owner
= THIS_MODULE
,
744 .of_match_table
= of_match_ptr(at91_ohci_dt_ids
),