aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/dwc3/dwc3-pci.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2012-03-20 14:26:30 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2012-03-20 14:26:30 -0400
commited378a52dabf77b406b447fd3238f83ea24b71fa (patch)
tree07e1a7ec2d1c08767ee81b9910f5912b80502632 /drivers/usb/dwc3/dwc3-pci.c
parent843ec558f91b8e8fdb6efc908f2c0506407cc750 (diff)
parent11207b6fe05438b2e87a26435cd98db3d55e6fa7 (diff)
Merge tag 'usb-3.3' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb
Pull USB merge for 3.4-rc1 from Greg KH: "Here's the big USB merge for the 3.4-rc1 merge window. Lots of gadget driver reworks here, driver updates, xhci changes, some new drivers added, usb-serial core reworking to fix some bugs, and other various minor things. There are some patches touching arch code, but they have all been acked by the various arch maintainers." * tag 'usb-3.3' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb: (302 commits) net: qmi_wwan: add support for ZTE MF820D USB: option: add ZTE MF820D usb: gadget: f_fs: Remove lock is held before freeing checks USB: option: make interface blacklist work again usb/ub: deprecate & schedule for removal the "Low Performance USB Block" driver USB: ohci-pxa27x: add clk_prepare/clk_unprepare calls USB: use generic platform driver on ath79 USB: EHCI: Add a generic platform device driver USB: OHCI: Add a generic platform device driver USB: ftdi_sio: new PID: LUMEL PD12 USB: ftdi_sio: add support for FT-X series devices USB: serial: mos7840: Fixed MCS7820 device attach problem usb: Don't make USB_ARCH_HAS_{XHCI,OHCI,EHCI} depend on USB_SUPPORT. usb gadget: fix a section mismatch when compiling g_ffs with CONFIG_USB_FUNCTIONFS_ETH USB: ohci-nxp: Remove i2c_write(), use smbus USB: ohci-nxp: Support for LPC32xx USB: ohci-nxp: Rename symbols from pnx4008 to nxp USB: OHCI-HCD: Rename ohci-pnx4008 to ohci-nxp usb: gadget: Kconfig: fix typo for 'different' usb: dwc3: pci: fix another failure path in dwc3_pci_probe() ...
Diffstat (limited to 'drivers/usb/dwc3/dwc3-pci.c')
-rw-r--r--drivers/usb/dwc3/dwc3-pci.c53
1 files changed, 26 insertions, 27 deletions
diff --git a/drivers/usb/dwc3/dwc3-pci.c b/drivers/usb/dwc3/dwc3-pci.c
index c68e4270457a..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) = {