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