| /* | |
| * Common Clock definitions for various kernel files | |
| * | |
| * Copyright 2007-2008 Analog Devices Inc. | |
| * | |
| * Licensed under the GPL-2 or later. | |
| */ | |
| #ifndef _BFIN_CLOCKS_H | |
| #define _BFIN_CLOCKS_H | |
| #include <asm/dpmc.h> | |
| #ifdef CONFIG_CCLK_DIV_1 | |
| # define CONFIG_CCLK_ACT_DIV CCLK_DIV1 | |
| # define CONFIG_CCLK_DIV 1 | |
| #endif | |
| #ifdef CONFIG_CCLK_DIV_2 | |
| # define CONFIG_CCLK_ACT_DIV CCLK_DIV2 | |
| # define CONFIG_CCLK_DIV 2 | |
| #endif | |
| #ifdef CONFIG_CCLK_DIV_4 | |
| # define CONFIG_CCLK_ACT_DIV CCLK_DIV4 | |
| # define CONFIG_CCLK_DIV 4 | |
| #endif | |
| #ifdef CONFIG_CCLK_DIV_8 | |
| # define CONFIG_CCLK_ACT_DIV CCLK_DIV8 | |
| # define CONFIG_CCLK_DIV 8 | |
| #endif | |
| #ifndef CONFIG_PLL_BYPASS | |
| # ifndef CONFIG_CLKIN_HALF | |
| # define CONFIG_VCO_HZ (CONFIG_CLKIN_HZ * CONFIG_VCO_MULT) | |
| # else | |
| # define CONFIG_VCO_HZ ((CONFIG_CLKIN_HZ * CONFIG_VCO_MULT)/2) | |
| # endif | |
| # define CONFIG_CCLK_HZ (CONFIG_VCO_HZ/CONFIG_CCLK_DIV) | |
| # define CONFIG_SCLK_HZ (CONFIG_VCO_HZ/CONFIG_SCLK_DIV) | |
| #else | |
| # define CONFIG_VCO_HZ (CONFIG_CLKIN_HZ) | |
| # define CONFIG_CCLK_HZ (CONFIG_CLKIN_HZ) | |
| # define CONFIG_SCLK_HZ (CONFIG_CLKIN_HZ) | |
| # define CONFIG_VCO_MULT 0 | |
| #endif | |
| #include <linux/clk.h> | |
| struct clk_ops { | |
| unsigned long (*get_rate)(struct clk *clk); | |
| unsigned long (*round_rate)(struct clk *clk, unsigned long rate); | |
| int (*set_rate)(struct clk *clk, unsigned long rate); | |
| int (*enable)(struct clk *clk); | |
| int (*disable)(struct clk *clk); | |
| }; | |
| struct clk { | |
| struct clk *parent; | |
| const char *name; | |
| unsigned long rate; | |
| spinlock_t lock; | |
| u32 flags; | |
| const struct clk_ops *ops; | |
| void __iomem *reg; | |
| u32 mask; | |
| u32 shift; | |
| }; | |
| int clk_init(void); | |
| #endif |