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" <[email protected]>
> 
> Signed-off-by: Vasily Khoruzhick <[email protected]>
> ---
> 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 [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to