2 * AM33XX clockdomain control
4 * Copyright (C) 2011-2012 Texas Instruments Incorporated - http://www.ti.com/
5 * Vaibhav Hiremath <hvaibhav@ti.com>
7 * Derived from mach-omap2/clockdomain44xx.c written by Rajendra Nayak
9 * This program is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU General Public License as
11 * published by the Free Software Foundation version 2.
13 * This program is distributed "as is" WITHOUT ANY WARRANTY of any
14 * kind, whether express or implied; without even the implied warranty
15 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
19 #include <linux/kernel.h>
21 #include "clockdomain.h"
25 static int am33xx_clkdm_sleep(struct clockdomain
*clkdm
)
27 am33xx_cm_clkdm_force_sleep(clkdm
->cm_inst
, clkdm
->clkdm_offs
);
31 static int am33xx_clkdm_wakeup(struct clockdomain
*clkdm
)
33 am33xx_cm_clkdm_force_wakeup(clkdm
->cm_inst
, clkdm
->clkdm_offs
);
37 static void am33xx_clkdm_allow_idle(struct clockdomain
*clkdm
)
39 am33xx_cm_clkdm_enable_hwsup(clkdm
->cm_inst
, clkdm
->clkdm_offs
);
42 static void am33xx_clkdm_deny_idle(struct clockdomain
*clkdm
)
44 am33xx_cm_clkdm_disable_hwsup(clkdm
->cm_inst
, clkdm
->clkdm_offs
);
47 static int am33xx_clkdm_clk_enable(struct clockdomain
*clkdm
)
49 if (clkdm
->flags
& CLKDM_CAN_FORCE_WAKEUP
)
50 return am33xx_clkdm_wakeup(clkdm
);
55 static int am33xx_clkdm_clk_disable(struct clockdomain
*clkdm
)
59 hwsup
= am33xx_cm_is_clkdm_in_hwsup(clkdm
->cm_inst
, clkdm
->clkdm_offs
);
61 if (!hwsup
&& (clkdm
->flags
& CLKDM_CAN_FORCE_SLEEP
))
62 am33xx_clkdm_sleep(clkdm
);
67 struct clkdm_ops am33xx_clkdm_operations
= {
68 .clkdm_sleep
= am33xx_clkdm_sleep
,
69 .clkdm_wakeup
= am33xx_clkdm_wakeup
,
70 .clkdm_allow_idle
= am33xx_clkdm_allow_idle
,
71 .clkdm_deny_idle
= am33xx_clkdm_deny_idle
,
72 .clkdm_clk_enable
= am33xx_clkdm_clk_enable
,
73 .clkdm_clk_disable
= am33xx_clkdm_clk_disable
,