[lantiq] prepare Makefile for 3.6
[openwrt.git] / target / linux / lantiq / files / arch / mips / lantiq / svip / pms.c
1 /************************************************************************
2  *
3  * Copyright (c) 2007
4  * Infineon Technologies AG
5  * St. Martin Strasse 53; 81669 Muenchen; Germany
6  *
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License
9  * as published by the Free Software Foundation; either version
10  * 2 of the License, or (at your option) any later version.
11  *
12  ************************************************************************/
13
14 #include <linux/module.h>
15 #include <linux/types.h>
16 #include <linux/kernel.h>
17 #include <linux/proc_fs.h>
18 #include <linux/init.h>
19 #include <asm/addrspace.h>
20
21 #include <base_reg.h>
22 #include <sys1_reg.h>
23 #include <sys2_reg.h>
24 #include <lantiq_soc.h>
25
26 static struct svip_reg_sys1 *const sys1 = (struct svip_reg_sys1 *)LTQ_SYS1_BASE;
27 static struct svip_reg_sys2 *const sys2 = (struct svip_reg_sys2 *)LTQ_SYS2_BASE;
28
29 void svip_sys1_clk_enable(u32 mask)
30 {
31         sys1_w32(sys1_r32(clksr) | mask, clkenr);
32         asm("sync;");
33 }
34 EXPORT_SYMBOL(svip_sys1_clk_enable);
35
36 int svip_sys1_clk_is_enabled(u32 mask)
37 {
38         return (sys1_r32(clksr) & mask) != 0;
39 }
40 EXPORT_SYMBOL(svip_sys1_clk_is_enabled);
41
42 void svip_sys2_clk_enable(u32 mask)
43 {
44         sys2_w32(sys2_r32(clksr) | mask, clkenr);
45         asm("sync;");
46 }
47 EXPORT_SYMBOL(svip_sys2_clk_enable);
48
49 int svip_sys2_clk_is_enabled(u32 mask)
50 {
51         return (sys2_r32(clksr) & mask) != 0;
52 }
53 EXPORT_SYMBOL(svip_sys2_clk_is_enabled);
54
55 int ltq_pms_read_procmem(char *buf, char **start, off_t offset,
56                          int count, int *eof, void *data)
57 {
58         long len = 0;
59         int t = 0;
60         u32 bit = 0;
61         u32 reg_tmp, bits_tmp;
62
63         len = sprintf(buf, "\nSVIP PMS Settings\n");
64         len = len + sprintf(buf + len,
65                             "              3         2         1         0\n");
66         len = len + sprintf(buf + len,
67                             "            210987654321098765432109876543210\n");
68         len = len + sprintf(buf + len,
69                             "---------------------------------------------\n");
70         len = len + sprintf(buf + len,
71                             "SYS1_CLKSR: ");
72         reg_tmp = sys1_r32(clksr);
73         bit = 0x80000000;
74         for (t = 31; t != -1; t--) {
75                 bits_tmp = (reg_tmp & bit) >> t;
76                 len = len + sprintf(buf + len, "%d", bits_tmp);
77                 bit = bit >> 1;
78         }
79         len = len + sprintf(buf + len, "\n\n");
80         len = len + sprintf(buf + len, "SYS2_CLKSR: ");
81         reg_tmp = sys2_r32(clksr);
82         bit = 0x80000000;
83         for (t = 31; t != -1; t--) {
84                 bits_tmp = (reg_tmp & bit) >> t;
85                 len = len + sprintf(buf + len, "%d", bits_tmp);
86                 bit = bit >> 1;
87         }
88         len = len + sprintf(buf + len, "\n\n");
89
90         *eof = 1;
91
92         return len;
93 }
94
95 int __init ltq_pms_init_proc(void)
96 {
97         return create_proc_read_entry("driver/ltq_pms", 0, NULL,
98                                       ltq_pms_read_procmem, NULL) == NULL;
99 }
100
101 module_init(ltq_pms_init_proc);