blob: c0ccc4701646f581c6f95a2e2418e8127a1d3e42 [file] [log] [blame]
Rajendra Nayak68b921a2011-02-25 16:06:47 -07001/*
2 * OMAP4 clockdomain control
3 *
4 * Copyright (C) 2008-2010 Texas Instruments, Inc.
5 * Copyright (C) 2008-2010 Nokia Corporation
6 *
7 * Derived from mach-omap2/clockdomain.c written by Paul Walmsley
8 * Rajendra Nayak <rnayak@ti.com>
9 *
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License version 2 as
12 * published by the Free Software Foundation.
13 */
14
15#include "clockdomain.h"
16#include "cminst44xx.h"
17
18static int omap4_clkdm_sleep(struct clockdomain *clkdm)
19{
20 omap4_cminst_clkdm_force_sleep(clkdm->prcm_partition,
21 clkdm->cm_inst, clkdm->clkdm_offs);
22 return 0;
23}
24
25static int omap4_clkdm_wakeup(struct clockdomain *clkdm)
26{
27 omap4_cminst_clkdm_force_wakeup(clkdm->prcm_partition,
28 clkdm->cm_inst, clkdm->clkdm_offs);
29 return 0;
30}
31
Rajendra Nayak5cd19372011-02-25 16:06:48 -070032static void omap4_clkdm_allow_idle(struct clockdomain *clkdm)
33{
34 omap4_cminst_clkdm_enable_hwsup(clkdm->prcm_partition,
35 clkdm->cm_inst, clkdm->clkdm_offs);
36}
37
38static void omap4_clkdm_deny_idle(struct clockdomain *clkdm)
39{
40 omap4_cminst_clkdm_disable_hwsup(clkdm->prcm_partition,
41 clkdm->cm_inst, clkdm->clkdm_offs);
42}
43
Rajendra Nayak4da71ae2011-02-25 16:06:48 -070044static int omap4_clkdm_clk_enable(struct clockdomain *clkdm)
45{
46 bool hwsup = false;
47
48 hwsup = omap4_cminst_is_clkdm_in_hwsup(clkdm->prcm_partition,
49 clkdm->cm_inst, clkdm->clkdm_offs);
50
51 if (!hwsup)
52 clkdm_wakeup(clkdm);
53
54 return 0;
55}
56
57static int omap4_clkdm_clk_disable(struct clockdomain *clkdm)
58{
59 bool hwsup = false;
60
61 hwsup = omap4_cminst_is_clkdm_in_hwsup(clkdm->prcm_partition,
62 clkdm->cm_inst, clkdm->clkdm_offs);
63
64 if (!hwsup)
65 clkdm_sleep(clkdm);
66
67 return 0;
68}
69
Rajendra Nayak68b921a2011-02-25 16:06:47 -070070struct clkdm_ops omap4_clkdm_operations = {
71 .clkdm_sleep = omap4_clkdm_sleep,
72 .clkdm_wakeup = omap4_clkdm_wakeup,
Rajendra Nayak5cd19372011-02-25 16:06:48 -070073 .clkdm_allow_idle = omap4_clkdm_allow_idle,
74 .clkdm_deny_idle = omap4_clkdm_deny_idle,
Rajendra Nayak4da71ae2011-02-25 16:06:48 -070075 .clkdm_clk_enable = omap4_clkdm_clk_enable,
76 .clkdm_clk_disable = omap4_clkdm_clk_disable,
Rajendra Nayak68b921a2011-02-25 16:06:47 -070077};