Lines Matching +full:generic +full:- +full:ehci
1 // SPDX-License-Identifier: GPL-2.0
3 * PMC MSP EHCI (Host Controller Driver) for USB.
5 * (C) Copyright 2006-2010 PMC-Sierra Inc
39 static void usb_hcd_tdi_set_mode(struct ehci_hcd *ehci) in usb_hcd_tdi_set_mode() argument
45 struct ehci_regs *reg_base = ehci->regs; in usb_hcd_tdi_set_mode()
53 val = ehci_readl(ehci, (u32 *)base); in usb_hcd_tdi_set_mode()
54 ehci_writel(ehci, (val | USB_CTRL_MODE_STREAM_DISABLE), in usb_hcd_tdi_set_mode()
58 val = ehci_readl(ehci, (u32 *)statreg); in usb_hcd_tdi_set_mode()
60 ehci_writel(ehci, val, (u32 *)statreg); in usb_hcd_tdi_set_mode()
63 ehci_writel(ehci, USB_CTRL_FIFO_THRESH, (u32 *)fiforeg); in usb_hcd_tdi_set_mode()
72 struct ehci_hcd *ehci = hcd_to_ehci(hcd); in ehci_msp_setup() local
75 ehci->big_endian_mmio = 1; in ehci_msp_setup()
76 ehci->big_endian_desc = 1; in ehci_msp_setup()
78 ehci->caps = hcd->regs; in ehci_msp_setup()
79 hcd->has_tt = 1; in ehci_msp_setup()
85 usb_hcd_tdi_set_mode(ehci); in ehci_msp_setup()
98 struct platform_device *pdev = &dev->dev; in usb_hcd_msp_map_regs()
105 return -ENOMEM; in usb_hcd_msp_map_regs()
107 if (!request_mem_region(res->start, res_len, "mab regs")) in usb_hcd_msp_map_regs()
108 return -EBUSY; in usb_hcd_msp_map_regs()
110 dev->mab_regs = ioremap(res->start, res_len); in usb_hcd_msp_map_regs()
111 if (dev->mab_regs == NULL) { in usb_hcd_msp_map_regs()
112 retval = -ENOMEM; in usb_hcd_msp_map_regs()
119 retval = -ENOMEM; in usb_hcd_msp_map_regs()
123 if (!request_mem_region(res->start, res_len, "usbid regs")) { in usb_hcd_msp_map_regs()
124 retval = -EBUSY; in usb_hcd_msp_map_regs()
127 dev->usbid_regs = ioremap(res->start, res_len); in usb_hcd_msp_map_regs()
128 if (dev->usbid_regs == NULL) { in usb_hcd_msp_map_regs()
129 retval = -ENOMEM; in usb_hcd_msp_map_regs()
137 release_mem_region(res->start, res_len); in usb_hcd_msp_map_regs()
139 iounmap(dev->mab_regs); in usb_hcd_msp_map_regs()
143 release_mem_region(res->start, res_len); in usb_hcd_msp_map_regs()
144 dev_err(&pdev->dev, "Failed to map non-EHCI regs.\n"); in usb_hcd_msp_map_regs()
149 * usb_hcd_msp_probe - initialize PMC MSP-based HCDs
163 struct ehci_hcd *ehci ; in usb_hcd_msp_probe() local
165 hcd = usb_create_hcd(driver, &dev->dev, "pmcmsp"); in usb_hcd_msp_probe()
167 return -ENOMEM; in usb_hcd_msp_probe()
171 pr_debug("No IOMEM resource info for %s.\n", dev->name); in usb_hcd_msp_probe()
172 retval = -ENOMEM; in usb_hcd_msp_probe()
175 hcd->rsrc_start = res->start; in usb_hcd_msp_probe()
176 hcd->rsrc_len = resource_size(res); in usb_hcd_msp_probe()
177 if (!request_mem_region(hcd->rsrc_start, hcd->rsrc_len, dev->name)) { in usb_hcd_msp_probe()
178 retval = -EBUSY; in usb_hcd_msp_probe()
181 hcd->regs = ioremap(hcd->rsrc_start, hcd->rsrc_len); in usb_hcd_msp_probe()
182 if (!hcd->regs) { in usb_hcd_msp_probe()
184 retval = -ENOMEM; in usb_hcd_msp_probe()
190 dev_err(&dev->dev, "No IRQ resource info for %s.\n", dev->name); in usb_hcd_msp_probe()
191 retval = -ENOMEM; in usb_hcd_msp_probe()
195 /* Map non-EHCI register spaces */ in usb_hcd_msp_probe()
200 ehci = hcd_to_ehci(hcd); in usb_hcd_msp_probe()
201 ehci->big_endian_mmio = 1; in usb_hcd_msp_probe()
202 ehci->big_endian_desc = 1; in usb_hcd_msp_probe()
205 retval = usb_add_hcd(hcd, res->start, IRQF_SHARED); in usb_hcd_msp_probe()
207 device_wakeup_enable(hcd->self.controller); in usb_hcd_msp_probe()
213 iounmap(hcd->regs); in usb_hcd_msp_probe()
215 release_mem_region(hcd->rsrc_start, hcd->rsrc_len); in usb_hcd_msp_probe()
225 * usb_hcd_msp_remove - shutdown processing for PMC MSP-based HCDs
239 iounmap(hcd->regs); in usb_hcd_msp_remove()
240 release_mem_region(hcd->rsrc_start, hcd->rsrc_len); in usb_hcd_msp_remove()
246 .product_desc = "PMC MSP EHCI",
250 * generic hardware linkage
296 return -ENODEV; in ehci_hcd_msp_drv_probe()
317 MODULE_ALIAS("pmcmsp-ehci");
323 .name = "pmcmsp-ehci",