Lines Matching +full:generic +full:- +full:uhci
1 // SPDX-License-Identifier: GPL-2.0
3 * Generic UHCI HCD (Host Controller Driver) for Platform Devices
7 * This file is based on uhci-grlib.c
8 * (C) Copyright 2004-2007 Alan Stern, [email protected]
17 struct uhci_hcd *uhci = hcd_to_uhci(hcd); in uhci_platform_init() local
20 if (!uhci->rh_numports) in uhci_platform_init()
21 uhci->rh_numports = uhci_count_ports(hcd); in uhci_platform_init()
23 /* Set up pointers to to generic functions */ in uhci_platform_init()
24 uhci->reset_hc = uhci_generic_reset_hc; in uhci_platform_init()
25 uhci->check_and_reset_hc = uhci_generic_check_and_reset_hc; in uhci_platform_init()
28 uhci->configure_hc = NULL; in uhci_platform_init()
29 uhci->resume_detect_interrupts_are_broken = NULL; in uhci_platform_init()
30 uhci->global_suspend_mode_is_broken = NULL; in uhci_platform_init()
33 check_and_reset_hc(uhci); in uhci_platform_init()
39 .product_desc = "Generic UHCI Host Controller",
42 /* Generic hardware linkage */
69 struct device_node *np = pdev->dev.of_node; in uhci_hcd_platform_probe()
71 struct uhci_hcd *uhci; in uhci_hcd_platform_probe() local
76 return -ENODEV; in uhci_hcd_platform_probe()
79 * Right now device-tree probed devices don't get dma_mask set. in uhci_hcd_platform_probe()
83 ret = dma_coerce_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(32)); in uhci_hcd_platform_probe()
87 hcd = usb_create_hcd(&uhci_platform_hc_driver, &pdev->dev, in uhci_hcd_platform_probe()
88 pdev->name); in uhci_hcd_platform_probe()
90 return -ENOMEM; in uhci_hcd_platform_probe()
92 uhci = hcd_to_uhci(hcd); in uhci_hcd_platform_probe()
94 hcd->regs = devm_platform_get_and_ioremap_resource(pdev, 0, &res); in uhci_hcd_platform_probe()
95 if (IS_ERR(hcd->regs)) { in uhci_hcd_platform_probe()
96 ret = PTR_ERR(hcd->regs); in uhci_hcd_platform_probe()
99 hcd->rsrc_start = res->start; in uhci_hcd_platform_probe()
100 hcd->rsrc_len = resource_size(res); in uhci_hcd_platform_probe()
102 uhci->regs = hcd->regs; in uhci_hcd_platform_probe()
104 /* Grab some things from the device-tree */ in uhci_hcd_platform_probe()
109 uhci->rh_numports = num_ports; in uhci_hcd_platform_probe()
110 dev_info(&pdev->dev, in uhci_hcd_platform_probe()
111 "Detected %d ports from device-tree\n", in uhci_hcd_platform_probe()
114 if (of_device_is_compatible(np, "aspeed,ast2400-uhci") || in uhci_hcd_platform_probe()
115 of_device_is_compatible(np, "aspeed,ast2500-uhci") || in uhci_hcd_platform_probe()
116 of_device_is_compatible(np, "aspeed,ast2600-uhci")) { in uhci_hcd_platform_probe()
117 uhci->is_aspeed = 1; in uhci_hcd_platform_probe()
118 dev_info(&pdev->dev, in uhci_hcd_platform_probe()
124 uhci->clk = devm_clk_get(&pdev->dev, NULL); in uhci_hcd_platform_probe()
125 if (IS_ERR(uhci->clk)) { in uhci_hcd_platform_probe()
126 ret = PTR_ERR(uhci->clk); in uhci_hcd_platform_probe()
129 ret = clk_prepare_enable(uhci->clk); in uhci_hcd_platform_probe()
131 dev_err(&pdev->dev, "Error couldn't enable clock (%d)\n", ret); in uhci_hcd_platform_probe()
143 device_wakeup_enable(hcd->self.controller); in uhci_hcd_platform_probe()
147 clk_disable_unprepare(uhci->clk); in uhci_hcd_platform_probe()
157 struct uhci_hcd *uhci = hcd_to_uhci(hcd); in uhci_hcd_platform_remove() local
159 clk_disable_unprepare(uhci->clk); in uhci_hcd_platform_remove()
179 { .compatible = "generic-uhci", },
180 { .compatible = "platform-uhci", },
190 .name = "platform-uhci",