diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-03-20 14:26:30 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-03-20 14:26:30 -0400 |
commit | ed378a52dabf77b406b447fd3238f83ea24b71fa (patch) | |
tree | 07e1a7ec2d1c08767ee81b9910f5912b80502632 /drivers/usb/dwc3/dwc3-pci.c | |
parent | 843ec558f91b8e8fdb6efc908f2c0506407cc750 (diff) | |
parent | 11207b6fe05438b2e87a26435cd98db3d55e6fa7 (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.c | 53 |
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 | ||
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) = { |