This commit was manufactured by cvs2svn to create branch 'vserver'.
[linux-2.6.git] / arch / arm / mach-omap / clock.h
1 /*
2  *  linux/arch/arm/mach-omap/clock.h
3  *
4  *  Copyright (C) 2004 Nokia corporation
5  *  Written by Tuukka Tikkanen <tuukka.tikkanen@elektrobit.com>
6  *  Based on clocks.h by Tony Lindgren, Gordon McNutt and RidgeRun, Inc
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License version 2 as
10  * published by the Free Software Foundation.
11  */
12
13 #ifndef __ARCH_ARM_OMAP_CLOCK_H
14 #define __ARCH_ARM_OMAP_CLOCK_H
15
16 struct module;
17
18 struct clk {
19         struct list_head        node;
20         struct module           *owner;
21         const char              *name;
22         struct clk              *parent;
23         unsigned long           rate;
24         __s8                    usecount;
25         __u8                    flags;
26         __u32                   enable_reg;
27         __u8                    enable_bit;
28         __u8                    rate_offset;
29         void                    (*recalc)(struct clk *);
30         int                     (*set_rate)(unsigned long);
31         long                    (*round_rate)(unsigned long);
32 };
33
34
35 struct mpu_rate {
36         unsigned long           rate;
37         unsigned long           xtal;
38         unsigned long           pll_rate;
39         __u16                   ckctl_val;
40         __u16                   dpllctl_val;
41 };
42
43
44 /* Clock flags */
45 #define RATE_CKCTL              1
46 #define RATE_FIXED              2
47 #define RATE_PROPAGATES         4
48 #define VIRTUAL_CLOCK           8
49 #define ALWAYS_ENABLED          16
50 #define ENABLE_REG_32BIT        32
51 #define CLOCK_IN_OMAP16XX       64
52 #define CLOCK_IN_OMAP1510       128
53
54 /* ARM_CKCTL bit shifts */
55 #define CKCTL_PERDIV_OFFSET     0
56 #define CKCTL_LCDDIV_OFFSET     2
57 #define CKCTL_ARMDIV_OFFSET     4
58 #define CKCTL_DSPDIV_OFFSET     6
59 #define CKCTL_TCDIV_OFFSET      8
60 #define CKCTL_DSPMMUDIV_OFFSET  10
61 /*#define ARM_TIMXO             12*/
62 #define EN_DSPCK                13
63 /*#define ARM_INTHCK_SEL        14*/ /* Divide-by-2 for mpu inth_ck */
64
65 /* ARM_IDLECT1 bit shifts */
66 /*#define IDLWDT_ARM    0*/
67 /*#define IDLXORP_ARM   1*/
68 /*#define IDLPER_ARM    2*/
69 /*#define IDLLCD_ARM    3*/
70 /*#define IDLLB_ARM     4*/
71 /*#define IDLHSAB_ARM   5*/
72 /*#define IDLIF_ARM     6*/
73 /*#define IDLDPLL_ARM   7*/
74 /*#define IDLAPI_ARM    8*/
75 /*#define IDLTIM_ARM    9*/
76 /*#define SETARM_IDLE   11*/
77
78 /* ARM_IDLECT2 bit shifts */
79 #define EN_WDTCK        0
80 #define EN_XORPCK       1
81 #define EN_PERCK        2
82 #define EN_LCDCK        3
83 #define EN_LBCK         4 /* Not on 1610/1710 */
84 /*#define EN_HSABCK     5*/
85 #define EN_APICK        6
86 #define EN_TIMCK        7
87 #define DMACK_REQ       8
88 #define EN_GPIOCK       9 /* Not on 1610/1710 */
89 /*#define EN_LBFREECK   10*/
90 #define EN_CKOUT_ARM    11
91
92 /* ARM_IDLECT3 bit shifts */
93 #define EN_OCPI_CK      0
94 #define EN_TC1_CK       2
95 #define EN_TC2_CK       4
96
97 /* Various register defines for clock controls scattered around OMAP chip */
98 #define USB_MCLK_EN             4       /* In ULPD_CLKC_CTRL */
99 #define USB_HOST_HHC_UHOST_EN   9       /* In MOD_CONF_CTRL_0 */
100
101
102 int clk_register(struct clk *clk);
103 void clk_unregister(struct clk *clk);
104 int clk_init(void);
105
106 #endif