2008-01-28 13:01:19 +01:00
/* linux/arch/arm/mach-s3c2412/gpio.c
*
* Copyright ( c ) 2007 Simtec Electronics
* Ben Dooks < ben @ simtec . co . uk >
*
* http : //armlinux.simtec.co.uk/.
*
* S3C2412 / S3C2413 specific GPIO support
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation .
*/
# include <linux/kernel.h>
# include <linux/types.h>
# include <linux/module.h>
# include <linux/interrupt.h>
2010-05-17 14:28:44 +09:00
# include <linux/gpio.h>
2008-01-28 13:01:19 +01:00
# include <asm/mach/arch.h>
# include <asm/mach/map.h>
2008-08-05 16:14:15 +01:00
# include <mach/regs-gpio.h>
# include <mach/hardware.h>
2008-01-28 13:01:19 +01:00
2010-05-17 14:28:44 +09:00
# include <plat/gpio-core.h>
2008-01-28 13:01:19 +01:00
int s3c2412_gpio_set_sleepcfg ( unsigned int pin , unsigned int state )
{
2010-05-17 14:28:44 +09:00
struct s3c_gpio_chip * chip = s3c_gpiolib_getchip ( pin ) ;
unsigned long offs = pin - chip - > chip . base ;
2008-01-28 13:01:19 +01:00
unsigned long flags ;
unsigned long slpcon ;
offs * = 2 ;
2010-05-17 14:13:16 +09:00
if ( pin < S3C2410_GPB ( 0 ) )
2008-01-28 13:01:19 +01:00
return - EINVAL ;
2010-05-17 14:13:16 +09:00
if ( pin > = S3C2410_GPF ( 0 ) & &
pin < = S3C2410_GPG ( 16 ) )
2008-01-28 13:01:19 +01:00
return - EINVAL ;
2010-05-17 14:13:16 +09:00
if ( pin > S3C2410_GPH ( 16 ) )
2008-01-28 13:01:19 +01:00
return - EINVAL ;
local_irq_save ( flags ) ;
2010-05-17 14:28:44 +09:00
slpcon = __raw_readl ( chip - > base + 0x0C ) ;
2008-01-28 13:01:19 +01:00
slpcon & = ~ ( 3 < < offs ) ;
slpcon | = state < < offs ;
2010-05-17 14:28:44 +09:00
__raw_writel ( slpcon , chip - > base + 0x0C ) ;
2008-01-28 13:01:19 +01:00
local_irq_restore ( flags ) ;
return 0 ;
}
EXPORT_SYMBOL ( s3c2412_gpio_set_sleepcfg ) ;