@@ -634,12 +634,18 @@ static int sh_cmt_clock_event_next(unsigned long delta,
634
634
635
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
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
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
742
goto err2 ;
737
743
}
738
744
745
+ ret = clk_prepare (p -> clk );
746
+ if (ret < 0 )
747
+ goto err3 ;
748
+
739
749
if (res2 && (resource_size (res2 ) == 4 )) {
740
750
/* assume both CMSTR and CMCSR to be 32-bit */
741
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
782
cfg -> clocksource_rating );
773
783
if (ret ) {
774
784
dev_err (& p -> pdev -> dev , "registration failed\n" );
775
- goto err3 ;
785
+ goto err4 ;
776
786
}
777
787
p -> cs_enabled = false;
778
788
779
789
ret = setup_irq (irq , & p -> irqaction );
780
790
if (ret ) {
781
791
dev_err (& p -> pdev -> dev , "failed to request irq %d\n" , irq );
782
- goto err3 ;
792
+ goto err4 ;
783
793
}
784
794
785
795
platform_set_drvdata (pdev , p );
786
796
787
797
return 0 ;
798
+ err4 :
799
+ clk_unprepare (p -> clk );
788
800
err3 :
789
801
clk_put (p -> clk );
790
802
err2 :
0 commit comments