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

Commit 1b842e91 authored by Magnus Damm's avatar Magnus Damm Committed by Paul Mundt
Browse files

clocksource: sh_tmu: Runtime PM support



Add Runtime PM support to the TMU driver.

The hardware device is enabled as long as the clocksource
or the clockevent portion of the driver is used.

Signed-off-by: default avatarMagnus Damm <damm@opensource.se>
Acked-by: default avatarJohn Stultz <johnstul@us.ibm.com>
Signed-off-by: default avatarPaul Mundt <lethal@linux-sh.org>
parent 0aeac458
Loading
Loading
Loading
Loading
+10 −2
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@
#include <linux/delay.h>
#include <linux/io.h>
#include <linux/clk.h>
#include <linux/pm_runtime.h>
#include <linux/irq.h>
#include <linux/err.h>
#include <linux/clocksource.h>
@@ -109,10 +110,12 @@ static int sh_tmu_enable(struct sh_tmu_priv *p)
{
	int ret;

	/* enable clock */
	/* wake up device and enable clock */
	pm_runtime_get_sync(&p->pdev->dev);
	ret = clk_enable(p->clk);
	if (ret) {
		dev_err(&p->pdev->dev, "cannot enable clock\n");
		pm_runtime_put_sync(&p->pdev->dev);
		return ret;
	}

@@ -141,8 +144,9 @@ static void sh_tmu_disable(struct sh_tmu_priv *p)
	/* disable interrupts in TMU block */
	sh_tmu_write(p, TCR, 0x0000);

	/* stop clock */
	/* stop clock and mark device as idle */
	clk_disable(p->clk);
	pm_runtime_put_sync(&p->pdev->dev);
}

static void sh_tmu_set_next(struct sh_tmu_priv *p, unsigned long delta,
@@ -411,6 +415,7 @@ static int __devinit sh_tmu_probe(struct platform_device *pdev)

	if (p) {
		dev_info(&pdev->dev, "kept as earlytimer\n");
		pm_runtime_enable(&pdev->dev);
		return 0;
	}

@@ -425,6 +430,9 @@ static int __devinit sh_tmu_probe(struct platform_device *pdev)
		kfree(p);
		platform_set_drvdata(pdev, NULL);
	}

	if (!is_early_platform_device(pdev))
		pm_runtime_enable(&pdev->dev);
	return ret;
}