| /* |
| * 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 |