diff options
author | Gabor Juhos <juhosg@openwrt.org> | 2011-09-21 11:47:50 +0000 |
---|---|---|
committer | Gabor Juhos <juhosg@openwrt.org> | 2011-09-21 11:47:50 +0000 |
commit | 91340d8af70b41c3387677b3410b889e0a3c40d7 (patch) | |
tree | 384084a512a7003a0596e104ef076aea6addc7e1 /target | |
parent | 9fa51d5c38856fc8ae4805a07279a9a1c1af13b9 (diff) | |
download | openwrt-91340d8af70b41c3387677b3410b889e0a3c40d7.tar.gz openwrt-91340d8af70b41c3387677b3410b889e0a3c40d7.tar.bz2 openwrt-91340d8af70b41c3387677b3410b889e0a3c40d7.zip |
ar71xx: add ar71xx_device_reset_rmw helper
SVN-Revision: 28275
Diffstat (limited to 'target')
-rw-r--r-- | target/linux/ar71xx/files/arch/mips/ar71xx/ar71xx.c | 48 | ||||
-rw-r--r-- | target/linux/ar71xx/files/arch/mips/include/asm/mach-ar71xx/ar71xx.h | 1 |
2 files changed, 49 insertions, 0 deletions
diff --git a/target/linux/ar71xx/files/arch/mips/ar71xx/ar71xx.c b/target/linux/ar71xx/files/arch/mips/ar71xx/ar71xx.c index ef956fbf4d..93cbe5331f 100644 --- a/target/linux/ar71xx/files/arch/mips/ar71xx/ar71xx.c +++ b/target/linux/ar71xx/files/arch/mips/ar71xx/ar71xx.c @@ -153,6 +153,54 @@ void ar71xx_device_start(u32 mask) } EXPORT_SYMBOL_GPL(ar71xx_device_start); +void ar71xx_device_reset_rmw(u32 clear, u32 set) +{ + unsigned long flags; + unsigned int reg; + u32 t; + + switch (ar71xx_soc) { + case AR71XX_SOC_AR7130: + case AR71XX_SOC_AR7141: + case AR71XX_SOC_AR7161: + reg = AR71XX_RESET_REG_RESET_MODULE; + break; + + case AR71XX_SOC_AR7240: + case AR71XX_SOC_AR7241: + case AR71XX_SOC_AR7242: + reg = AR724X_RESET_REG_RESET_MODULE; + break; + + case AR71XX_SOC_AR9130: + case AR71XX_SOC_AR9132: + reg = AR91XX_RESET_REG_RESET_MODULE; + break; + + case AR71XX_SOC_AR9330: + case AR71XX_SOC_AR9331: + reg = AR933X_RESET_REG_RESET_MODULE; + break; + + case AR71XX_SOC_AR9341: + case AR71XX_SOC_AR9342: + case AR71XX_SOC_AR9344: + reg = AR934X_RESET_REG_RESET_MODULE; + break; + + default: + BUG(); + } + + spin_lock_irqsave(&ar71xx_device_lock, flags); + t = ar71xx_reset_rr(reg); + t &= ~clear; + t |= set; + ar71xx_reset_wr(reg, t); + spin_unlock_irqrestore(&ar71xx_device_lock, flags); +} +EXPORT_SYMBOL_GPL(ar71xx_device_reset_rmw); + int ar71xx_device_stopped(u32 mask) { unsigned long flags; diff --git a/target/linux/ar71xx/files/arch/mips/include/asm/mach-ar71xx/ar71xx.h b/target/linux/ar71xx/files/arch/mips/include/asm/mach-ar71xx/ar71xx.h index f78ae16651..ec5e0bb2b5 100644 --- a/target/linux/ar71xx/files/arch/mips/include/asm/mach-ar71xx/ar71xx.h +++ b/target/linux/ar71xx/files/arch/mips/include/asm/mach-ar71xx/ar71xx.h @@ -724,6 +724,7 @@ static inline u32 ar71xx_reset_rr(unsigned reg) void ar71xx_device_stop(u32 mask); void ar71xx_device_start(u32 mask); +void ar71xx_device_reset_rmw(u32 clear, u32 set); int ar71xx_device_stopped(u32 mask); /* |