diff options
author | Andy Green <agreen@pads.home.warmcat.com> | 2008-11-22 09:05:43 +0000 |
---|---|---|
committer | Andy Green <agreen@pads.home.warmcat.com> | 2008-11-22 09:05:43 +0000 |
commit | b66aa08df846bbbbc41d21cd42052d4c96b84668 (patch) | |
tree | 9d796b023ac4c0e6dff0e317d499faf034595a18 /arch/arm/plat-s3c24xx/gta02_pm_wlan.c | |
parent | c08433d1b54a2cadc7061a2bd68fbf1a4d42fcca (diff) |
Diffstat (limited to 'arch/arm/plat-s3c24xx/gta02_pm_wlan.c')
-rw-r--r-- | arch/arm/plat-s3c24xx/gta02_pm_wlan.c | 16 |
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, |