Merge master.kernel.org:/pub/scm/linux/kernel/git/lethal/genesis-2.6 into devel-stable
[pandora-kernel.git] / arch / arm / mach-tegra / clock.h
index af7c70e..94fd859 100644 (file)
 #define DIV_U71                        (1 << 1)
 #define DIV_U71_FIXED          (1 << 2)
 #define DIV_2                  (1 << 3)
-#define PLL_FIXED              (1 << 4)
-#define PLL_HAS_CPCON          (1 << 5)
-#define MUX                    (1 << 6)
-#define PLLD                   (1 << 7)
-#define PERIPH_NO_RESET                (1 << 8)
-#define PERIPH_NO_ENB          (1 << 9)
-#define PERIPH_EMC_ENB         (1 << 10)
-#define PERIPH_MANUAL_RESET    (1 << 11)
-#define PLL_ALT_MISC_REG       (1 << 12)
+#define DIV_U16                        (1 << 4)
+#define PLL_FIXED              (1 << 5)
+#define PLL_HAS_CPCON          (1 << 6)
+#define MUX                    (1 << 7)
+#define PLLD                   (1 << 8)
+#define PERIPH_NO_RESET                (1 << 9)
+#define PERIPH_NO_ENB          (1 << 10)
+#define PERIPH_EMC_ENB         (1 << 11)
+#define PERIPH_MANUAL_RESET    (1 << 12)
+#define PLL_ALT_MISC_REG       (1 << 13)
+#define PLLU                   (1 << 14)
 #define ENABLE_ON_INIT         (1 << 28)
 
 struct clk;
+struct regulator;
+
+struct dvfs_table {
+       unsigned long rate;
+       int millivolts;
+};
+
+struct dvfs_process_id_table {
+       int process_id;
+       struct dvfs_table *table;
+};
+
+
+struct dvfs {
+       struct regulator *reg;
+       struct dvfs_table *table;
+       int max_millivolts;
+
+       int process_id_table_length;
+       const char *reg_id;
+       bool cpu;
+       struct dvfs_process_id_table process_id_table[];
+};
 
 struct clk_mux_sel {
        struct clk      *input;
@@ -58,12 +83,9 @@ struct clk_ops {
        void            (*init)(struct clk *);
        int             (*enable)(struct clk *);
        void            (*disable)(struct clk *);
-       void            (*recalc)(struct clk *);
        int             (*set_parent)(struct clk *, struct clk *);
        int             (*set_rate)(struct clk *, unsigned long);
-       unsigned long   (*get_rate)(struct clk *);
        long            (*round_rate)(struct clk *, unsigned long);
-       unsigned long   (*recalculate_rate)(struct clk *);
 };
 
 enum clk_state {
@@ -85,6 +107,7 @@ struct clk {
        struct clk                      *parent;
        struct clk_lookup               lookup;
        unsigned long                   rate;
+       unsigned long                   max_rate;
        u32                             flags;
        u32                             refcnt;
        const char                      *name;
@@ -103,10 +126,6 @@ struct clk {
        unsigned long                   cf_max;
        unsigned long                   vco_min;
        unsigned long                   vco_max;
-       u32                             m;
-       u32                             n;
-       u32                             p;
-       u32                             cpcon;
        const struct clk_pll_table      *pll_table;
 
        /* DIV */
@@ -117,6 +136,12 @@ struct clk {
        const struct clk_mux_sel        *inputs;
        u32                             sel;
        u32                             reg_mask;
+
+       /* Virtual cpu clock */
+       struct clk                      *main;
+       struct clk                      *backup;
+
+       struct dvfs                     *dvfs;
 };
 
 
@@ -141,6 +166,7 @@ unsigned long clk_measure_input_freq(void);
 void clk_disable_locked(struct clk *c);
 int clk_enable_locked(struct clk *c);
 int clk_set_parent_locked(struct clk *c, struct clk *parent);
+int clk_set_rate_locked(struct clk *c, unsigned long rate);
 int clk_reparent(struct clk *c, struct clk *parent);
 void tegra_clk_init_from_table(struct tegra_clk_init_table *table);