1cd27e485410aa7e7464b0126d968fe8c2a5c045bLinus Walleij/* 2cd27e485410aa7e7464b0126d968fe8c2a5c045bLinus Walleij * arch/arm/mach-u300/include/mach/clock.h 3cd27e485410aa7e7464b0126d968fe8c2a5c045bLinus Walleij * 4cd27e485410aa7e7464b0126d968fe8c2a5c045bLinus Walleij * Copyright (C) 2004 - 2005 Nokia corporation 5cd27e485410aa7e7464b0126d968fe8c2a5c045bLinus Walleij * Written by Tuukka Tikkanen <tuukka.tikkanen@elektrobit.com> 6cd27e485410aa7e7464b0126d968fe8c2a5c045bLinus Walleij * Based on clocks.h by Tony Lindgren, Gordon McNutt and RidgeRun, Inc 7cd27e485410aa7e7464b0126d968fe8c2a5c045bLinus Walleij * Copyright (C) 2007-2009 ST-Ericsson AB 8cd27e485410aa7e7464b0126d968fe8c2a5c045bLinus Walleij * Adopted to ST-Ericsson U300 platforms by 9cd27e485410aa7e7464b0126d968fe8c2a5c045bLinus Walleij * Jonas Aaberg <jonas.aberg@stericsson.com> 10cd27e485410aa7e7464b0126d968fe8c2a5c045bLinus Walleij * 11cd27e485410aa7e7464b0126d968fe8c2a5c045bLinus Walleij * This program is free software; you can redistribute it and/or modify 12cd27e485410aa7e7464b0126d968fe8c2a5c045bLinus Walleij * it under the terms of the GNU General Public License version 2 as 13cd27e485410aa7e7464b0126d968fe8c2a5c045bLinus Walleij * published by the Free Software Foundation. 14cd27e485410aa7e7464b0126d968fe8c2a5c045bLinus Walleij * 15cd27e485410aa7e7464b0126d968fe8c2a5c045bLinus Walleij */ 16cd27e485410aa7e7464b0126d968fe8c2a5c045bLinus Walleij 17cd27e485410aa7e7464b0126d968fe8c2a5c045bLinus Walleij#ifndef __MACH_CLOCK_H 18cd27e485410aa7e7464b0126d968fe8c2a5c045bLinus Walleij#define __MACH_CLOCK_H 19cd27e485410aa7e7464b0126d968fe8c2a5c045bLinus Walleij 20cd27e485410aa7e7464b0126d968fe8c2a5c045bLinus Walleij#include <linux/clk.h> 21cd27e485410aa7e7464b0126d968fe8c2a5c045bLinus Walleij 22cd27e485410aa7e7464b0126d968fe8c2a5c045bLinus Walleijstruct clk { 23cd27e485410aa7e7464b0126d968fe8c2a5c045bLinus Walleij struct list_head node; 24cd27e485410aa7e7464b0126d968fe8c2a5c045bLinus Walleij struct module *owner; 25cd27e485410aa7e7464b0126d968fe8c2a5c045bLinus Walleij struct device *dev; 26cd27e485410aa7e7464b0126d968fe8c2a5c045bLinus Walleij const char *name; 27cd27e485410aa7e7464b0126d968fe8c2a5c045bLinus Walleij struct clk *parent; 28cd27e485410aa7e7464b0126d968fe8c2a5c045bLinus Walleij 29cd27e485410aa7e7464b0126d968fe8c2a5c045bLinus Walleij spinlock_t lock; 30cd27e485410aa7e7464b0126d968fe8c2a5c045bLinus Walleij unsigned long rate; 31cd27e485410aa7e7464b0126d968fe8c2a5c045bLinus Walleij bool reset; 32cd27e485410aa7e7464b0126d968fe8c2a5c045bLinus Walleij __u16 clk_val; 33cd27e485410aa7e7464b0126d968fe8c2a5c045bLinus Walleij __s8 usecount; 346075e9df471e35f2ebf4c73c95c304d0473bd4b2Linus Walleij void __iomem * res_reg; 35cd27e485410aa7e7464b0126d968fe8c2a5c045bLinus Walleij __u16 res_mask; 36cd27e485410aa7e7464b0126d968fe8c2a5c045bLinus Walleij 37cd27e485410aa7e7464b0126d968fe8c2a5c045bLinus Walleij bool hw_ctrld; 38cd27e485410aa7e7464b0126d968fe8c2a5c045bLinus Walleij 39cd27e485410aa7e7464b0126d968fe8c2a5c045bLinus Walleij void (*recalc) (struct clk *); 40cd27e485410aa7e7464b0126d968fe8c2a5c045bLinus Walleij int (*set_rate) (struct clk *, unsigned long); 41cd27e485410aa7e7464b0126d968fe8c2a5c045bLinus Walleij unsigned long (*get_rate) (struct clk *); 42cd27e485410aa7e7464b0126d968fe8c2a5c045bLinus Walleij unsigned long (*round_rate) (struct clk *, unsigned long); 43cd27e485410aa7e7464b0126d968fe8c2a5c045bLinus Walleij void (*init) (struct clk *); 44cd27e485410aa7e7464b0126d968fe8c2a5c045bLinus Walleij void (*enable) (struct clk *); 45cd27e485410aa7e7464b0126d968fe8c2a5c045bLinus Walleij void (*disable) (struct clk *); 46cd27e485410aa7e7464b0126d968fe8c2a5c045bLinus Walleij}; 47cd27e485410aa7e7464b0126d968fe8c2a5c045bLinus Walleij 48379aae5d6c3d8d9751d85a8022e68a90df13a7aeLinus Walleijint u300_clock_init(void); 49cd27e485410aa7e7464b0126d968fe8c2a5c045bLinus Walleij 50cd27e485410aa7e7464b0126d968fe8c2a5c045bLinus Walleij#endif 51