Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
clock34xx.c
Go to the documentation of this file.
1 /*
2  * OMAP3-specific clock framework functions
3  *
4  * Copyright (C) 2007-2008 Texas Instruments, Inc.
5  * Copyright (C) 2007-2011 Nokia Corporation
6  *
7  * Paul Walmsley
8  * Jouni Högander
9  *
10  * Parts of this code are based on code written by
11  * Richard Woodruff, Tony Lindgren, Tuukka Tikkanen, Karthik Dasu,
12  * Russell King
13  *
14  * This program is free software; you can redistribute it and/or modify
15  * it under the terms of the GNU General Public License version 2 as
16  * published by the Free Software Foundation.
17  */
18 #undef DEBUG
19 
20 #include <linux/kernel.h>
21 #include <linux/clk.h>
22 #include <linux/io.h>
23 
24 #include <plat/clock.h>
25 
26 #include "clock.h"
27 #include "clock34xx.h"
28 #include "cm2xxx_3xxx.h"
29 #include "cm-regbits-34xx.h"
30 
42 static void omap3430es2_clk_ssi_find_idlest(struct clk *clk,
43  void __iomem **idlest_reg,
44  u8 *idlest_bit,
45  u8 *idlest_val)
46 {
47  u32 r;
48 
49  r = (((__force u32)clk->enable_reg & ~0xf0) | 0x20);
50  *idlest_reg = (__force void __iomem *)r;
51  *idlest_bit = OMAP3430ES2_ST_SSI_IDLE_SHIFT;
52  *idlest_val = OMAP34XX_CM_IDLEST_VAL;
53 }
54 
56  .enable = omap2_dflt_clk_enable,
57  .disable = omap2_dflt_clk_disable,
58  .find_idlest = omap3430es2_clk_ssi_find_idlest,
59  .find_companion = omap2_clk_dflt_find_companion,
60 };
61 
63  .enable = omap2_dflt_clk_enable,
64  .disable = omap2_dflt_clk_disable,
65  .find_idlest = omap3430es2_clk_ssi_find_idlest,
66  .find_companion = omap2_clk_dflt_find_companion,
67  .allow_idle = omap2_clkt_iclk_allow_idle,
68  .deny_idle = omap2_clkt_iclk_deny_idle,
69 };
70 
85 static void omap3430es2_clk_dss_usbhost_find_idlest(struct clk *clk,
86  void __iomem **idlest_reg,
87  u8 *idlest_bit,
88  u8 *idlest_val)
89 {
90  u32 r;
91 
92  r = (((__force u32)clk->enable_reg & ~0xf0) | 0x20);
93  *idlest_reg = (__force void __iomem *)r;
94  /* USBHOST_IDLE has same shift */
95  *idlest_bit = OMAP3430ES2_ST_DSS_IDLE_SHIFT;
96  *idlest_val = OMAP34XX_CM_IDLEST_VAL;
97 }
98 
100  .enable = omap2_dflt_clk_enable,
101  .disable = omap2_dflt_clk_disable,
102  .find_idlest = omap3430es2_clk_dss_usbhost_find_idlest,
103  .find_companion = omap2_clk_dflt_find_companion,
104 };
105 
107  .enable = omap2_dflt_clk_enable,
108  .disable = omap2_dflt_clk_disable,
109  .find_idlest = omap3430es2_clk_dss_usbhost_find_idlest,
110  .find_companion = omap2_clk_dflt_find_companion,
111  .allow_idle = omap2_clkt_iclk_allow_idle,
112  .deny_idle = omap2_clkt_iclk_deny_idle,
113 };
114 
126 static void omap3430es2_clk_hsotgusb_find_idlest(struct clk *clk,
127  void __iomem **idlest_reg,
128  u8 *idlest_bit,
129  u8 *idlest_val)
130 {
131  u32 r;
132 
133  r = (((__force u32)clk->enable_reg & ~0xf0) | 0x20);
134  *idlest_reg = (__force void __iomem *)r;
136  *idlest_val = OMAP34XX_CM_IDLEST_VAL;
137 }
138 
140  .enable = omap2_dflt_clk_enable,
141  .disable = omap2_dflt_clk_disable,
142  .find_idlest = omap3430es2_clk_hsotgusb_find_idlest,
143  .find_companion = omap2_clk_dflt_find_companion,
144 };
145 
147  .enable = omap2_dflt_clk_enable,
148  .disable = omap2_dflt_clk_disable,
149  .find_idlest = omap3430es2_clk_hsotgusb_find_idlest,
150  .find_companion = omap2_clk_dflt_find_companion,
151  .allow_idle = omap2_clkt_iclk_allow_idle,
152  .deny_idle = omap2_clkt_iclk_deny_idle,
153 };