Release 4.9 drivers/usb/dwc3/host.c
  
  
/**
 * host.c - DesignWare USB3 DRD Controller Host Glue
 *
 * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com
 *
 * Authors: Felipe Balbi <balbi@ti.com>,
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2  of
 * the License as published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 */
#include <linux/platform_device.h>
#include "core.h"
int dwc3_host_init(struct dwc3 *dwc)
{
	struct property_entry	props[2];
	struct platform_device	*xhci;
	int			ret, irq;
	struct resource		*res;
	struct platform_device	*dwc3_pdev = to_platform_device(dwc->dev);
	irq = platform_get_irq_byname(dwc3_pdev, "host");
	if (irq == -EPROBE_DEFER)
		return irq;
	if (irq <= 0) {
		irq = platform_get_irq_byname(dwc3_pdev, "dwc_usb3");
		if (irq == -EPROBE_DEFER)
			return irq;
		if (irq <= 0) {
			irq = platform_get_irq(dwc3_pdev, 0);
			if (irq <= 0) {
				if (irq != -EPROBE_DEFER) {
					dev_err(dwc->dev,
						"missing host IRQ\n");
				}
				if (!irq)
					irq = -EINVAL;
				return irq;
			} else {
				res = platform_get_resource(dwc3_pdev,
							    IORESOURCE_IRQ, 0);
			}
		} else {
			res = platform_get_resource_byname(dwc3_pdev,
							   IORESOURCE_IRQ,
							   "dwc_usb3");
		}
	} else {
		res = platform_get_resource_byname(dwc3_pdev, IORESOURCE_IRQ,
						   "host");
	}
	dwc->xhci_resources[1].start = irq;
	dwc->xhci_resources[1].end = irq;
	dwc->xhci_resources[1].flags = res->flags;
	dwc->xhci_resources[1].name = res->name;
	xhci = platform_device_alloc("xhci-hcd", PLATFORM_DEVID_AUTO);
	if (!xhci) {
		dev_err(dwc->dev, "couldn't allocate xHCI device\n");
		return -ENOMEM;
	}
	dma_set_coherent_mask(&xhci->dev, dwc->dev->coherent_dma_mask);
	xhci->dev.parent	= dwc->dev;
	xhci->dev.dma_mask	= dwc->dev->dma_mask;
	xhci->dev.dma_parms	= dwc->dev->dma_parms;
	dwc->xhci = xhci;
	ret = platform_device_add_resources(xhci, dwc->xhci_resources,
						DWC3_XHCI_RESOURCES_NUM);
	if (ret) {
		dev_err(dwc->dev, "couldn't add resources to xHCI device\n");
		goto err1;
	}
	memset(props, 0, sizeof(struct property_entry) * ARRAY_SIZE(props));
	if (dwc->usb3_lpm_capable) {
		props[0].name = "usb3-lpm-capable";
		ret = platform_device_add_properties(xhci, props);
		if (ret) {
			dev_err(dwc->dev, "failed to add properties to xHCI\n");
			goto err1;
		}
	}
	phy_create_lookup(dwc->usb2_generic_phy, "usb2-phy",
			  dev_name(&xhci->dev));
	phy_create_lookup(dwc->usb3_generic_phy, "usb3-phy",
			  dev_name(&xhci->dev));
	ret = platform_device_add(xhci);
	if (ret) {
		dev_err(dwc->dev, "failed to register xHCI device\n");
		goto err2;
	}
	return 0;
err2:
	phy_remove_lookup(dwc->usb2_generic_phy, "usb2-phy",
			  dev_name(&xhci->dev));
	phy_remove_lookup(dwc->usb3_generic_phy, "usb3-phy",
			  dev_name(&xhci->dev));
err1:
	platform_device_put(xhci);
	return ret;
}
Contributors
 | Person | Tokens | Prop | Commits | CommitProp | 
| roger quadros | roger quadros | 211 | 40.58% | 1 | 11.11% | 
| felipe balbi | felipe balbi | 162 | 31.15% | 2 | 22.22% | 
| heikki krogerus | heikki krogerus | 104 | 20.00% | 2 | 22.22% | 
| pratyush anand | pratyush anand | 35 | 6.73% | 1 | 11.11% | 
| ido shayevitz | ido shayevitz | 4 | 0.77% | 1 | 11.11% | 
| robert baldyga | robert baldyga | 3 | 0.58% | 1 | 11.11% | 
| vivek gautam | vivek gautam | 1 | 0.19% | 1 | 11.11% | 
 | Total | 520 | 100.00% | 9 | 100.00% | 
void dwc3_host_exit(struct dwc3 *dwc)
{
	phy_remove_lookup(dwc->usb2_generic_phy, "usb2-phy",
			  dev_name(&dwc->xhci->dev));
	phy_remove_lookup(dwc->usb3_generic_phy, "usb3-phy",
			  dev_name(&dwc->xhci->dev));
	platform_device_unregister(dwc->xhci);
}
Contributors
 | Person | Tokens | Prop | Commits | CommitProp | 
| heikki krogerus | heikki krogerus | 38 | 69.09% | 1 | 50.00% | 
| felipe balbi | felipe balbi | 17 | 30.91% | 1 | 50.00% | 
 | Total | 55 | 100.00% | 2 | 100.00% | 
Overall Contributors
 | Person | Tokens | Prop | Commits | CommitProp | 
| roger quadros | roger quadros | 211 | 36.25% | 1 | 10.00% | 
| felipe balbi | felipe balbi | 186 | 31.96% | 3 | 30.00% | 
| heikki krogerus | heikki krogerus | 142 | 24.40% | 2 | 20.00% | 
| pratyush anand | pratyush anand | 35 | 6.01% | 1 | 10.00% | 
| ido shayevitz | ido shayevitz | 4 | 0.69% | 1 | 10.00% | 
| robert baldyga | robert baldyga | 3 | 0.52% | 1 | 10.00% | 
| vivek gautam | vivek gautam | 1 | 0.17% | 1 | 10.00% | 
 | Total | 582 | 100.00% | 10 | 100.00% |