diff options
author | Daniel Lezcano <daniel.lezcano@linaro.org> | 2013-12-18 09:14:11 -0500 |
---|---|---|
committer | Daniel Lezcano <daniel.lezcano@linaro.org> | 2013-12-18 09:14:36 -0500 |
commit | 98aefbe72ec6015f90fe045ed16c5cf755da283d (patch) | |
tree | 35d12ac4d3ee7e3c12aa8825ecb490430d8e5030 /drivers/clocksource | |
parent | 6d19944bd2609a1d7d48149605aa9f62ca8bf640 (diff) | |
parent | 57dee992df244ccce6a6a3a88a43160e285da5d8 (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.c | 20 |
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 | ||
635 | static void sh_cmt_clock_event_suspend(struct clock_event_device *ced) | 635 | static 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 | ||
640 | static void sh_cmt_clock_event_resume(struct clock_event_device *ced) | 643 | static 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 | ||
645 | static void sh_cmt_register_clockevent(struct sh_cmt_priv *p, | 651 | static 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; |
798 | err4: | ||
799 | clk_unprepare(p->clk); | ||
788 | err3: | 800 | err3: |
789 | clk_put(p->clk); | 801 | clk_put(p->clk); |
790 | err2: | 802 | err2: |