On 11/30/2010 08:46 PM, Vasily Khoruzhick wrote: > Currently the {set,get}_pull callbacks of the s3c24xx_gpiocfg_default structure > are initalized via s3c_gpio_{get,set}pull_1up. This results in a linker > error when only CONFIG_CPU_S3C2442 is selected: > > arch/arm/plat-s3c24xx/built-in.o:(.data+0x13f4): undefined reference to > `s3c_gpio_getpull_1up' > arch/arm/plat-s3c24xx/built-in.o:(.data+0x13f8): undefined reference to > `s3c_gpio_setpull_1up' > > The s3c2442 has pulldowns instead of pullups compared to the s3c2440. > The method of controlling them is the same though. > So this patch modifies the existing s3c_gpio_{get,set}pull_1up helper functions > to take an additional parameter deciding whether the pin has a pullup or pulldown. > The s3c_gpio_{get,set}pull_1{down,up} functions then wrap that functions passing > either S3C_GPIO_PULL_UP or S3C_GPIO_PULL_DOWN. > > Furthermore this patch sets up the s3c24xx_gpiocfg_default.{get,set}_pull fields > in the s3c244{0,2}_map_io function to the new pulldown helper functions. > > Based on patch from "Lars-Peter Clausen" <lars@xxxxxxxxxx> > > Signed-off-by: Vasily Khoruzhick <anarsoul@xxxxxxxxx> > --- > v2: adapt patch for 2.6.37-rc1 > v3: restore default pull callbacks, add default pull callbacks for s3c2442 > v4: remove default pull callbacks, set them in per-soc map_io function instead. > arch/arm/mach-s3c2440/Kconfig | 1 + > arch/arm/mach-s3c2440/s3c2440.c | 11 ++++- > arch/arm/mach-s3c2440/s3c2442.c | 14 ++++++ > arch/arm/plat-s3c24xx/cpu.c | 8 ++-- > arch/arm/plat-s3c24xx/gpiolib.c | 2 - > arch/arm/plat-s3c24xx/include/plat/s3c244x.h | 7 +++- > arch/arm/plat-samsung/gpio-config.c | 45 ++++++++++++++++---- > .../plat-samsung/include/plat/gpio-cfg-helpers.h | 11 +++++ > 8 files changed, 80 insertions(+), 19 deletions(-) > > ... > > +static int s3c_gpio_setpull_1(struct s3c_gpio_chip *chip, > + unsigned int off, s3c_gpio_pull_t pull, > + s3c_gpio_pull_t updown) > { > void __iomem *reg = chip->base + 0x08; > u32 pup = __raw_readl(reg); > > - pup = __raw_readl(reg); > - > - if (pup == S3C_GPIO_PULL_UP) > + if (pup == updown) This should be pull == updown, otherwise looks fine to me > pup &= ~(1 << off); > else if (pup == S3C_GPIO_PULL_NONE) > pup |= (1 << off); > @@ -300,17 +299,45 @@ int s3c_gpio_setpull_1up(struct s3c_gpio_chip *chip, > return 0; > } - Lars -- To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html