ARM: SAMSUNG: Add GPIO configuration read calls
Add the necessary 1,2 and 4 bit configuration read calls for the new gpio code to allow removal of the old s3c24xx gpio code. Signed-off-by: Ben Dooks <ben-linux@fluff.org>
This commit is contained in:
Родитель
5690a6267f
Коммит
97a339995f
|
@ -51,6 +51,7 @@
|
||||||
|
|
||||||
static struct s3c_gpio_cfg gpio_4bit_cfg_noint = {
|
static struct s3c_gpio_cfg gpio_4bit_cfg_noint = {
|
||||||
.set_config = s3c_gpio_setcfg_s3c64xx_4bit,
|
.set_config = s3c_gpio_setcfg_s3c64xx_4bit,
|
||||||
|
.get_config = s3c_gpio_getcfg_s3c64xx_4bit,
|
||||||
.set_pull = s3c_gpio_setpull_updown,
|
.set_pull = s3c_gpio_setpull_updown,
|
||||||
.get_pull = s3c_gpio_getpull_updown,
|
.get_pull = s3c_gpio_getpull_updown,
|
||||||
};
|
};
|
||||||
|
@ -58,12 +59,14 @@ static struct s3c_gpio_cfg gpio_4bit_cfg_noint = {
|
||||||
static struct s3c_gpio_cfg gpio_4bit_cfg_eint0111 = {
|
static struct s3c_gpio_cfg gpio_4bit_cfg_eint0111 = {
|
||||||
.cfg_eint = 7,
|
.cfg_eint = 7,
|
||||||
.set_config = s3c_gpio_setcfg_s3c64xx_4bit,
|
.set_config = s3c_gpio_setcfg_s3c64xx_4bit,
|
||||||
|
.get_config = s3c_gpio_getcfg_s3c64xx_4bit,
|
||||||
.set_pull = s3c_gpio_setpull_updown,
|
.set_pull = s3c_gpio_setpull_updown,
|
||||||
.get_pull = s3c_gpio_getpull_updown,
|
.get_pull = s3c_gpio_getpull_updown,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct s3c_gpio_cfg gpio_4bit_cfg_eint0011 = {
|
static struct s3c_gpio_cfg gpio_4bit_cfg_eint0011 = {
|
||||||
.cfg_eint = 3,
|
.cfg_eint = 3,
|
||||||
|
.get_config = s3c_gpio_getcfg_s3c64xx_4bit,
|
||||||
.set_config = s3c_gpio_setcfg_s3c64xx_4bit,
|
.set_config = s3c_gpio_setcfg_s3c64xx_4bit,
|
||||||
.set_pull = s3c_gpio_setpull_updown,
|
.set_pull = s3c_gpio_setpull_updown,
|
||||||
.get_pull = s3c_gpio_getpull_updown,
|
.get_pull = s3c_gpio_getpull_updown,
|
||||||
|
@ -171,6 +174,7 @@ static struct s3c_gpio_chip gpio_4bit2[] = {
|
||||||
|
|
||||||
static struct s3c_gpio_cfg gpio_2bit_cfg_noint = {
|
static struct s3c_gpio_cfg gpio_2bit_cfg_noint = {
|
||||||
.set_config = s3c_gpio_setcfg_s3c24xx,
|
.set_config = s3c_gpio_setcfg_s3c24xx,
|
||||||
|
.get_config = s3c_gpio_getcfg_s3c24xx,
|
||||||
.set_pull = s3c_gpio_setpull_updown,
|
.set_pull = s3c_gpio_setpull_updown,
|
||||||
.get_pull = s3c_gpio_getpull_updown,
|
.get_pull = s3c_gpio_getpull_updown,
|
||||||
};
|
};
|
||||||
|
@ -178,6 +182,7 @@ static struct s3c_gpio_cfg gpio_2bit_cfg_noint = {
|
||||||
static struct s3c_gpio_cfg gpio_2bit_cfg_eint10 = {
|
static struct s3c_gpio_cfg gpio_2bit_cfg_eint10 = {
|
||||||
.cfg_eint = 2,
|
.cfg_eint = 2,
|
||||||
.set_config = s3c_gpio_setcfg_s3c24xx,
|
.set_config = s3c_gpio_setcfg_s3c24xx,
|
||||||
|
.get_config = s3c_gpio_getcfg_s3c24xx,
|
||||||
.set_pull = s3c_gpio_setpull_updown,
|
.set_pull = s3c_gpio_setpull_updown,
|
||||||
.get_pull = s3c_gpio_getpull_updown,
|
.get_pull = s3c_gpio_getpull_updown,
|
||||||
};
|
};
|
||||||
|
@ -185,6 +190,7 @@ static struct s3c_gpio_cfg gpio_2bit_cfg_eint10 = {
|
||||||
static struct s3c_gpio_cfg gpio_2bit_cfg_eint11 = {
|
static struct s3c_gpio_cfg gpio_2bit_cfg_eint11 = {
|
||||||
.cfg_eint = 3,
|
.cfg_eint = 3,
|
||||||
.set_config = s3c_gpio_setcfg_s3c24xx,
|
.set_config = s3c_gpio_setcfg_s3c24xx,
|
||||||
|
.get_config = s3c_gpio_getcfg_s3c24xx,
|
||||||
.set_pull = s3c_gpio_setpull_updown,
|
.set_pull = s3c_gpio_setpull_updown,
|
||||||
.get_pull = s3c_gpio_getpull_updown,
|
.get_pull = s3c_gpio_getpull_updown,
|
||||||
};
|
};
|
||||||
|
|
|
@ -161,12 +161,15 @@ static struct s3c_gpio_cfg s5p6440_gpio_cfgs[] = {
|
||||||
}, {
|
}, {
|
||||||
.cfg_eint = 0,
|
.cfg_eint = 0,
|
||||||
.set_config = s3c_gpio_setcfg_s3c24xx,
|
.set_config = s3c_gpio_setcfg_s3c24xx,
|
||||||
|
.get_config = s3c_gpio_getcfg_s3c24xx,
|
||||||
}, {
|
}, {
|
||||||
.cfg_eint = 2,
|
.cfg_eint = 2,
|
||||||
.set_config = s3c_gpio_setcfg_s3c24xx,
|
.set_config = s3c_gpio_setcfg_s3c24xx,
|
||||||
|
.get_config = s3c_gpio_getcfg_s3c24xx,
|
||||||
}, {
|
}, {
|
||||||
.cfg_eint = 3,
|
.cfg_eint = 3,
|
||||||
.set_config = s3c_gpio_setcfg_s3c24xx,
|
.set_config = s3c_gpio_setcfg_s3c24xx,
|
||||||
|
.get_config = s3c_gpio_getcfg_s3c24xx,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -279,6 +282,8 @@ void __init s5p6440_gpiolib_set_cfg(struct s3c_gpio_cfg *chipcfg, int nr_chips)
|
||||||
for (; nr_chips > 0; nr_chips--, chipcfg++) {
|
for (; nr_chips > 0; nr_chips--, chipcfg++) {
|
||||||
if (!chipcfg->set_config)
|
if (!chipcfg->set_config)
|
||||||
chipcfg->set_config = s3c_gpio_setcfg_s3c64xx_4bit;
|
chipcfg->set_config = s3c_gpio_setcfg_s3c64xx_4bit;
|
||||||
|
if (!chipcfg->get_config)
|
||||||
|
chipcfg->get_config = s3c_gpio_getcfg_s3c64xx_4bit;
|
||||||
if (!chipcfg->set_pull)
|
if (!chipcfg->set_pull)
|
||||||
chipcfg->set_pull = s3c_gpio_setpull_updown;
|
chipcfg->set_pull = s3c_gpio_setpull_updown;
|
||||||
if (!chipcfg->get_pull)
|
if (!chipcfg->get_pull)
|
||||||
|
|
|
@ -81,10 +81,12 @@ static int s3c24xx_gpiolib_bankg_toirq(struct gpio_chip *chip, unsigned offset)
|
||||||
|
|
||||||
static struct s3c_gpio_cfg s3c24xx_gpiocfg_banka = {
|
static struct s3c_gpio_cfg s3c24xx_gpiocfg_banka = {
|
||||||
.set_config = s3c_gpio_setcfg_s3c24xx_a,
|
.set_config = s3c_gpio_setcfg_s3c24xx_a,
|
||||||
|
.get_config = s3c_gpio_getcfg_s3c24xx_a,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct s3c_gpio_cfg s3c24xx_gpiocfg_default = {
|
struct s3c_gpio_cfg s3c24xx_gpiocfg_default = {
|
||||||
.set_config = s3c_gpio_setcfg_s3c24xx,
|
.set_config = s3c_gpio_setcfg_s3c24xx,
|
||||||
|
.get_config = s3c_gpio_getcfg_s3c24xx,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct s3c_gpio_chip s3c24xx_gpios[] = {
|
struct s3c_gpio_chip s3c24xx_gpios[] = {
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/* linux/arch/arm/plat-s3c/gpio-config.c
|
/* linux/arch/arm/plat-s3c/gpio-config.c
|
||||||
*
|
*
|
||||||
* Copyright 2008 Openmoko, Inc.
|
* Copyright 2008 Openmoko, Inc.
|
||||||
* Copyright 2008 Simtec Electronics
|
* Copyright 2008-2010 Simtec Electronics
|
||||||
* Ben Dooks <ben@simtec.co.uk>
|
* Ben Dooks <ben@simtec.co.uk>
|
||||||
* http://armlinux.simtec.co.uk/
|
* http://armlinux.simtec.co.uk/
|
||||||
*
|
*
|
||||||
|
@ -87,6 +87,19 @@ int s3c_gpio_setcfg_s3c24xx_a(struct s3c_gpio_chip *chip,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unsigned s3c_gpio_getcfg_s3c24xx_a(struct s3c_gpio_chip *chip,
|
||||||
|
unsigned int off)
|
||||||
|
{
|
||||||
|
u32 con;
|
||||||
|
|
||||||
|
con = __raw_readl(chip->base);
|
||||||
|
con >>= off;
|
||||||
|
con &= 1;
|
||||||
|
con++;
|
||||||
|
|
||||||
|
return S3C_GPIO_SFN(con);
|
||||||
|
}
|
||||||
|
|
||||||
int s3c_gpio_setcfg_s3c24xx(struct s3c_gpio_chip *chip,
|
int s3c_gpio_setcfg_s3c24xx(struct s3c_gpio_chip *chip,
|
||||||
unsigned int off, unsigned int cfg)
|
unsigned int off, unsigned int cfg)
|
||||||
{
|
{
|
||||||
|
@ -109,6 +122,19 @@ int s3c_gpio_setcfg_s3c24xx(struct s3c_gpio_chip *chip,
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unsigned int s3c_gpio_getcfg_s3c24xx(struct s3c_gpio_chip *chip,
|
||||||
|
unsigned int off)
|
||||||
|
{
|
||||||
|
u32 con;
|
||||||
|
|
||||||
|
con = __raw_readl(chip->base);
|
||||||
|
con >>= off * 2;
|
||||||
|
con &= 3;
|
||||||
|
|
||||||
|
/* this conversion works for IN and OUT as well as special mode */
|
||||||
|
return S3C_GPIO_SPECIAL(con);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_S3C_GPIO_CFG_S3C64XX
|
#ifdef CONFIG_S3C_GPIO_CFG_S3C64XX
|
||||||
|
@ -134,6 +160,25 @@ int s3c_gpio_setcfg_s3c64xx_4bit(struct s3c_gpio_chip *chip,
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unsigned s3c_gpio_getcfg_s3c64xx_4bit(struct s3c_gpio_chip *chip,
|
||||||
|
unsigned int off)
|
||||||
|
{
|
||||||
|
void __iomem *reg = chip->base;
|
||||||
|
unsigned int shift = (off & 7) * 4;
|
||||||
|
u32 con;
|
||||||
|
|
||||||
|
if (off < 8 && chip->chip.ngpio > 8)
|
||||||
|
reg -= 4;
|
||||||
|
|
||||||
|
con = __raw_readl(reg);
|
||||||
|
con >>= shift;
|
||||||
|
con &= 0xf;
|
||||||
|
|
||||||
|
/* this conversion works for IN and OUT as well as special mode */
|
||||||
|
return S3C_GPIO_SPECIAL(con);
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* CONFIG_S3C_GPIO_CFG_S3C64XX */
|
#endif /* CONFIG_S3C_GPIO_CFG_S3C64XX */
|
||||||
|
|
||||||
#ifdef CONFIG_S3C_GPIO_PULL_UPDOWN
|
#ifdef CONFIG_S3C_GPIO_PULL_UPDOWN
|
||||||
|
|
|
@ -52,6 +52,18 @@ static inline int s3c_gpio_do_setpull(struct s3c_gpio_chip *chip,
|
||||||
extern int s3c_gpio_setcfg_s3c24xx(struct s3c_gpio_chip *chip,
|
extern int s3c_gpio_setcfg_s3c24xx(struct s3c_gpio_chip *chip,
|
||||||
unsigned int off, unsigned int cfg);
|
unsigned int off, unsigned int cfg);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* s3c_gpio_getcfg_s3c24xx - S3C24XX style GPIO configuration read.
|
||||||
|
* @chip: The gpio chip that is being configured.
|
||||||
|
* @off: The offset for the GPIO being configured.
|
||||||
|
*
|
||||||
|
* The reverse of s3c_gpio_setcfg_s3c24xx(). Will return a value whicg
|
||||||
|
* could be directly passed back to s3c_gpio_setcfg_s3c24xx(), from the
|
||||||
|
* S3C_GPIO_SPECIAL() macro.
|
||||||
|
*/
|
||||||
|
unsigned int s3c_gpio_getcfg_s3c24xx(struct s3c_gpio_chip *chip,
|
||||||
|
unsigned int off);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* s3c_gpio_setcfg_s3c24xx_a - S3C24XX style GPIO configuration (Bank A)
|
* s3c_gpio_setcfg_s3c24xx_a - S3C24XX style GPIO configuration (Bank A)
|
||||||
* @chip: The gpio chip that is being configured.
|
* @chip: The gpio chip that is being configured.
|
||||||
|
@ -65,6 +77,21 @@ extern int s3c_gpio_setcfg_s3c24xx(struct s3c_gpio_chip *chip,
|
||||||
extern int s3c_gpio_setcfg_s3c24xx_a(struct s3c_gpio_chip *chip,
|
extern int s3c_gpio_setcfg_s3c24xx_a(struct s3c_gpio_chip *chip,
|
||||||
unsigned int off, unsigned int cfg);
|
unsigned int off, unsigned int cfg);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* s3c_gpio_getcfg_s3c24xx_a - S3C24XX style GPIO configuration read (Bank A)
|
||||||
|
* @chip: The gpio chip that is being configured.
|
||||||
|
* @off: The offset for the GPIO being configured.
|
||||||
|
*
|
||||||
|
* The reverse of s3c_gpio_setcfg_s3c24xx_a() turning an GPIO into a usable
|
||||||
|
* GPIO configuration value.
|
||||||
|
*
|
||||||
|
* @sa s3c_gpio_getcfg_s3c24xx
|
||||||
|
* @sa s3c_gpio_getcfg_s3c64xx_4bit
|
||||||
|
*/
|
||||||
|
extern unsigned s3c_gpio_getcfg_s3c24xx_a(struct s3c_gpio_chip *chip,
|
||||||
|
unsigned int off);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* s3c_gpio_setcfg_s3c64xx_4bit - S3C64XX 4bit single register GPIO config.
|
* s3c_gpio_setcfg_s3c64xx_4bit - S3C64XX 4bit single register GPIO config.
|
||||||
* @chip: The gpio chip that is being configured.
|
* @chip: The gpio chip that is being configured.
|
||||||
|
@ -85,6 +112,20 @@ extern int s3c_gpio_setcfg_s3c64xx_4bit(struct s3c_gpio_chip *chip,
|
||||||
unsigned int off, unsigned int cfg);
|
unsigned int off, unsigned int cfg);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* s3c_gpio_getcfg_s3c64xx_4bit - S3C64XX 4bit single register GPIO config read.
|
||||||
|
* @chip: The gpio chip that is being configured.
|
||||||
|
* @off: The offset for the GPIO being configured.
|
||||||
|
*
|
||||||
|
* The reverse of s3c_gpio_setcfg_s3c64xx_4bit(), turning a gpio configuration
|
||||||
|
* register setting into a value the software can use, such as could be passed
|
||||||
|
* to s3c_gpio_setcfg_s3c64xx_4bit().
|
||||||
|
*
|
||||||
|
* @sa s3c_gpio_getcfg_s3c24xx
|
||||||
|
*/
|
||||||
|
extern unsigned s3c_gpio_getcfg_s3c64xx_4bit(struct s3c_gpio_chip *chip,
|
||||||
|
unsigned int off);
|
||||||
|
|
||||||
/* Pull-{up,down} resistor controls.
|
/* Pull-{up,down} resistor controls.
|
||||||
*
|
*
|
||||||
* S3C2410,S3C2440,S3C24A0 = Pull-UP,
|
* S3C2410,S3C2440,S3C24A0 = Pull-UP,
|
||||||
|
|
Загрузка…
Ссылка в новой задаче