aboutsummaryrefslogtreecommitdiff
path: root/arch/arm/plat-s3c24xx/gta02_pm_wlan.c
diff options
context:
space:
mode:
authorAndy Green <agreen@pads.home.warmcat.com>2008-11-22 09:05:43 +0000
committerAndy Green <agreen@pads.home.warmcat.com>2008-11-22 09:05:43 +0000
commitb66aa08df846bbbbc41d21cd42052d4c96b84668 (patch)
tree9d796b023ac4c0e6dff0e317d499faf034595a18 /arch/arm/plat-s3c24xx/gta02_pm_wlan.c
parentc08433d1b54a2cadc7061a2bd68fbf1a4d42fcca (diff)
Diffstat (limited to 'arch/arm/plat-s3c24xx/gta02_pm_wlan.c')
-rw-r--r--arch/arm/plat-s3c24xx/gta02_pm_wlan.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/arch/arm/plat-s3c24xx/gta02_pm_wlan.c b/arch/arm/plat-s3c24xx/gta02_pm_wlan.c
index b55ba241494..3a0d24079da 100644
--- a/arch/arm/plat-s3c24xx/gta02_pm_wlan.c
+++ b/arch/arm/plat-s3c24xx/gta02_pm_wlan.c
@@ -14,6 +14,7 @@
#include <linux/module.h>
#include <linux/init.h>
#include <linux/kernel.h>
+#include <linux/mutex.h>
#include <linux/platform_device.h>
#include <mach/hardware.h>
@@ -21,13 +22,14 @@
#include <asm/plat-s3c24xx/neo1973.h>
#include <mach/gta02.h>
+#include <mach/gta02-pm-wlan.h>
#include <mach/regs-gpio.h>
#include <mach/regs-gpioj.h>
#include <linux/delay.h>
-static void gta02_wlan_power(int on)
+static void __gta02_wlan_power(int on)
{
if (!on) {
s3c2410_gpio_setpin(GTA02_CHIP_PWD, 1);
@@ -43,7 +45,19 @@ static void gta02_wlan_power(int on)
s3c2410_gpio_setpin(GTA02_CHIP_PWD, 0);
msleep(100);
s3c2410_gpio_setpin(GTA02_GPIO_nWLAN_RESET, 1);
+}
+void gta02_wlan_power(int on)
+{
+ static DEFINE_MUTEX(lock);
+ static int is_on = -1; /* initial state is unknown */
+
+ on = !!on; /* normalize */
+ mutex_lock(&lock);
+ if (on != is_on)
+ __gta02_wlan_power(on);
+ is_on = on;
+ mutex_unlock(&lock);
}
static ssize_t gta02_wlan_read(struct device *dev,