diff options
Diffstat (limited to 'drivers/usb/dwc3/dwc3-pci.c')
-rw-r--r-- | drivers/usb/dwc3/dwc3-pci.c | 65 |
1 files changed, 27 insertions, 38 deletions
diff --git a/drivers/usb/dwc3/dwc3-pci.c b/drivers/usb/dwc3/dwc3-pci.c index 64e1f7c67b08..a9ca9adba391 100644 --- a/drivers/usb/dwc3/dwc3-pci.c +++ b/drivers/usb/dwc3/dwc3-pci.c | |||
@@ -61,32 +61,36 @@ static int __devinit dwc3_pci_probe(struct pci_dev *pci, | |||
61 | struct dwc3_pci *glue; | 61 | struct dwc3_pci *glue; |
62 | int ret = -ENOMEM; | 62 | int ret = -ENOMEM; |
63 | int devid; | 63 | int devid; |
64 | struct device *dev = &pci->dev; | ||
64 | 65 | ||
65 | glue = kzalloc(sizeof(*glue), GFP_KERNEL); | 66 | glue = devm_kzalloc(dev, sizeof(*glue), GFP_KERNEL); |
66 | if (!glue) { | 67 | if (!glue) { |
67 | dev_err(&pci->dev, "not enough memory\n"); | 68 | dev_err(dev, "not enough memory\n"); |
68 | goto err0; | 69 | return -ENOMEM; |
69 | } | 70 | } |
70 | 71 | ||
71 | glue->dev = &pci->dev; | 72 | glue->dev = dev; |
72 | 73 | ||
73 | ret = pci_enable_device(pci); | 74 | ret = pci_enable_device(pci); |
74 | if (ret) { | 75 | if (ret) { |
75 | dev_err(&pci->dev, "failed to enable pci device\n"); | 76 | dev_err(dev, "failed to enable pci device\n"); |
76 | goto err1; | 77 | return -ENODEV; |
77 | } | 78 | } |
78 | 79 | ||
79 | pci_set_power_state(pci, PCI_D0); | 80 | pci_set_power_state(pci, PCI_D0); |
80 | pci_set_master(pci); | 81 | pci_set_master(pci); |
81 | 82 | ||
82 | devid = dwc3_get_device_id(); | 83 | devid = dwc3_get_device_id(); |
83 | if (devid < 0) | 84 | if (devid < 0) { |
84 | goto err2; | 85 | ret = -ENOMEM; |
86 | goto err1; | ||
87 | } | ||
85 | 88 | ||
86 | dwc3 = platform_device_alloc("dwc3", devid); | 89 | dwc3 = platform_device_alloc("dwc3", devid); |
87 | if (!dwc3) { | 90 | if (!dwc3) { |
88 | dev_err(&pci->dev, "couldn't allocate dwc3 device\n"); | 91 | dev_err(dev, "couldn't allocate dwc3 device\n"); |
89 | goto err3; | 92 | ret = -ENOMEM; |
93 | goto err1; | ||
90 | } | 94 | } |
91 | 95 | ||
92 | memset(res, 0x00, sizeof(struct resource) * ARRAY_SIZE(res)); | 96 | memset(res, 0x00, sizeof(struct resource) * ARRAY_SIZE(res)); |
@@ -102,41 +106,37 @@ static int __devinit dwc3_pci_probe(struct pci_dev *pci, | |||
102 | 106 | ||
103 | ret = platform_device_add_resources(dwc3, res, ARRAY_SIZE(res)); | 107 | ret = platform_device_add_resources(dwc3, res, ARRAY_SIZE(res)); |
104 | if (ret) { | 108 | if (ret) { |
105 | dev_err(&pci->dev, "couldn't add resources to dwc3 device\n"); | 109 | dev_err(dev, "couldn't add resources to dwc3 device\n"); |
106 | goto err4; | 110 | goto err2; |
107 | } | 111 | } |
108 | 112 | ||
109 | pci_set_drvdata(pci, glue); | 113 | pci_set_drvdata(pci, glue); |
110 | 114 | ||
111 | dma_set_coherent_mask(&dwc3->dev, pci->dev.coherent_dma_mask); | 115 | dma_set_coherent_mask(&dwc3->dev, dev->coherent_dma_mask); |
112 | 116 | ||
113 | dwc3->dev.dma_mask = pci->dev.dma_mask; | 117 | dwc3->dev.dma_mask = dev->dma_mask; |
114 | dwc3->dev.dma_parms = pci->dev.dma_parms; | 118 | dwc3->dev.dma_parms = dev->dma_parms; |
115 | dwc3->dev.parent = &pci->dev; | 119 | dwc3->dev.parent = dev; |
116 | glue->dwc3 = dwc3; | 120 | glue->dwc3 = dwc3; |
117 | 121 | ||
118 | ret = platform_device_add(dwc3); | 122 | ret = platform_device_add(dwc3); |
119 | if (ret) { | 123 | if (ret) { |
120 | dev_err(&pci->dev, "failed to register dwc3 device\n"); | 124 | dev_err(dev, "failed to register dwc3 device\n"); |
121 | goto err4; | 125 | goto err3; |
122 | } | 126 | } |
123 | 127 | ||
124 | return 0; | 128 | return 0; |
125 | 129 | ||
126 | err4: | 130 | err3: |
127 | pci_set_drvdata(pci, NULL); | 131 | pci_set_drvdata(pci, NULL); |
128 | platform_device_put(dwc3); | 132 | platform_device_put(dwc3); |
129 | 133 | ||
130 | err3: | ||
131 | dwc3_put_device_id(devid); | ||
132 | |||
133 | err2: | 134 | err2: |
134 | pci_disable_device(pci); | 135 | dwc3_put_device_id(devid); |
135 | 136 | ||
136 | err1: | 137 | err1: |
137 | kfree(glue); | 138 | pci_disable_device(pci); |
138 | 139 | ||
139 | err0: | ||
140 | return ret; | 140 | return ret; |
141 | } | 141 | } |
142 | 142 | ||
@@ -148,7 +148,6 @@ static void __devexit dwc3_pci_remove(struct pci_dev *pci) | |||
148 | platform_device_unregister(glue->dwc3); | 148 | platform_device_unregister(glue->dwc3); |
149 | pci_set_drvdata(pci, NULL); | 149 | pci_set_drvdata(pci, NULL); |
150 | pci_disable_device(pci); | 150 | pci_disable_device(pci); |
151 | kfree(glue); | ||
152 | } | 151 | } |
153 | 152 | ||
154 | static DEFINE_PCI_DEVICE_TABLE(dwc3_pci_id_table) = { | 153 | static DEFINE_PCI_DEVICE_TABLE(dwc3_pci_id_table) = { |
@@ -171,14 +170,4 @@ MODULE_AUTHOR("Felipe Balbi <balbi@ti.com>"); | |||
171 | MODULE_LICENSE("Dual BSD/GPL"); | 170 | MODULE_LICENSE("Dual BSD/GPL"); |
172 | MODULE_DESCRIPTION("DesignWare USB3 PCI Glue Layer"); | 171 | MODULE_DESCRIPTION("DesignWare USB3 PCI Glue Layer"); |
173 | 172 | ||
174 | static int __devinit dwc3_pci_init(void) | 173 | module_pci_driver(dwc3_pci_driver); |
175 | { | ||
176 | return pci_register_driver(&dwc3_pci_driver); | ||
177 | } | ||
178 | module_init(dwc3_pci_init); | ||
179 | |||
180 | static void __exit dwc3_pci_exit(void) | ||
181 | { | ||
182 | pci_unregister_driver(&dwc3_pci_driver); | ||
183 | } | ||
184 | module_exit(dwc3_pci_exit); | ||