Commit | Line | Data |
---|---|---|
d07e8819 FB |
1 | /** |
2 | * host.c - DesignWare USB3 DRD Controller Host Glue | |
3 | * | |
4 | * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com | |
5 | * | |
6 | * Authors: Felipe Balbi <balbi@ti.com>, | |
7 | * | |
5945f789 FB |
8 | * This program is free software: you can redistribute it and/or modify |
9 | * it under the terms of the GNU General Public License version 2 of | |
10 | * the License as published by the Free Software Foundation. | |
d07e8819 | 11 | * |
5945f789 FB |
12 | * This program is distributed in the hope that it will be useful, |
13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
15 | * GNU General Public License for more details. | |
d07e8819 FB |
16 | */ |
17 | ||
d07e8819 | 18 | #include <linux/platform_device.h> |
d07e8819 FB |
19 | |
20 | #include "core.h" | |
d07e8819 | 21 | |
d07e8819 FB |
22 | int dwc3_host_init(struct dwc3 *dwc) |
23 | { | |
24 | struct platform_device *xhci; | |
25 | int ret; | |
26 | ||
52758bcb | 27 | xhci = platform_device_alloc("xhci-hcd", PLATFORM_DEVID_AUTO); |
d07e8819 FB |
28 | if (!xhci) { |
29 | dev_err(dwc->dev, "couldn't allocate xHCI device\n"); | |
30 | ret = -ENOMEM; | |
31 | goto err0; | |
32 | } | |
33 | ||
34 | dma_set_coherent_mask(&xhci->dev, dwc->dev->coherent_dma_mask); | |
35 | ||
36 | xhci->dev.parent = dwc->dev; | |
37 | xhci->dev.dma_mask = dwc->dev->dma_mask; | |
38 | xhci->dev.dma_parms = dwc->dev->dma_parms; | |
39 | ||
40 | dwc->xhci = xhci; | |
41 | ||
51249dca IS |
42 | ret = platform_device_add_resources(xhci, dwc->xhci_resources, |
43 | DWC3_XHCI_RESOURCES_NUM); | |
d07e8819 FB |
44 | if (ret) { |
45 | dev_err(dwc->dev, "couldn't add resources to xHCI device\n"); | |
46 | goto err1; | |
47 | } | |
48 | ||
49 | ret = platform_device_add(xhci); | |
50 | if (ret) { | |
51 | dev_err(dwc->dev, "failed to register xHCI device\n"); | |
52 | goto err1; | |
53 | } | |
54 | ||
55 | return 0; | |
56 | ||
57 | err1: | |
58 | platform_device_put(xhci); | |
59 | ||
60 | err0: | |
61 | return ret; | |
62 | } | |
63 | ||
64 | void dwc3_host_exit(struct dwc3 *dwc) | |
65 | { | |
66 | platform_device_unregister(dwc->xhci); | |
67 | } |