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