diff options
author | codeworkx <daniel.hillenbrand@codeworkx.de> | 2012-06-02 13:09:29 +0200 |
---|---|---|
committer | codeworkx <daniel.hillenbrand@codeworkx.de> | 2012-06-02 13:09:29 +0200 |
commit | c6da2cfeb05178a11c6d062a06f8078150ee492f (patch) | |
tree | f3b4021d252c52d6463a9b3c1bb7245e399b009c /arch/arm/plat-samsung/pm-gpio.c | |
parent | c6d7c4dbff353eac7919342ae6b3299a378160a6 (diff) | |
download | kernel_samsung_smdk4412-c6da2cfeb05178a11c6d062a06f8078150ee492f.zip kernel_samsung_smdk4412-c6da2cfeb05178a11c6d062a06f8078150ee492f.tar.gz kernel_samsung_smdk4412-c6da2cfeb05178a11c6d062a06f8078150ee492f.tar.bz2 |
samsung update 1
Diffstat (limited to 'arch/arm/plat-samsung/pm-gpio.c')
-rw-r--r-- | arch/arm/plat-samsung/pm-gpio.c | 33 |
1 files changed, 30 insertions, 3 deletions
diff --git a/arch/arm/plat-samsung/pm-gpio.c b/arch/arm/plat-samsung/pm-gpio.c index 9652820..c365b40 100644 --- a/arch/arm/plat-samsung/pm-gpio.c +++ b/arch/arm/plat-samsung/pm-gpio.c @@ -21,6 +21,7 @@ #include <plat/gpio-core.h> #include <plat/pm.h> +#include <plat/cpu.h> /* PM GPIO helpers */ @@ -318,6 +319,26 @@ static void s3c_pm_save_gpio(struct s3c_gpio_chip *ourchip) pm->save(ourchip); } +static int s3c_get_gpio_max_nr (void) +{ + static int gpio_max_nr = 0; + + if (unlikely(!gpio_max_nr)) { + if (soc_is_exynos4210()) + gpio_max_nr = EXYNOS4210_GPIO_END; + else if (soc_is_exynos4212() || soc_is_exynos4412()) + gpio_max_nr = EXYNOS4212_GPIO_END; + else if (soc_is_exynos5210()) + gpio_max_nr = EXYNOS5210_GPIO_END; + else if (soc_is_exynos5250()) + gpio_max_nr = EXYNOS5250_GPIO_END; + else + gpio_max_nr = S3C_GPIO_END; + } + + return gpio_max_nr; +} + /** * s3c_pm_save_gpios() - Save the state of the GPIO banks. * @@ -328,9 +349,12 @@ void s3c_pm_save_gpios(void) { struct s3c_gpio_chip *ourchip; unsigned int gpio_nr; + unsigned int gpio_max_nr; - for (gpio_nr = 0; gpio_nr < S3C_GPIO_END;) { - ourchip = s3c_gpiolib_getchip(gpio_nr); + gpio_max_nr = s3c_get_gpio_max_nr(); + + for (gpio_nr = 0; gpio_nr < gpio_max_nr;) { + ourchip = s3c_gpiolib_getchip(gpio_nr); if (!ourchip) { gpio_nr++; continue; @@ -368,8 +392,11 @@ void s3c_pm_restore_gpios(void) { struct s3c_gpio_chip *ourchip; unsigned int gpio_nr; + unsigned int gpio_max_nr; + + gpio_max_nr = s3c_get_gpio_max_nr(); - for (gpio_nr = 0; gpio_nr < S3C_GPIO_END;) { + for (gpio_nr = 0; gpio_nr < gpio_max_nr;) { ourchip = s3c_gpiolib_getchip(gpio_nr); if (!ourchip) { gpio_nr++; |