/** * ci13xxx_pci_probe: PCI probe * @pdev: USB device controller being probed * @id: PCI hotplug ID connecting controller to UDC framework * * This function returns an error code * Allocates basic PCI resources for this USB device controller, and then * invokes the udc_probe() method to start the UDC associated with it */ static int __devinit ci13xxx_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id) { void __iomem *regs = NULL; int retval = 0; if (id == NULL) return -EINVAL; retval = pci_enable_device(pdev); if (retval) goto done; if (!pdev->irq) { dev_err(&pdev->dev, "No IRQ, check BIOS/PCI setup!"); retval = -ENODEV; goto disable_device; } retval = pci_request_regions(pdev, UDC_DRIVER_NAME); if (retval) goto disable_device; /* BAR 0 holds all the registers */ regs = pci_iomap(pdev, 0, 0); if (!regs) { dev_err(&pdev->dev, "Error mapping memory!"); retval = -EFAULT; goto release_regions; } pci_set_drvdata(pdev, (__force void *)regs); pci_set_master(pdev); pci_try_set_mwi(pdev); retval = udc_probe(&ci13xxx_pci_udc_driver, &pdev->dev, regs); if (retval) goto iounmap; /* our device does not have MSI capability */ retval = request_irq(pdev->irq, ci13xxx_pci_irq, IRQF_SHARED, UDC_DRIVER_NAME, pdev); if (retval) goto gadget_remove; return 0; gadget_remove: udc_remove(); iounmap: pci_iounmap(pdev, regs); release_regions: pci_release_regions(pdev); disable_device: pci_disable_device(pdev); done: return retval; }
static int ci13xxx_msm_probe(struct platform_device *pdev) { struct resource *res; struct usb_info *ui; void __iomem *regs; int irq; int ret; dev_dbg(&pdev->dev, "ci13xxx_msm_probe\n"); ui = kzalloc(sizeof(struct usb_info), GFP_KERNEL); if (!ui) return -ENOMEM; the_usb_info = ui; res = platform_get_resource(pdev, IORESOURCE_MEM, 0); if (!res) { dev_err(&pdev->dev, "failed to get platform resource mem\n"); return -ENXIO; } regs = ioremap(res->start, resource_size(res)); if (!regs) { dev_err(&pdev->dev, "ioremap failed\n"); return -ENOMEM; } ret = udc_probe(&ci13xxx_msm_udc_driver, &pdev->dev, regs); if (ret < 0) { dev_err(&pdev->dev, "udc_probe failed\n"); goto iounmap; } irq = platform_get_irq(pdev, 0); if (irq < 0) { dev_err(&pdev->dev, "IRQ not found\n"); ret = -ENXIO; goto udc_remove; } ret = request_irq(irq, msm_udc_irq, IRQF_SHARED, pdev->name, pdev); if (ret < 0) { dev_err(&pdev->dev, "request_irq failed\n"); goto udc_remove; } pm_runtime_no_callbacks(&pdev->dev); pm_runtime_enable(&pdev->dev); return 0; udc_remove: udc_remove(); iounmap: iounmap(regs); return ret; }
static int ci13xxx_msm_probe(struct platform_device *pdev) { struct resource *res; int ret; struct ci13xxx_platform_data *pdata = pdev->dev.platform_data; bool is_l1_supported = false; dev_dbg(&pdev->dev, "ci13xxx_msm_probe\n"); if (pdata) { /* Acceptable values for nz_itc are: 0,1,2,4,8,16,32,64 */ if (pdata->log2_itc > CI13XXX_MSM_MAX_LOG2_ITC || pdata->log2_itc <= 0) ci13xxx_msm_udc_driver.nz_itc = 0; else ci13xxx_msm_udc_driver.nz_itc = 1 << (pdata->log2_itc-1); is_l1_supported = pdata->l1_supported; /* Set ahb2ahb bypass flag if it is requested. */ if (pdata->enable_ahb2ahb_bypass) ci13xxx_msm_udc_driver.flags |= CI13XXX_ENABLE_AHB2AHB_BYPASS; /* Clear disable streaming flag if is requested. */ if (pdata->enable_streaming) ci13xxx_msm_udc_driver.flags &= ~CI13XXX_DISABLE_STREAMING; } res = platform_get_resource(pdev, IORESOURCE_MEM, 0); if (!res) { dev_err(&pdev->dev, "failed to get platform resource mem\n"); return -ENXIO; } _udc_ctxt.regs = ioremap(res->start, resource_size(res)); if (!_udc_ctxt.regs) { dev_err(&pdev->dev, "ioremap failed\n"); return -ENOMEM; } ret = udc_probe(&ci13xxx_msm_udc_driver, &pdev->dev, _udc_ctxt.regs); if (ret < 0) { dev_err(&pdev->dev, "udc_probe failed\n"); goto iounmap; } _udc->gadget.l1_supported = is_l1_supported; _udc_ctxt.irq = platform_get_irq(pdev, 0); if (_udc_ctxt.irq < 0) { dev_err(&pdev->dev, "IRQ not found\n"); ret = -ENXIO; goto udc_remove; } res = platform_get_resource_byname(pdev, IORESOURCE_IO, "USB_RESUME"); /* Get pinctrl if target uses pinctrl */ _udc_ctxt.ci13xxx_pinctrl = devm_pinctrl_get(&pdev->dev); if (IS_ERR(_udc_ctxt.ci13xxx_pinctrl)) { if (of_property_read_bool(pdev->dev.of_node, "pinctrl-names")) { dev_err(&pdev->dev, "Error encountered while getting pinctrl"); ret = PTR_ERR(_udc_ctxt.ci13xxx_pinctrl); goto udc_remove; } dev_dbg(&pdev->dev, "Target does not use pinctrl\n"); _udc_ctxt.ci13xxx_pinctrl = NULL; } if (res) { ret = ci13xxx_msm_install_wake_gpio(pdev, res); if (ret < 0) { dev_err(&pdev->dev, "gpio irq install failed\n"); goto udc_remove; } } ret = request_irq(_udc_ctxt.irq, msm_udc_irq, IRQF_SHARED, pdev->name, pdev); if (ret < 0) { dev_err(&pdev->dev, "request_irq failed\n"); goto gpio_uninstall; } setup_timer(&_udc_ctxt.irq_enable_timer, enable_usb_irq_timer_func, (unsigned long)NULL); pm_runtime_no_callbacks(&pdev->dev); pm_runtime_set_active(&pdev->dev); pm_runtime_enable(&pdev->dev); return 0; gpio_uninstall: ci13xxx_msm_uninstall_wake_gpio(pdev); udc_remove: udc_remove(); iounmap: iounmap(_udc_ctxt.regs); return ret; }
static int ci13xxx_msm_probe(struct platform_device *pdev) { struct resource *res; int ret; dev_dbg(&pdev->dev, "ci13xxx_msm_probe\n"); res = platform_get_resource(pdev, IORESOURCE_MEM, 0); if (!res) { dev_err(&pdev->dev, "failed to get platform resource mem\n"); return -ENXIO; } _udc_ctxt.regs = ioremap(res->start, resource_size(res)); if (!_udc_ctxt.regs) { dev_err(&pdev->dev, "ioremap failed\n"); return -ENOMEM; } ret = udc_probe(&ci13xxx_msm_udc_driver, &pdev->dev, _udc_ctxt.regs); if (ret < 0) { dev_err(&pdev->dev, "udc_probe failed\n"); goto iounmap; } _udc_ctxt.irq = platform_get_irq(pdev, 0); if (_udc_ctxt.irq < 0) { dev_err(&pdev->dev, "IRQ not found\n"); ret = -ENXIO; goto udc_remove; } res = platform_get_resource_byname(pdev, IORESOURCE_IO, "USB_RESUME"); if (res) { ret = ci13xxx_msm_install_wake_gpio(pdev, res); if (ret < 0) { dev_err(&pdev->dev, "gpio irq install failed\n"); goto udc_remove; } } ret = request_irq(_udc_ctxt.irq, msm_udc_irq, IRQF_SHARED, pdev->name, pdev); if (ret < 0) { dev_err(&pdev->dev, "request_irq failed\n"); goto gpio_uninstall; } pm_runtime_no_callbacks(&pdev->dev); pm_runtime_enable(&pdev->dev); return 0; gpio_uninstall: ci13xxx_msm_uninstall_wake_gpio(pdev); udc_remove: udc_remove(); iounmap: iounmap(_udc_ctxt.regs); return ret; }
static int ci13xxx_msm_probe(struct platform_device *pdev) { struct resource *res; int ret; #ifdef CONFIG_MACH_HTC struct usb_info *ui; #endif dev_dbg(&pdev->dev, "ci13xxx_msm_probe\n"); #ifdef CONFIG_MACH_HTC ui = kzalloc(sizeof(struct usb_info), GFP_KERNEL); if (!ui) return -ENOMEM; the_usb_info = ui; #endif res = platform_get_resource(pdev, IORESOURCE_MEM, 0); if (!res) { dev_err(&pdev->dev, "failed to get platform resource mem\n"); return -ENXIO; } _udc_ctxt.regs = ioremap(res->start, resource_size(res)); if (!_udc_ctxt.regs) { dev_err(&pdev->dev, "ioremap failed\n"); return -ENOMEM; } ret = udc_probe(&ci13xxx_msm_udc_driver, &pdev->dev, _udc_ctxt.regs); if (ret < 0) { dev_err(&pdev->dev, "udc_probe failed\n"); goto iounmap; } _udc_ctxt.irq = platform_get_irq(pdev, 0); if (_udc_ctxt.irq < 0) { dev_err(&pdev->dev, "IRQ not found\n"); ret = -ENXIO; goto udc_remove; } res = platform_get_resource_byname(pdev, IORESOURCE_IO, "USB_RESUME"); if (res) { ret = ci13xxx_msm_install_wake_gpio(pdev, res); if (ret < 0) { dev_err(&pdev->dev, "gpio irq install failed\n"); goto udc_remove; } } ret = request_irq(_udc_ctxt.irq, msm_udc_irq, IRQF_SHARED, pdev->name, pdev); if (ret < 0) { dev_err(&pdev->dev, "request_irq failed\n"); goto gpio_uninstall; } #ifdef CONFIG_MACH_HTC INIT_DELAYED_WORK(&ui->chg_stop, usb_chg_stop); #endif pm_runtime_no_callbacks(&pdev->dev); pm_runtime_enable(&pdev->dev); return 0; gpio_uninstall: ci13xxx_msm_uninstall_wake_gpio(pdev); udc_remove: udc_remove(); iounmap: iounmap(_udc_ctxt.regs); return ret; }
static int ci13xxx_msm_probe(struct platform_device *pdev) { struct resource *res; int ret; struct ci13xxx_platform_data *pdata = pdev->dev.platform_data; bool is_l1_supported = false; dev_dbg(&pdev->dev, "ci13xxx_msm_probe\n"); if (pdata) { /* Acceptable values for nz_itc are: 0,1,2,4,8,16,32,64 */ if (pdata->log2_itc > CI13XXX_MSM_MAX_LOG2_ITC || pdata->log2_itc <= 0) ci13xxx_msm_udc_driver.nz_itc = 0; else ci13xxx_msm_udc_driver.nz_itc = 1 << (pdata->log2_itc-1); is_l1_supported = pdata->l1_supported; } res = platform_get_resource(pdev, IORESOURCE_MEM, 0); if (!res) { dev_err(&pdev->dev, "failed to get platform resource mem\n"); return -ENXIO; } _udc_ctxt.regs = ioremap(res->start, resource_size(res)); if (!_udc_ctxt.regs) { dev_err(&pdev->dev, "ioremap failed\n"); return -ENOMEM; } ret = udc_probe(&ci13xxx_msm_udc_driver, &pdev->dev, _udc_ctxt.regs); if (ret < 0) { dev_err(&pdev->dev, "udc_probe failed\n"); goto iounmap; } _udc->gadget.l1_supported = is_l1_supported; _udc_ctxt.irq = platform_get_irq(pdev, 0); if (_udc_ctxt.irq < 0) { dev_err(&pdev->dev, "IRQ not found\n"); ret = -ENXIO; goto udc_remove; } res = platform_get_resource_byname(pdev, IORESOURCE_IO, "USB_RESUME"); if (res) { ret = ci13xxx_msm_install_wake_gpio(pdev, res); if (ret < 0) { dev_err(&pdev->dev, "gpio irq install failed\n"); goto udc_remove; } } ret = request_irq(_udc_ctxt.irq, msm_udc_irq, IRQF_SHARED, pdev->name, pdev); if (ret < 0) { dev_err(&pdev->dev, "request_irq failed\n"); goto gpio_uninstall; } pm_runtime_no_callbacks(&pdev->dev); pm_runtime_enable(&pdev->dev); return 0; gpio_uninstall: ci13xxx_msm_uninstall_wake_gpio(pdev); udc_remove: udc_remove(); iounmap: iounmap(_udc_ctxt.regs); return ret; }
static int ci13xxx_msm_probe(struct platform_device *pdev) { struct resource *res; int ret, rc; int itc_level = 0; dev_dbg(&pdev->dev, "ci13xxx_msm_probe\n"); if (pdev->dev.of_node) { rc = of_property_read_u32(pdev->dev.of_node, "qcom,itc-level", &itc_level); /* Acceptable values for nz_itc are: 0,1,2,4,8,16,32,64 */ if (itc_level > CI13XXX_MSM_MAX_ITC_LEVEL || rc) ci13xxx_msm_udc_driver.nz_itc = 0; else ci13xxx_msm_udc_driver.nz_itc = 1 << itc_level; } res = platform_get_resource(pdev, IORESOURCE_MEM, 0); if (!res) { dev_err(&pdev->dev, "failed to get platform resource mem\n"); return -ENXIO; } _udc_ctxt.regs = ioremap(res->start, resource_size(res)); if (!_udc_ctxt.regs) { dev_err(&pdev->dev, "ioremap failed\n"); return -ENOMEM; } ret = udc_probe(&ci13xxx_msm_udc_driver, &pdev->dev, _udc_ctxt.regs); if (ret < 0) { dev_err(&pdev->dev, "udc_probe failed\n"); goto iounmap; } _udc_ctxt.irq = platform_get_irq(pdev, 0); if (_udc_ctxt.irq < 0) { dev_err(&pdev->dev, "IRQ not found\n"); ret = -ENXIO; goto udc_remove; } res = platform_get_resource_byname(pdev, IORESOURCE_IO, "USB_RESUME"); if (res) { ret = ci13xxx_msm_install_wake_gpio(pdev, res); if (ret < 0) { dev_err(&pdev->dev, "gpio irq install failed\n"); goto udc_remove; } } ret = request_irq(_udc_ctxt.irq, msm_udc_irq, IRQF_SHARED, pdev->name, pdev); if (ret < 0) { dev_err(&pdev->dev, "request_irq failed\n"); goto gpio_uninstall; } pm_runtime_no_callbacks(&pdev->dev); pm_runtime_enable(&pdev->dev); return 0; gpio_uninstall: ci13xxx_msm_uninstall_wake_gpio(pdev); udc_remove: udc_remove(); iounmap: iounmap(_udc_ctxt.regs); return ret; }
static int ci13xxx_msm_probe(struct platform_device *pdev) { struct resource *res; int ret; struct ci13xxx_platform_data *pdata = pdev->dev.platform_data; bool is_l1_supported = false; dev_dbg(&pdev->dev, "ci13xxx_msm_probe\n"); if (pdata) { /* Acceptable values for nz_itc are: 0,1,2,4,8,16,32,64 */ if (pdata->log2_itc > CI13XXX_MSM_MAX_LOG2_ITC || pdata->log2_itc <= 0) ci13xxx_msm_udc_driver.nz_itc = 0; else ci13xxx_msm_udc_driver.nz_itc = 1 << (pdata->log2_itc-1); is_l1_supported = pdata->l1_supported; /* Set ahb2ahb bypass flag if it is requested. */ if (pdata->enable_ahb2ahb_bypass) ci13xxx_msm_udc_driver.flags |= CI13XXX_ENABLE_AHB2AHB_BYPASS; } res = platform_get_resource(pdev, IORESOURCE_MEM, 0); if (!res) { dev_err(&pdev->dev, "failed to get platform resource mem\n"); return -ENXIO; } _udc_ctxt.regs = ioremap(res->start, resource_size(res)); if (!_udc_ctxt.regs) { dev_err(&pdev->dev, "ioremap failed\n"); return -ENOMEM; } ret = udc_probe(&ci13xxx_msm_udc_driver, &pdev->dev, _udc_ctxt.regs); if (ret < 0) { dev_err(&pdev->dev, "udc_probe failed\n"); goto iounmap; } _udc->gadget.l1_supported = is_l1_supported; _udc_ctxt.irq = platform_get_irq(pdev, 0); if (_udc_ctxt.irq < 0) { dev_err(&pdev->dev, "IRQ not found\n"); ret = -ENXIO; goto udc_remove; } res = platform_get_resource_byname(pdev, IORESOURCE_IO, "USB_RESUME"); if (res) { ret = ci13xxx_msm_install_wake_gpio(pdev, res); if (ret < 0) { dev_err(&pdev->dev, "gpio irq install failed\n"); goto udc_remove; } } ret = request_irq(_udc_ctxt.irq, msm_udc_irq, IRQF_SHARED, pdev->name, pdev); if (ret < 0) { dev_err(&pdev->dev, "request_irq failed\n"); goto gpio_uninstall; } #ifdef CONFIG_USB_G_LGE_ANDROID wake_lock_init(&_udc_ctxt.wlock, WAKE_LOCK_SUSPEND, "usb_bus_active"); INIT_DELAYED_WORK(&_udc_ctxt.wunlock_w, wunlock_w); #endif #ifdef CONFIG_LGE_PM_VZW_FAST_CHG INIT_DELAYED_WORK(&usb_detect_w, usb_detect_work); #endif pm_runtime_no_callbacks(&pdev->dev); pm_runtime_enable(&pdev->dev); return 0; gpio_uninstall: ci13xxx_msm_uninstall_wake_gpio(pdev); udc_remove: udc_remove(); iounmap: iounmap(_udc_ctxt.regs); return ret; }