blob: ea1f3ffa97175ad9aba7ec23427356e0dbb72c82 [file] [log] [blame]
Ben Dooksa5030592008-10-21 14:06:43 +01001/* linux/arch/arm/plat-s3c/include/plat/clock.h
Linus Torvalds1da177e2005-04-16 15:20:36 -07002 *
3 * Copyright (c) 2004-2005 Simtec Electronics
4 * http://www.simtec.co.uk/products/SWLINUX/
5 * Written by Ben Dooks, <ben@simtec.co.uk>
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License version 2 as
9 * published by the Free Software Foundation.
10*/
11
Ben Dooksc3391e32008-10-21 14:06:37 +010012#include <linux/spinlock.h>
13
Linus Torvalds1da177e2005-04-16 15:20:36 -070014struct clk {
15 struct list_head list;
16 struct module *owner;
17 struct clk *parent;
18 const char *name;
19 int id;
Ben Dooks2a513ce2006-02-08 21:09:05 +000020 int usage;
Linus Torvalds1da177e2005-04-16 15:20:36 -070021 unsigned long rate;
22 unsigned long ctrlbit;
Ben Dooksd3468da2006-03-20 17:10:04 +000023
Linus Torvalds1da177e2005-04-16 15:20:36 -070024 int (*enable)(struct clk *, int enable);
Ben Dooks6e8908e2006-03-20 21:00:08 +000025 int (*set_rate)(struct clk *c, unsigned long rate);
Ben Dooks92b7eb82006-06-22 22:18:21 +010026 unsigned long (*get_rate)(struct clk *c);
Ben Dooks6e8908e2006-03-20 21:00:08 +000027 unsigned long (*round_rate)(struct clk *c, unsigned long rate);
Ben Dooksd3468da2006-03-20 17:10:04 +000028 int (*set_parent)(struct clk *c, struct clk *parent);
Linus Torvalds1da177e2005-04-16 15:20:36 -070029};
30
31/* other clocks which may be registered by board support */
32
33extern struct clk s3c24xx_dclk0;
34extern struct clk s3c24xx_dclk1;
35extern struct clk s3c24xx_clkout0;
36extern struct clk s3c24xx_clkout1;
37extern struct clk s3c24xx_uclk;
38
Ben Dooks36c64af2006-03-20 21:00:48 +000039extern struct clk clk_usb_bus;
40
Ben Dooks99c13852006-06-22 22:18:20 +010041/* core clock support */
42
43extern struct clk clk_f;
44extern struct clk clk_h;
45extern struct clk clk_p;
Ben Dooks513846f2006-06-24 21:21:29 +010046extern struct clk clk_mpll;
Ben Dooks99c13852006-06-22 22:18:20 +010047extern struct clk clk_upll;
Ben Dooks4b31d8b2008-10-21 14:07:00 +010048extern struct clk clk_epll;
Ben Dooks513846f2006-06-24 21:21:29 +010049extern struct clk clk_xtal;
Ben Dooks4b31d8b2008-10-21 14:07:00 +010050extern struct clk clk_ext;
51
52/* S3C64XX specific clocks */
53extern struct clk clk_27m;
54extern struct clk clk_48m;
Ben Dooks99c13852006-06-22 22:18:20 +010055
Linus Torvalds1da177e2005-04-16 15:20:36 -070056/* exports for arch/arm/mach-s3c2410
57 *
58 * Please DO NOT use these outside of arch/arm/mach-s3c2410
59*/
60
Ben Dooksc3391e32008-10-21 14:06:37 +010061extern spinlock_t clocks_lock;
Ben Dooks36c64af2006-03-20 21:00:48 +000062
Ben Dooks99c13852006-06-22 22:18:20 +010063extern int s3c2410_clkcon_enable(struct clk *clk, int enable);
64
Linus Torvalds1da177e2005-04-16 15:20:36 -070065extern int s3c24xx_register_clock(struct clk *clk);
Ben Dooksce89c202007-04-20 11:15:27 +010066extern int s3c24xx_register_clocks(struct clk **clk, int nr_clks);
Linus Torvalds1da177e2005-04-16 15:20:36 -070067
Ben Dookse4253822008-10-21 14:06:38 +010068extern int s3c24xx_register_baseclocks(unsigned long xtal);
69
Ben Dooks4b31d8b2008-10-21 14:07:00 +010070extern void s3c64xx_register_clocks(void);
71
Ben Dookse4253822008-10-21 14:06:38 +010072extern void s3c24xx_setup_clocks(unsigned long fclk,
73 unsigned long hclk,
74 unsigned long pclk);
75
76extern void s3c2410_setup_clocks(void);
77extern void s3c2412_setup_clocks(void);
78extern void s3c244x_setup_clocks(void);
79extern void s3c2443_setup_clocks(void);
80
Ben Dookscf18acf2008-10-21 14:07:02 +010081/* S3C64XX specific functions and clocks */
82
83extern int s3c64xx_sclk_ctrl(struct clk *clk, int enable);