1570a0bb82f0b5c2c6324153010e72c3f0c26a7a3Lars-Peter Clausen/* 2570a0bb82f0b5c2c6324153010e72c3f0c26a7a3Lars-Peter Clausen * Copyright (C) 2010, Lars-Peter Clausen <lars@metafoo.de> 3570a0bb82f0b5c2c6324153010e72c3f0c26a7a3Lars-Peter Clausen * JZ4740 SoC clock support 4570a0bb82f0b5c2c6324153010e72c3f0c26a7a3Lars-Peter Clausen * 5570a0bb82f0b5c2c6324153010e72c3f0c26a7a3Lars-Peter Clausen * This program is free software; you can redistribute it and/or modify it 6570a0bb82f0b5c2c6324153010e72c3f0c26a7a3Lars-Peter Clausen * under the terms of the GNU General Public License as published by the 7570a0bb82f0b5c2c6324153010e72c3f0c26a7a3Lars-Peter Clausen * Free Software Foundation; either version 2 of the License, or (at your 8570a0bb82f0b5c2c6324153010e72c3f0c26a7a3Lars-Peter Clausen * option) any later version. 9570a0bb82f0b5c2c6324153010e72c3f0c26a7a3Lars-Peter Clausen * 10570a0bb82f0b5c2c6324153010e72c3f0c26a7a3Lars-Peter Clausen * You should have received a copy of the GNU General Public License along 11570a0bb82f0b5c2c6324153010e72c3f0c26a7a3Lars-Peter Clausen * with this program; if not, write to the Free Software Foundation, Inc., 12570a0bb82f0b5c2c6324153010e72c3f0c26a7a3Lars-Peter Clausen * 675 Mass Ave, Cambridge, MA 02139, USA. 13570a0bb82f0b5c2c6324153010e72c3f0c26a7a3Lars-Peter Clausen * 14570a0bb82f0b5c2c6324153010e72c3f0c26a7a3Lars-Peter Clausen */ 15570a0bb82f0b5c2c6324153010e72c3f0c26a7a3Lars-Peter Clausen 16570a0bb82f0b5c2c6324153010e72c3f0c26a7a3Lars-Peter Clausen#ifndef __MIPS_JZ4740_CLOCK_H__ 17570a0bb82f0b5c2c6324153010e72c3f0c26a7a3Lars-Peter Clausen#define __MIPS_JZ4740_CLOCK_H__ 18570a0bb82f0b5c2c6324153010e72c3f0c26a7a3Lars-Peter Clausen 19570a0bb82f0b5c2c6324153010e72c3f0c26a7a3Lars-Peter Clausen#include <linux/list.h> 20570a0bb82f0b5c2c6324153010e72c3f0c26a7a3Lars-Peter Clausen 21570a0bb82f0b5c2c6324153010e72c3f0c26a7a3Lars-Peter Clausenstruct jz4740_clock_board_data { 22570a0bb82f0b5c2c6324153010e72c3f0c26a7a3Lars-Peter Clausen unsigned long ext_rate; 23570a0bb82f0b5c2c6324153010e72c3f0c26a7a3Lars-Peter Clausen unsigned long rtc_rate; 24570a0bb82f0b5c2c6324153010e72c3f0c26a7a3Lars-Peter Clausen}; 25570a0bb82f0b5c2c6324153010e72c3f0c26a7a3Lars-Peter Clausen 26570a0bb82f0b5c2c6324153010e72c3f0c26a7a3Lars-Peter Clausenextern struct jz4740_clock_board_data jz4740_clock_bdata; 27570a0bb82f0b5c2c6324153010e72c3f0c26a7a3Lars-Peter Clausen 28570a0bb82f0b5c2c6324153010e72c3f0c26a7a3Lars-Peter Clausenvoid jz4740_clock_suspend(void); 29570a0bb82f0b5c2c6324153010e72c3f0c26a7a3Lars-Peter Clausenvoid jz4740_clock_resume(void); 30570a0bb82f0b5c2c6324153010e72c3f0c26a7a3Lars-Peter Clausen 31570a0bb82f0b5c2c6324153010e72c3f0c26a7a3Lars-Peter Clausenstruct clk; 32570a0bb82f0b5c2c6324153010e72c3f0c26a7a3Lars-Peter Clausen 33570a0bb82f0b5c2c6324153010e72c3f0c26a7a3Lars-Peter Clausenstruct clk_ops { 34570a0bb82f0b5c2c6324153010e72c3f0c26a7a3Lars-Peter Clausen unsigned long (*get_rate)(struct clk *clk); 35570a0bb82f0b5c2c6324153010e72c3f0c26a7a3Lars-Peter Clausen unsigned long (*round_rate)(struct clk *clk, unsigned long rate); 36570a0bb82f0b5c2c6324153010e72c3f0c26a7a3Lars-Peter Clausen int (*set_rate)(struct clk *clk, unsigned long rate); 37570a0bb82f0b5c2c6324153010e72c3f0c26a7a3Lars-Peter Clausen int (*enable)(struct clk *clk); 38570a0bb82f0b5c2c6324153010e72c3f0c26a7a3Lars-Peter Clausen int (*disable)(struct clk *clk); 39570a0bb82f0b5c2c6324153010e72c3f0c26a7a3Lars-Peter Clausen int (*is_enabled)(struct clk *clk); 40570a0bb82f0b5c2c6324153010e72c3f0c26a7a3Lars-Peter Clausen 41570a0bb82f0b5c2c6324153010e72c3f0c26a7a3Lars-Peter Clausen int (*set_parent)(struct clk *clk, struct clk *parent); 42570a0bb82f0b5c2c6324153010e72c3f0c26a7a3Lars-Peter Clausen 43570a0bb82f0b5c2c6324153010e72c3f0c26a7a3Lars-Peter Clausen}; 44570a0bb82f0b5c2c6324153010e72c3f0c26a7a3Lars-Peter Clausen 45570a0bb82f0b5c2c6324153010e72c3f0c26a7a3Lars-Peter Clausenstruct clk { 46570a0bb82f0b5c2c6324153010e72c3f0c26a7a3Lars-Peter Clausen const char *name; 47570a0bb82f0b5c2c6324153010e72c3f0c26a7a3Lars-Peter Clausen struct clk *parent; 48570a0bb82f0b5c2c6324153010e72c3f0c26a7a3Lars-Peter Clausen 49570a0bb82f0b5c2c6324153010e72c3f0c26a7a3Lars-Peter Clausen uint32_t gate_bit; 50570a0bb82f0b5c2c6324153010e72c3f0c26a7a3Lars-Peter Clausen 51570a0bb82f0b5c2c6324153010e72c3f0c26a7a3Lars-Peter Clausen const struct clk_ops *ops; 52570a0bb82f0b5c2c6324153010e72c3f0c26a7a3Lars-Peter Clausen 53570a0bb82f0b5c2c6324153010e72c3f0c26a7a3Lars-Peter Clausen struct list_head list; 54570a0bb82f0b5c2c6324153010e72c3f0c26a7a3Lars-Peter Clausen 55570a0bb82f0b5c2c6324153010e72c3f0c26a7a3Lars-Peter Clausen#ifdef CONFIG_DEBUG_FS 56570a0bb82f0b5c2c6324153010e72c3f0c26a7a3Lars-Peter Clausen struct dentry *debugfs_entry; 57570a0bb82f0b5c2c6324153010e72c3f0c26a7a3Lars-Peter Clausen struct dentry *debugfs_parent_entry; 58570a0bb82f0b5c2c6324153010e72c3f0c26a7a3Lars-Peter Clausen#endif 59570a0bb82f0b5c2c6324153010e72c3f0c26a7a3Lars-Peter Clausen 60570a0bb82f0b5c2c6324153010e72c3f0c26a7a3Lars-Peter Clausen}; 61570a0bb82f0b5c2c6324153010e72c3f0c26a7a3Lars-Peter Clausen 62570a0bb82f0b5c2c6324153010e72c3f0c26a7a3Lars-Peter Clausen#define JZ4740_CLK_NOT_GATED ((uint32_t)-1) 63570a0bb82f0b5c2c6324153010e72c3f0c26a7a3Lars-Peter Clausen 64570a0bb82f0b5c2c6324153010e72c3f0c26a7a3Lars-Peter Clausenint clk_is_enabled(struct clk *clk); 65570a0bb82f0b5c2c6324153010e72c3f0c26a7a3Lars-Peter Clausen 66570a0bb82f0b5c2c6324153010e72c3f0c26a7a3Lars-Peter Clausen#ifdef CONFIG_DEBUG_FS 67570a0bb82f0b5c2c6324153010e72c3f0c26a7a3Lars-Peter Clausenvoid jz4740_clock_debugfs_init(void); 68570a0bb82f0b5c2c6324153010e72c3f0c26a7a3Lars-Peter Clausenvoid jz4740_clock_debugfs_add_clk(struct clk *clk); 69570a0bb82f0b5c2c6324153010e72c3f0c26a7a3Lars-Peter Clausenvoid jz4740_clock_debugfs_update_parent(struct clk *clk); 70570a0bb82f0b5c2c6324153010e72c3f0c26a7a3Lars-Peter Clausen#else 71570a0bb82f0b5c2c6324153010e72c3f0c26a7a3Lars-Peter Clausenstatic inline void jz4740_clock_debugfs_init(void) {}; 72570a0bb82f0b5c2c6324153010e72c3f0c26a7a3Lars-Peter Clausenstatic inline void jz4740_clock_debugfs_add_clk(struct clk *clk) {}; 73570a0bb82f0b5c2c6324153010e72c3f0c26a7a3Lars-Peter Clausenstatic inline void jz4740_clock_debugfs_update_parent(struct clk *clk) {}; 74570a0bb82f0b5c2c6324153010e72c3f0c26a7a3Lars-Peter Clausen#endif 75570a0bb82f0b5c2c6324153010e72c3f0c26a7a3Lars-Peter Clausen 76570a0bb82f0b5c2c6324153010e72c3f0c26a7a3Lars-Peter Clausen#endif 77