]> Pileus Git - ~andy/linux/blob - drivers/clk/samsung/clk-pll.h
Merge branch 'clk-next-s3c64xx' into clk-next
[~andy/linux] / drivers / clk / samsung / clk-pll.h
1 /*
2  * Copyright (c) 2013 Samsung Electronics Co., Ltd.
3  * Copyright (c) 2013 Linaro Ltd.
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License version 2 as
7  * published by the Free Software Foundation.
8  *
9  * Common Clock Framework support for all PLL's in Samsung platforms
10 */
11
12 #ifndef __SAMSUNG_CLK_PLL_H
13 #define __SAMSUNG_CLK_PLL_H
14
15 enum samsung_pll_type {
16         pll_35xx,
17         pll_36xx,
18         pll_2550,
19         pll_2650,
20 };
21
22 #define PLL_35XX_RATE(_rate, _m, _p, _s)                        \
23         {                                                       \
24                 .rate   =       (_rate),                                \
25                 .mdiv   =       (_m),                           \
26                 .pdiv   =       (_p),                           \
27                 .sdiv   =       (_s),                           \
28         }
29
30 #define PLL_36XX_RATE(_rate, _m, _p, _s, _k)                    \
31         {                                                       \
32                 .rate   =       (_rate),                                \
33                 .mdiv   =       (_m),                           \
34                 .pdiv   =       (_p),                           \
35                 .sdiv   =       (_s),                           \
36                 .kdiv   =       (_k),                           \
37         }
38
39 /* NOTE: Rate table should be kept sorted in descending order. */
40
41 struct samsung_pll_rate_table {
42         unsigned int rate;
43         unsigned int pdiv;
44         unsigned int mdiv;
45         unsigned int sdiv;
46         unsigned int kdiv;
47 };
48
49 enum pll45xx_type {
50         pll_4500,
51         pll_4502,
52         pll_4508
53 };
54
55 enum pll46xx_type {
56         pll_4600,
57         pll_4650,
58         pll_4650c,
59 };
60
61 extern struct clk * __init samsung_clk_register_pll45xx(const char *name,
62                         const char *pname, const void __iomem *con_reg,
63                         enum pll45xx_type type);
64 extern struct clk * __init samsung_clk_register_pll46xx(const char *name,
65                         const char *pname, const void __iomem *con_reg,
66                         enum pll46xx_type type);
67 extern struct clk *samsung_clk_register_pll6552(const char *name,
68                         const char *pname, void __iomem *base);
69 extern struct clk *samsung_clk_register_pll6553(const char *name,
70                         const char *pname, void __iomem *base);
71 extern struct clk * __init samsung_clk_register_pll2550x(const char *name,
72                         const char *pname, const void __iomem *reg_base,
73                         const unsigned long offset);
74
75 #endif /* __SAMSUNG_CLK_PLL_H */