|
@@ -280,18 +280,17 @@ s3c_gpio_pull_t s3c_gpio_getpull_updown(struct s3c_gpio_chip *chip,
|
|
|
}
|
|
|
#endif
|
|
|
|
|
|
-#ifdef CONFIG_S3C_GPIO_PULL_UP
|
|
|
-int s3c_gpio_setpull_1up(struct s3c_gpio_chip *chip,
|
|
|
- unsigned int off, s3c_gpio_pull_t pull)
|
|
|
+#if defined(CONFIG_S3C_GPIO_PULL_UP) || defined(CONFIG_S3C_GPIO_PULL_DOWN)
|
|
|
+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 (pull == updown)
|
|
|
pup &= ~(1 << off);
|
|
|
- else if (pup == S3C_GPIO_PULL_NONE)
|
|
|
+ else if (pull == S3C_GPIO_PULL_NONE)
|
|
|
pup |= (1 << off);
|
|
|
else
|
|
|
return -EINVAL;
|
|
@@ -300,17 +299,45 @@ int s3c_gpio_setpull_1up(struct s3c_gpio_chip *chip,
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-s3c_gpio_pull_t s3c_gpio_getpull_1up(struct s3c_gpio_chip *chip,
|
|
|
- unsigned int off)
|
|
|
+static s3c_gpio_pull_t s3c_gpio_getpull_1(struct s3c_gpio_chip *chip,
|
|
|
+ unsigned int off, s3c_gpio_pull_t updown)
|
|
|
{
|
|
|
void __iomem *reg = chip->base + 0x08;
|
|
|
u32 pup = __raw_readl(reg);
|
|
|
|
|
|
pup &= (1 << off);
|
|
|
- return pup ? S3C_GPIO_PULL_NONE : S3C_GPIO_PULL_UP;
|
|
|
+ return pup ? S3C_GPIO_PULL_NONE : updown;
|
|
|
+}
|
|
|
+#endif /* CONFIG_S3C_GPIO_PULL_UP || CONFIG_S3C_GPIO_PULL_DOWN */
|
|
|
+
|
|
|
+#ifdef CONFIG_S3C_GPIO_PULL_UP
|
|
|
+s3c_gpio_pull_t s3c_gpio_getpull_1up(struct s3c_gpio_chip *chip,
|
|
|
+ unsigned int off)
|
|
|
+{
|
|
|
+ return s3c_gpio_getpull_1(chip, off, S3C_GPIO_PULL_UP);
|
|
|
+}
|
|
|
+
|
|
|
+int s3c_gpio_setpull_1up(struct s3c_gpio_chip *chip,
|
|
|
+ unsigned int off, s3c_gpio_pull_t pull)
|
|
|
+{
|
|
|
+ return s3c_gpio_setpull_1(chip, off, pull, S3C_GPIO_PULL_UP);
|
|
|
}
|
|
|
#endif /* CONFIG_S3C_GPIO_PULL_UP */
|
|
|
|
|
|
+#ifdef CONFIG_S3C_GPIO_PULL_DOWN
|
|
|
+s3c_gpio_pull_t s3c_gpio_getpull_1down(struct s3c_gpio_chip *chip,
|
|
|
+ unsigned int off)
|
|
|
+{
|
|
|
+ return s3c_gpio_getpull_1(chip, off, S3C_GPIO_PULL_DOWN);
|
|
|
+}
|
|
|
+
|
|
|
+int s3c_gpio_setpull_1down(struct s3c_gpio_chip *chip,
|
|
|
+ unsigned int off, s3c_gpio_pull_t pull)
|
|
|
+{
|
|
|
+ return s3c_gpio_setpull_1(chip, off, pull, S3C_GPIO_PULL_DOWN);
|
|
|
+}
|
|
|
+#endif /* CONFIG_S3C_GPIO_PULL_DOWN */
|
|
|
+
|
|
|
#ifdef CONFIG_S5P_GPIO_DRVSTR
|
|
|
s5p_gpio_drvstr_t s5p_gpio_get_drvstr(unsigned int pin)
|
|
|
{
|