xref: /openbmc/linux/arch/arm/mach-omap2/control.c (revision 69d88a00a240fbed07fb6943c862ea3188e9097d)
1*69d88a00SPaul Walmsley /*
2*69d88a00SPaul Walmsley  * OMAP2/3 System Control Module register access
3*69d88a00SPaul Walmsley  *
4*69d88a00SPaul Walmsley  * Copyright (C) 2007 Texas Instruments, Inc.
5*69d88a00SPaul Walmsley  * Copyright (C) 2007 Nokia Corporation
6*69d88a00SPaul Walmsley  *
7*69d88a00SPaul Walmsley  * Written by Paul Walmsley
8*69d88a00SPaul Walmsley  *
9*69d88a00SPaul Walmsley  * This program is free software; you can redistribute it and/or modify
10*69d88a00SPaul Walmsley  * it under the terms of the GNU General Public License version 2 as
11*69d88a00SPaul Walmsley  * published by the Free Software Foundation.
12*69d88a00SPaul Walmsley  */
13*69d88a00SPaul Walmsley #undef DEBUG
14*69d88a00SPaul Walmsley 
15*69d88a00SPaul Walmsley #include <linux/kernel.h>
16*69d88a00SPaul Walmsley 
17*69d88a00SPaul Walmsley #include <asm/io.h>
18*69d88a00SPaul Walmsley 
19*69d88a00SPaul Walmsley #include <asm/arch/control.h>
20*69d88a00SPaul Walmsley 
21*69d88a00SPaul Walmsley static u32 omap2_ctrl_base;
22*69d88a00SPaul Walmsley 
23*69d88a00SPaul Walmsley #define OMAP_CTRL_REGADDR(reg)	(void __iomem *)IO_ADDRESS(omap2_ctrl_base \
24*69d88a00SPaul Walmsley 								+ (reg))
25*69d88a00SPaul Walmsley 
26*69d88a00SPaul Walmsley void omap_ctrl_base_set(u32 base)
27*69d88a00SPaul Walmsley {
28*69d88a00SPaul Walmsley 	omap2_ctrl_base = base;
29*69d88a00SPaul Walmsley }
30*69d88a00SPaul Walmsley 
31*69d88a00SPaul Walmsley u32 omap_ctrl_base_get(void)
32*69d88a00SPaul Walmsley {
33*69d88a00SPaul Walmsley 	return omap2_ctrl_base;
34*69d88a00SPaul Walmsley }
35*69d88a00SPaul Walmsley 
36*69d88a00SPaul Walmsley u8 omap_ctrl_readb(u16 offset)
37*69d88a00SPaul Walmsley {
38*69d88a00SPaul Walmsley 	return __raw_readb(OMAP_CTRL_REGADDR(offset));
39*69d88a00SPaul Walmsley }
40*69d88a00SPaul Walmsley 
41*69d88a00SPaul Walmsley u16 omap_ctrl_readw(u16 offset)
42*69d88a00SPaul Walmsley {
43*69d88a00SPaul Walmsley 	return __raw_readw(OMAP_CTRL_REGADDR(offset));
44*69d88a00SPaul Walmsley }
45*69d88a00SPaul Walmsley 
46*69d88a00SPaul Walmsley u32 omap_ctrl_readl(u16 offset)
47*69d88a00SPaul Walmsley {
48*69d88a00SPaul Walmsley 	return __raw_readl(OMAP_CTRL_REGADDR(offset));
49*69d88a00SPaul Walmsley }
50*69d88a00SPaul Walmsley 
51*69d88a00SPaul Walmsley void omap_ctrl_writeb(u8 val, u16 offset)
52*69d88a00SPaul Walmsley {
53*69d88a00SPaul Walmsley 	pr_debug("omap_ctrl_writeb: writing 0x%0x to 0x%0x\n", val,
54*69d88a00SPaul Walmsley 		 (u32)OMAP_CTRL_REGADDR(offset));
55*69d88a00SPaul Walmsley 
56*69d88a00SPaul Walmsley 	__raw_writeb(val, OMAP_CTRL_REGADDR(offset));
57*69d88a00SPaul Walmsley }
58*69d88a00SPaul Walmsley 
59*69d88a00SPaul Walmsley void omap_ctrl_writew(u16 val, u16 offset)
60*69d88a00SPaul Walmsley {
61*69d88a00SPaul Walmsley 	pr_debug("omap_ctrl_writew: writing 0x%0x to 0x%0x\n", val,
62*69d88a00SPaul Walmsley 		 (u32)OMAP_CTRL_REGADDR(offset));
63*69d88a00SPaul Walmsley 
64*69d88a00SPaul Walmsley 	__raw_writew(val, OMAP_CTRL_REGADDR(offset));
65*69d88a00SPaul Walmsley }
66*69d88a00SPaul Walmsley 
67*69d88a00SPaul Walmsley void omap_ctrl_writel(u32 val, u16 offset)
68*69d88a00SPaul Walmsley {
69*69d88a00SPaul Walmsley 	pr_debug("omap_ctrl_writel: writing 0x%0x to 0x%0x\n", val,
70*69d88a00SPaul Walmsley 		 (u32)OMAP_CTRL_REGADDR(offset));
71*69d88a00SPaul Walmsley 
72*69d88a00SPaul Walmsley 	__raw_writel(val, OMAP_CTRL_REGADDR(offset));
73*69d88a00SPaul Walmsley }
74*69d88a00SPaul Walmsley 
75