aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/dwc3/dwc3-pci.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/usb/dwc3/dwc3-pci.c')
-rw-r--r--drivers/usb/dwc3/dwc3-pci.c65
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
126err4: 130err3:
127 pci_set_drvdata(pci, NULL); 131 pci_set_drvdata(pci, NULL);
128 platform_device_put(dwc3); 132 platform_device_put(dwc3);
129 133
130err3:
131 dwc3_put_device_id(devid);
132
133err2: 134err2:
134 pci_disable_device(pci); 135 dwc3_put_device_id(devid);
135 136
136err1: 137err1:
137 kfree(glue); 138 pci_disable_device(pci);
138 139
139err0:
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
154static DEFINE_PCI_DEVICE_TABLE(dwc3_pci_id_table) = { 153static DEFINE_PCI_DEVICE_TABLE(dwc3_pci_id_table) = {
@@ -171,14 +170,4 @@ MODULE_AUTHOR("Felipe Balbi <balbi@ti.com>");
171MODULE_LICENSE("Dual BSD/GPL"); 170MODULE_LICENSE("Dual BSD/GPL");
172MODULE_DESCRIPTION("DesignWare USB3 PCI Glue Layer"); 171MODULE_DESCRIPTION("DesignWare USB3 PCI Glue Layer");
173 172
174static int __devinit dwc3_pci_init(void) 173module_pci_driver(dwc3_pci_driver);
175{
176 return pci_register_driver(&dwc3_pci_driver);
177}
178module_init(dwc3_pci_init);
179
180static void __exit dwc3_pci_exit(void)
181{
182 pci_unregister_driver(&dwc3_pci_driver);
183}
184module_exit(dwc3_pci_exit);