static void tegra_ehci_power_down(struct usb_hcd *hcd) { struct ehci_hcd *ehci = hcd_to_ehci(hcd); struct tegra_hcd_platform_data *pdata; pdata = hcd->self.controller->platform_data; NV_ASSERT_SUCCESS(NvDdkUsbPhyPowerDown(pdata->hUsbPhy, true, 0)); ehci->host_resumed = 0; }
/* platform driver interface */ static int __devinit tegra_otg_probe(struct platform_device *pdev) { int err = 0; struct resource *res; int instance = pdev->id; NvError e; struct tegra_otg_platform_data *pdata; sg_tegra_otg = kzalloc(sizeof(struct tegra_otg_data), GFP_KERNEL); if (!sg_tegra_otg) return -ENOMEM; spin_lock_init(&sg_tegra_otg->lock); platform_set_drvdata(pdev, sg_tegra_otg); NV_CHECK_ERROR_CLEANUP( NvDdkUsbPhyOpen(s_hRmGlobal, instance, &sg_tegra_otg->usb_phy) ); NV_CHECK_ERROR_CLEANUP( NvDdkUsbPhyPowerUp(sg_tegra_otg->usb_phy, NV_FALSE, 0) ); sg_tegra_otg->instance = pdev->id; sg_tegra_otg->dev = &pdev->dev; sg_tegra_otg->otg.label = driver_name; sg_tegra_otg->otg.state = OTG_STATE_UNDEFINED; sg_tegra_otg->otg.set_peripheral = tegra_otg_set_peripheral; sg_tegra_otg->otg.set_host = tegra_otg_set_host; sg_tegra_otg->otg.set_power = tegra_otg_set_power; sg_tegra_otg->otg.set_suspend = tegra_otg_set_suspend; pdata = sg_tegra_otg->dev->platform_data; if(pdata->usb_property->IdPinDetectionType == NvOdmUsbIdPinType_CableId) sg_tegra_otg->id_connected = 1; if(pdata->usb_property->UseInternalPhyWakeup) sg_tegra_otg->vbus_connected = 1; res = platform_get_resource(pdev, IORESOURCE_MEM, 0); if (!res) { err = -ENXIO; goto err_irq; } sg_tegra_otg->regs = ioremap(res->start, resource_size(res)); if (!sg_tegra_otg->regs) { err = -ENOMEM; goto err_irq; } sg_tegra_otg->irq = platform_get_irq(pdev, 0); if (!sg_tegra_otg->irq) { err = -ENODEV; goto err_irq; } err = request_irq(sg_tegra_otg->irq, tegra_otg_irq, IRQF_SHARED, driver_name, pdev); if (err) { printk("cannot request irq %d err %d\n", sg_tegra_otg->irq, err); goto err_mem_map; } /* only active when a gadget is registered */ err = otg_set_transceiver(&sg_tegra_otg->otg); if (err) { dev_err(&pdev->dev, "can't register transceiver, err: %d\n", err); goto err_otg; } NvDdkUsbPhyPowerDown(sg_tegra_otg->usb_phy, NV_FALSE, 0); return 0; err_otg: free_irq(sg_tegra_otg->irq, &pdev->dev); err_mem_map: iounmap(sg_tegra_otg->regs); err_irq: NvDdkUsbPhyClose(sg_tegra_otg->usb_phy); fail: platform_set_drvdata(pdev, NULL); kfree(sg_tegra_otg); return err; }
void tegra_udc_clk_suspend(void) { NV_ASSERT_SUCCESS(NvDdkUsbPhyPowerDown(s_hUsbPhy, NV_FALSE, 0)); }