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 53struct 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 61struct 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 73int clk_init(void); 74#endif 75