diff options
-rw-r--r-- | drivers/usb/gadget/udc/amd5536udc.c | 43 |
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 | ||
3316 | finished: | 3304 | finished: |
3317 | if (dev) | 3305 | udc_pci_remove(pdev); |
3318 | udc_pci_remove(pdev); | 3306 | return retval; |
3307 | |||
3308 | err_irq: | ||
3309 | iounmap(dev->virt_addr); | ||
3310 | err_ioremap: | ||
3311 | release_mem_region(resource, len); | ||
3312 | err_memreg: | ||
3313 | pci_disable_device(pdev); | ||
3314 | err_pcidev: | ||
3315 | kfree(dev); | ||
3319 | return retval; | 3316 | return retval; |
3320 | } | 3317 | } |
3321 | 3318 | ||