diff options
Diffstat (limited to 'drivers/usb/dwc3/core.c')
| -rw-r--r-- | drivers/usb/dwc3/core.c | 84 | 
1 files changed, 36 insertions, 48 deletions
diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c index d119a1fbf94..c181f3e84cf 100644 --- a/drivers/usb/dwc3/core.c +++ b/drivers/usb/dwc3/core.c @@ -408,6 +408,7 @@ static int __devinit dwc3_probe(struct platform_device *pdev)  	struct device_node	*node = pdev->dev.of_node;  	struct resource		*res;  	struct dwc3		*dwc; +	struct device		*dev = &pdev->dev;  	int			ret = -ENOMEM;  	int			irq; @@ -417,39 +418,39 @@ static int __devinit dwc3_probe(struct platform_device *pdev)  	u8			mode; -	mem = kzalloc(sizeof(*dwc) + DWC3_ALIGN_MASK, GFP_KERNEL); +	mem = devm_kzalloc(dev, sizeof(*dwc) + DWC3_ALIGN_MASK, GFP_KERNEL);  	if (!mem) { -		dev_err(&pdev->dev, "not enough memory\n"); -		goto err0; +		dev_err(dev, "not enough memory\n"); +		return -ENOMEM;  	}  	dwc = PTR_ALIGN(mem, DWC3_ALIGN_MASK + 1);  	dwc->mem = mem;  	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);  	if (!res) { -		dev_err(&pdev->dev, "missing resource\n"); -		goto err1; +		dev_err(dev, "missing resource\n"); +		return -ENODEV;  	}  	dwc->res = res; -	res = request_mem_region(res->start, resource_size(res), -			dev_name(&pdev->dev)); +	res = devm_request_mem_region(dev, res->start, resource_size(res), +			dev_name(dev));  	if (!res) { -		dev_err(&pdev->dev, "can't request mem region\n"); -		goto err1; +		dev_err(dev, "can't request mem region\n"); +		return -ENOMEM;  	} -	regs = ioremap(res->start, resource_size(res)); +	regs = devm_ioremap(dev, res->start, resource_size(res));  	if (!regs) { -		dev_err(&pdev->dev, "ioremap failed\n"); -		goto err2; +		dev_err(dev, "ioremap failed\n"); +		return -ENOMEM;  	}  	irq = platform_get_irq(pdev, 0);  	if (irq < 0) { -		dev_err(&pdev->dev, "missing IRQ\n"); -		goto err3; +		dev_err(dev, "missing IRQ\n"); +		return -ENODEV;  	}  	spin_lock_init(&dwc->lock); @@ -457,7 +458,7 @@ static int __devinit dwc3_probe(struct platform_device *pdev)  	dwc->regs	= regs;  	dwc->regs_size	= resource_size(res); -	dwc->dev	= &pdev->dev; +	dwc->dev	= dev;  	dwc->irq	= irq;  	if (!strncmp("super", maximum_speed, 5)) @@ -474,14 +475,14 @@ static int __devinit dwc3_probe(struct platform_device *pdev)  	if (of_get_property(node, "tx-fifo-resize", NULL))  		dwc->needs_fifo_resize = true; -	pm_runtime_enable(&pdev->dev); -	pm_runtime_get_sync(&pdev->dev); -	pm_runtime_forbid(&pdev->dev); +	pm_runtime_enable(dev); +	pm_runtime_get_sync(dev); +	pm_runtime_forbid(dev);  	ret = dwc3_core_init(dwc);  	if (ret) { -		dev_err(&pdev->dev, "failed to initialize core\n"); -		goto err3; +		dev_err(dev, "failed to initialize core\n"); +		return ret;  	}  	mode = DWC3_MODE(dwc->hwparams.hwparams0); @@ -491,49 +492,49 @@ static int __devinit dwc3_probe(struct platform_device *pdev)  		dwc3_set_mode(dwc, DWC3_GCTL_PRTCAP_DEVICE);  		ret = dwc3_gadget_init(dwc);  		if (ret) { -			dev_err(&pdev->dev, "failed to initialize gadget\n"); -			goto err4; +			dev_err(dev, "failed to initialize gadget\n"); +			goto err1;  		}  		break;  	case DWC3_MODE_HOST:  		dwc3_set_mode(dwc, DWC3_GCTL_PRTCAP_HOST);  		ret = dwc3_host_init(dwc);  		if (ret) { -			dev_err(&pdev->dev, "failed to initialize host\n"); -			goto err4; +			dev_err(dev, "failed to initialize host\n"); +			goto err1;  		}  		break;  	case DWC3_MODE_DRD:  		dwc3_set_mode(dwc, DWC3_GCTL_PRTCAP_OTG);  		ret = dwc3_host_init(dwc);  		if (ret) { -			dev_err(&pdev->dev, "failed to initialize host\n"); -			goto err4; +			dev_err(dev, "failed to initialize host\n"); +			goto err1;  		}  		ret = dwc3_gadget_init(dwc);  		if (ret) { -			dev_err(&pdev->dev, "failed to initialize gadget\n"); -			goto err4; +			dev_err(dev, "failed to initialize gadget\n"); +			goto err1;  		}  		break;  	default: -		dev_err(&pdev->dev, "Unsupported mode of operation %d\n", mode); -		goto err4; +		dev_err(dev, "Unsupported mode of operation %d\n", mode); +		goto err1;  	}  	dwc->mode = mode;  	ret = dwc3_debugfs_init(dwc);  	if (ret) { -		dev_err(&pdev->dev, "failed to initialize debugfs\n"); -		goto err5; +		dev_err(dev, "failed to initialize debugfs\n"); +		goto err2;  	} -	pm_runtime_allow(&pdev->dev); +	pm_runtime_allow(dev);  	return 0; -err5: +err2:  	switch (mode) {  	case DWC3_MODE_DEVICE:  		dwc3_gadget_exit(dwc); @@ -550,19 +551,9 @@ err5:  		break;  	} -err4: -	dwc3_core_exit(dwc); - -err3: -	iounmap(regs); - -err2: -	release_mem_region(res->start, resource_size(res)); -  err1: -	kfree(dwc->mem); +	dwc3_core_exit(dwc); -err0:  	return ret;  } @@ -595,9 +586,6 @@ static int __devexit dwc3_remove(struct platform_device *pdev)  	}  	dwc3_core_exit(dwc); -	release_mem_region(res->start, resource_size(res)); -	iounmap(dwc->regs); -	kfree(dwc->mem);  	return 0;  }  |