aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/clocksource
diff options
context:
space:
mode:
authorDaniel Lezcano <daniel.lezcano@linaro.org>2013-12-18 09:14:11 -0500
committerDaniel Lezcano <daniel.lezcano@linaro.org>2013-12-18 09:14:36 -0500
commit98aefbe72ec6015f90fe045ed16c5cf755da283d (patch)
tree35d12ac4d3ee7e3c12aa8825ecb490430d8e5030 /drivers/clocksource
parent6d19944bd2609a1d7d48149605aa9f62ca8bf640 (diff)
parent57dee992df244ccce6a6a3a88a43160e285da5d8 (diff)
Merge branch 'clockevents/for-Simon-3.13-rc2' into clockevents/3.14
* clocksource: sh_cmt: Add clk_prepare/unprepare support Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Diffstat (limited to 'drivers/clocksource')
-rw-r--r--drivers/clocksource/sh_cmt.c20
1 files changed, 16 insertions, 4 deletions
diff --git a/drivers/clocksource/sh_cmt.c b/drivers/clocksource/sh_cmt.c
index c6186339dd52..0b1836a6c539 100644
--- a/drivers/clocksource/sh_cmt.c
+++ b/drivers/clocksource/sh_cmt.c
@@ -634,12 +634,18 @@ static int sh_cmt_clock_event_next(unsigned long delta,
634 634
635static void sh_cmt_clock_event_suspend(struct clock_event_device *ced) 635static void sh_cmt_clock_event_suspend(struct clock_event_device *ced)
636{ 636{
637 pm_genpd_syscore_poweroff(&ced_to_sh_cmt(ced)->pdev->dev); 637 struct sh_cmt_priv *p = ced_to_sh_cmt(ced);
638
639 pm_genpd_syscore_poweroff(&p->pdev->dev);
640 clk_unprepare(p->clk);
638} 641}
639 642
640static void sh_cmt_clock_event_resume(struct clock_event_device *ced) 643static void sh_cmt_clock_event_resume(struct clock_event_device *ced)
641{ 644{
642 pm_genpd_syscore_poweron(&ced_to_sh_cmt(ced)->pdev->dev); 645 struct sh_cmt_priv *p = ced_to_sh_cmt(ced);
646
647 clk_prepare(p->clk);
648 pm_genpd_syscore_poweron(&p->pdev->dev);
643} 649}
644 650
645static void sh_cmt_register_clockevent(struct sh_cmt_priv *p, 651static void sh_cmt_register_clockevent(struct sh_cmt_priv *p,
@@ -736,6 +742,10 @@ static int sh_cmt_setup(struct sh_cmt_priv *p, struct platform_device *pdev)
736 goto err2; 742 goto err2;
737 } 743 }
738 744
745 ret = clk_prepare(p->clk);
746 if (ret < 0)
747 goto err3;
748
739 if (res2 && (resource_size(res2) == 4)) { 749 if (res2 && (resource_size(res2) == 4)) {
740 /* assume both CMSTR and CMCSR to be 32-bit */ 750 /* assume both CMSTR and CMCSR to be 32-bit */
741 p->read_control = sh_cmt_read32; 751 p->read_control = sh_cmt_read32;
@@ -772,19 +782,21 @@ static int sh_cmt_setup(struct sh_cmt_priv *p, struct platform_device *pdev)
772 cfg->clocksource_rating); 782 cfg->clocksource_rating);
773 if (ret) { 783 if (ret) {
774 dev_err(&p->pdev->dev, "registration failed\n"); 784 dev_err(&p->pdev->dev, "registration failed\n");
775 goto err3; 785 goto err4;
776 } 786 }
777 p->cs_enabled = false; 787 p->cs_enabled = false;
778 788
779 ret = setup_irq(irq, &p->irqaction); 789 ret = setup_irq(irq, &p->irqaction);
780 if (ret) { 790 if (ret) {
781 dev_err(&p->pdev->dev, "failed to request irq %d\n", irq); 791 dev_err(&p->pdev->dev, "failed to request irq %d\n", irq);
782 goto err3; 792 goto err4;
783 } 793 }
784 794
785 platform_set_drvdata(pdev, p); 795 platform_set_drvdata(pdev, p);
786 796
787 return 0; 797 return 0;
798err4:
799 clk_unprepare(p->clk);
788err3: 800err3:
789 clk_put(p->clk); 801 clk_put(p->clk);
790err2: 802err2: