struct ehci_hcd *ehci;
struct tegra_usb_phy *phy;
struct clk *clk;
+ struct clk *emc_clk;
struct otg_transceiver *transceiver;
int host_resumed;
int bus_suspended;
{
struct tegra_ehci_hcd *tegra = dev_get_drvdata(hcd->self.controller);
+ clk_enable(tegra->emc_clk);
clk_enable(tegra->clk);
tegra_usb_phy_power_on(tegra->phy);
tegra->host_resumed = 1;
tegra->host_resumed = 0;
tegra_usb_phy_power_off(tegra->phy);
clk_disable(tegra->clk);
+ clk_disable(tegra->emc_clk);
}
static int tegra_ehci_hub_control(
if (err)
goto fail_clken;
+ tegra->emc_clk = clk_get(&pdev->dev, "emc");
+ if (IS_ERR(tegra->emc_clk)) {
+ dev_err(&pdev->dev, "Can't get emc clock\n");
+ err = PTR_ERR(tegra->emc_clk);
+ goto fail_emc_clk;
+ }
+
+ clk_enable(tegra->emc_clk);
+ clk_set_rate(tegra->emc_clk, 240000000);
+
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
if (!res) {
dev_err(&pdev->dev, "Failed to get I/O memory\n");
fail_phy:
iounmap(hcd->regs);
fail_io:
+ clk_disable(tegra->emc_clk);
+ clk_put(tegra->emc_clk);
+fail_emc_clk:
clk_disable(tegra->clk);
fail_clken:
clk_put(tegra->clk);
clk_disable(tegra->clk);
clk_put(tegra->clk);
+ clk_disable(tegra->emc_clk);
+ clk_put(tegra->emc_clk);
+
kfree(tegra);
return 0;
}