static struct tegra_usb_phy *phy;
static struct clk *udc_clk;
static struct clk *emc_clk;
+static struct clk *sclk_clk;
static void *udc_base;
int fsl_udc_clk_init(struct platform_device *pdev)
clk_enable(udc_clk);
+ sclk_clk = clk_get(&pdev->dev, "sclk");
+ if (IS_ERR(sclk_clk)) {
+ dev_err(&pdev->dev, "Can't get sclk clock\n");
+ err = PTR_ERR(sclk_clk);
+ goto err_sclk;
+ }
+
+ clk_set_rate(sclk_clk, 80000000);
+ clk_enable(sclk_clk);
+
emc_clk = clk_get(&pdev->dev, "emc");
if (IS_ERR(emc_clk)) {
dev_err(&pdev->dev, "Can't get emc clock\n");
clk_disable(emc_clk);
clk_put(emc_clk);
err_emc:
+ clk_disable(sclk_clk);
+ clk_put(sclk_clk);
+err_sclk:
clk_disable(udc_clk);
clk_put(udc_clk);
return err;
clk_disable(udc_clk);
clk_put(udc_clk);
+ clk_disable(sclk_clk);
+ clk_put(sclk_clk);
+
clk_disable(emc_clk);
clk_put(emc_clk);
}
{
tegra_usb_phy_power_off(phy);
clk_disable(udc_clk);
+ clk_disable(sclk_clk);
clk_disable(emc_clk);
}
void fsl_udc_clk_resume(void)
{
clk_enable(emc_clk);
+ clk_enable(sclk_clk);
clk_enable(udc_clk);
tegra_usb_phy_power_on(phy);
}
struct tegra_usb_phy *phy;
struct clk *clk;
struct clk *emc_clk;
+ struct clk *sclk_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->sclk_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->sclk_clk);
clk_disable(tegra->emc_clk);
}
if (err)
goto fail_clken;
+
+ tegra->sclk_clk = clk_get(&pdev->dev, "sclk");
+ if (IS_ERR(tegra->sclk_clk)) {
+ dev_err(&pdev->dev, "Can't get sclk clock\n");
+ err = PTR_ERR(tegra->sclk_clk);
+ goto fail_sclk_clk;
+ }
+
+ clk_set_rate(tegra->sclk_clk, 80000000);
+ clk_enable(tegra->sclk_clk);
+
tegra->emc_clk = clk_get(&pdev->dev, "emc");
if (IS_ERR(tegra->emc_clk)) {
dev_err(&pdev->dev, "Can't get emc clock\n");
clk_disable(tegra->emc_clk);
clk_put(tegra->emc_clk);
fail_emc_clk:
+ clk_disable(tegra->sclk_clk);
+ clk_put(tegra->sclk_clk);
+fail_sclk_clk:
clk_disable(tegra->clk);
fail_clken:
clk_put(tegra->clk);
clk_disable(tegra->clk);
clk_put(tegra->clk);
+ clk_disable(tegra->sclk_clk);
+ clk_put(tegra->sclk_clk);
+
clk_disable(tegra->emc_clk);
clk_put(tegra->emc_clk);