Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8afdc9cc authored by Sebastian Hesselbarth's avatar Sebastian Hesselbarth Committed by Ulf Hansson
Browse files

mmc: sdhci-pxav3: Get optional core clock



Besides the I/O clock, some PXAv3 SDHCI IP also requires a core clock to
be enabled. Add an optional core clock to the corresponding driver.

Signed-off-by: default avatarSebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
Signed-off-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
parent 01ae1070
Loading
Loading
Loading
Loading
+13 −0
Original line number Original line Diff line number Diff line
@@ -59,6 +59,7 @@
#define SDCE_MISC_INT_EN	(1<<1)
#define SDCE_MISC_INT_EN	(1<<1)


struct sdhci_pxa {
struct sdhci_pxa {
	struct clk *clk_core;
	struct clk *clk_io;
	struct clk *clk_io;
	u8	power_mode;
	u8	power_mode;
};
};
@@ -320,6 +321,10 @@ static int sdhci_pxav3_probe(struct platform_device *pdev)
	pltfm_host->clk = pxa->clk_io;
	pltfm_host->clk = pxa->clk_io;
	clk_prepare_enable(pxa->clk_io);
	clk_prepare_enable(pxa->clk_io);


	pxa->clk_core = devm_clk_get(dev, "core");
	if (!IS_ERR(pxa->clk_core))
		clk_prepare_enable(pxa->clk_core);

	/* enable 1/8V DDR capable */
	/* enable 1/8V DDR capable */
	host->mmc->caps |= MMC_CAP_1_8V_DDR;
	host->mmc->caps |= MMC_CAP_1_8V_DDR;


@@ -392,6 +397,8 @@ static int sdhci_pxav3_probe(struct platform_device *pdev)
err_of_parse:
err_of_parse:
err_cd_req:
err_cd_req:
	clk_disable_unprepare(pxa->clk_io);
	clk_disable_unprepare(pxa->clk_io);
	if (!IS_ERR(pxa->clk_core))
		clk_disable_unprepare(pxa->clk_core);
err_clk_get:
err_clk_get:
err_mbus_win:
err_mbus_win:
	sdhci_pltfm_free(pdev);
	sdhci_pltfm_free(pdev);
@@ -409,6 +416,8 @@ static int sdhci_pxav3_remove(struct platform_device *pdev)
	pm_runtime_disable(&pdev->dev);
	pm_runtime_disable(&pdev->dev);


	clk_disable_unprepare(pxa->clk_io);
	clk_disable_unprepare(pxa->clk_io);
	if (!IS_ERR(pxa->clk_core))
		clk_disable_unprepare(pxa->clk_core);


	sdhci_pltfm_free(pdev);
	sdhci_pltfm_free(pdev);


@@ -456,6 +465,8 @@ static int sdhci_pxav3_runtime_suspend(struct device *dev)
	spin_unlock_irqrestore(&host->lock, flags);
	spin_unlock_irqrestore(&host->lock, flags);


	clk_disable_unprepare(pxa->clk_io);
	clk_disable_unprepare(pxa->clk_io);
	if (!IS_ERR(pxa->clk_core))
		clk_disable_unprepare(pxa->clk_core);


	return 0;
	return 0;
}
}
@@ -468,6 +479,8 @@ static int sdhci_pxav3_runtime_resume(struct device *dev)
	unsigned long flags;
	unsigned long flags;


	clk_prepare_enable(pxa->clk_io);
	clk_prepare_enable(pxa->clk_io);
	if (!IS_ERR(pxa->clk_core))
		clk_prepare_enable(pxa->clk_core);


	spin_lock_irqsave(&host->lock, flags);
	spin_lock_irqsave(&host->lock, flags);
	host->runtime_suspended = false;
	host->runtime_suspended = false;