1 /* 2 * Common Clock definitions for various kernel files 3 * 4 * Copyright 2007-2008 Analog Devices Inc. 5 * 6 * Licensed under the GPL-2 or later. 7 */ 8 9 #ifndef _BFIN_CLOCKS_H 10 #define _BFIN_CLOCKS_H 11 12 #include <asm/dpmc.h> 13 14 #ifdef CONFIG_CCLK_DIV_1 15 # define CONFIG_CCLK_ACT_DIV CCLK_DIV1 16 # define CONFIG_CCLK_DIV 1 17 #endif 18 19 #ifdef CONFIG_CCLK_DIV_2 20 # define CONFIG_CCLK_ACT_DIV CCLK_DIV2 21 # define CONFIG_CCLK_DIV 2 22 #endif 23 24 #ifdef CONFIG_CCLK_DIV_4 25 # define CONFIG_CCLK_ACT_DIV CCLK_DIV4 26 # define CONFIG_CCLK_DIV 4 27 #endif 28 29 #ifdef CONFIG_CCLK_DIV_8 30 # define CONFIG_CCLK_ACT_DIV CCLK_DIV8 31 # define CONFIG_CCLK_DIV 8 32 #endif 33 34 #ifndef CONFIG_PLL_BYPASS 35 # ifndef CONFIG_CLKIN_HALF 36 # define CONFIG_VCO_HZ (CONFIG_CLKIN_HZ * CONFIG_VCO_MULT) 37 # else 38 # define CONFIG_VCO_HZ ((CONFIG_CLKIN_HZ * CONFIG_VCO_MULT)/2) 39 # endif 40 41 # define CONFIG_CCLK_HZ (CONFIG_VCO_HZ/CONFIG_CCLK_DIV) 42 # define CONFIG_SCLK_HZ (CONFIG_VCO_HZ/CONFIG_SCLK_DIV) 43 44 #else 45 # define CONFIG_VCO_HZ (CONFIG_CLKIN_HZ) 46 # define CONFIG_CCLK_HZ (CONFIG_CLKIN_HZ) 47 # define CONFIG_SCLK_HZ (CONFIG_CLKIN_HZ) 48 # define CONFIG_VCO_MULT 0 49 #endif 50 51 #include <linux/clk.h> 52 53 struct clk_ops { 54 unsigned long (*get_rate)(struct clk *clk); 55 unsigned long (*round_rate)(struct clk *clk, unsigned long rate); 56 int (*set_rate)(struct clk *clk, unsigned long rate); 57 int (*enable)(struct clk *clk); 58 int (*disable)(struct clk *clk); 59 }; 60 61 struct clk { 62 struct clk *parent; 63 const char *name; 64 unsigned long rate; 65 spinlock_t lock; 66 u32 flags; 67 const struct clk_ops *ops; 68 void __iomem *reg; 69 u32 mask; 70 u32 shift; 71 }; 72 73 int clk_init(void); 74 #endif 75