From 3a5386be368fe2b77964b53e998e33b0ad1bdae9 Mon Sep 17 00:00:00 2001 From: juhosg Date: Wed, 21 Sep 2011 11:47:50 +0000 Subject: ar71xx: add ar71xx_device_reset_rmw helper git-svn-id: svn://svn.openwrt.org/openwrt/trunk@28275 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- .../linux/ar71xx/files/arch/mips/ar71xx/ar71xx.c | 48 ++++++++++++++++++++++ .../arch/mips/include/asm/mach-ar71xx/ar71xx.h | 1 + 2 files changed, 49 insertions(+) (limited to 'target') diff --git a/target/linux/ar71xx/files/arch/mips/ar71xx/ar71xx.c b/target/linux/ar71xx/files/arch/mips/ar71xx/ar71xx.c index ef956fbf4..93cbe5331 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 f78ae1665..ec5e0bb2b 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); /* -- cgit v1.2.3