aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/usb/gadget/udc/amd5536udc.c43
1 files changed, 20 insertions, 23 deletions
diff --git a/drivers/usb/gadget/udc/amd5536udc.c b/drivers/usb/gadget/udc/amd5536udc.c
index fdacddb18c00..175ca93fe5e2 100644
--- a/drivers/usb/gadget/udc/amd5536udc.c
+++ b/drivers/usb/gadget/udc/amd5536udc.c
@@ -3138,8 +3138,8 @@ static void udc_pci_remove(struct pci_dev *pdev)
3138 writel(AMD_BIT(UDC_DEVCFG_SOFTRESET), &dev->regs->cfg); 3138 writel(AMD_BIT(UDC_DEVCFG_SOFTRESET), &dev->regs->cfg);
3139 if (dev->irq_registered) 3139 if (dev->irq_registered)
3140 free_irq(pdev->irq, dev); 3140 free_irq(pdev->irq, dev);
3141 if (dev->regs) 3141 if (dev->virt_addr)
3142 iounmap(dev->regs); 3142 iounmap(dev->virt_addr);
3143 if (dev->mem_region) 3143 if (dev->mem_region)
3144 release_mem_region(pci_resource_start(pdev, 0), 3144 release_mem_region(pci_resource_start(pdev, 0),
3145 pci_resource_len(pdev, 0)); 3145 pci_resource_len(pdev, 0));
@@ -3226,17 +3226,13 @@ static int udc_pci_probe(
3226 3226
3227 /* init */ 3227 /* init */
3228 dev = kzalloc(sizeof(struct udc), GFP_KERNEL); 3228 dev = kzalloc(sizeof(struct udc), GFP_KERNEL);
3229 if (!dev) { 3229 if (!dev)
3230 retval = -ENOMEM; 3230 return -ENOMEM;
3231 goto finished;
3232 }
3233 3231
3234 /* pci setup */ 3232 /* pci setup */
3235 if (pci_enable_device(pdev) < 0) { 3233 if (pci_enable_device(pdev) < 0) {
3236 kfree(dev);
3237 dev = NULL;
3238 retval = -ENODEV; 3234 retval = -ENODEV;
3239 goto finished; 3235 goto err_pcidev;
3240 } 3236 }
3241 dev->active = 1; 3237 dev->active = 1;
3242 3238
@@ -3246,28 +3242,22 @@ static int udc_pci_probe(
3246 3242
3247 if (!request_mem_region(resource, len, name)) { 3243 if (!request_mem_region(resource, len, name)) {
3248 dev_dbg(&pdev->dev, "pci device used already\n"); 3244 dev_dbg(&pdev->dev, "pci device used already\n");
3249 kfree(dev);
3250 dev = NULL;
3251 retval = -EBUSY; 3245 retval = -EBUSY;
3252 goto finished; 3246 goto err_memreg;
3253 } 3247 }
3254 dev->mem_region = 1; 3248 dev->mem_region = 1;
3255 3249
3256 dev->virt_addr = ioremap_nocache(resource, len); 3250 dev->virt_addr = ioremap_nocache(resource, len);
3257 if (dev->virt_addr == NULL) { 3251 if (dev->virt_addr == NULL) {
3258 dev_dbg(&pdev->dev, "start address cannot be mapped\n"); 3252 dev_dbg(&pdev->dev, "start address cannot be mapped\n");
3259 kfree(dev);
3260 dev = NULL;
3261 retval = -EFAULT; 3253 retval = -EFAULT;
3262 goto finished; 3254 goto err_ioremap;
3263 } 3255 }
3264 3256
3265 if (!pdev->irq) { 3257 if (!pdev->irq) {
3266 dev_err(&pdev->dev, "irq not set\n"); 3258 dev_err(&pdev->dev, "irq not set\n");
3267 kfree(dev);
3268 dev = NULL;
3269 retval = -ENODEV; 3259 retval = -ENODEV;
3270 goto finished; 3260 goto err_irq;
3271 } 3261 }
3272 3262
3273 spin_lock_init(&dev->lock); 3263 spin_lock_init(&dev->lock);
@@ -3283,10 +3273,8 @@ static int udc_pci_probe(
3283 3273
3284 if (request_irq(pdev->irq, udc_irq, IRQF_SHARED, name, dev) != 0) { 3274 if (request_irq(pdev->irq, udc_irq, IRQF_SHARED, name, dev) != 0) {
3285 dev_dbg(&pdev->dev, "request_irq(%d) fail\n", pdev->irq); 3275 dev_dbg(&pdev->dev, "request_irq(%d) fail\n", pdev->irq);
3286 kfree(dev);
3287 dev = NULL;
3288 retval = -EBUSY; 3276 retval = -EBUSY;
3289 goto finished; 3277 goto err_irq;
3290 } 3278 }
3291 dev->irq_registered = 1; 3279 dev->irq_registered = 1;
3292 3280
@@ -3314,8 +3302,17 @@ static int udc_pci_probe(
3314 return 0; 3302 return 0;
3315 3303
3316finished: 3304finished:
3317 if (dev) 3305 udc_pci_remove(pdev);
3318 udc_pci_remove(pdev); 3306 return retval;
3307
3308err_irq:
3309 iounmap(dev->virt_addr);
3310err_ioremap:
3311 release_mem_region(resource, len);
3312err_memreg:
3313 pci_disable_device(pdev);
3314err_pcidev:
3315 kfree(dev);
3319 return retval; 3316 return retval;
3320} 3317}
3321 3318