unsigned s3c_gpio_getcfg(unsigned int pin) { struct s3c_gpio_chip *chip = s3c_gpiolib_getchip(pin); unsigned long flags; unsigned ret = 0; int offset; if (chip) { offset = pin - chip->chip.base; s3c_gpio_lock(chip, flags); ret = s3c_gpio_do_getcfg(chip, offset); s3c_gpio_unlock(chip, flags); } return ret; }
int s3c_gpio_setpull(unsigned int pin, s3c_gpio_pull_t pull) { struct s3c_gpio_chip *chip = s3c_gpiolib_getchip(pin); unsigned long flags; int offset, ret; if (!chip) return -EINVAL; offset = pin - chip->chip.base; s3c_gpio_lock(chip, flags); ret = s3c_gpio_do_setpull(chip, offset, pull); s3c_gpio_unlock(chip, flags); return ret; }
int s3c_gpio_cfgpin(unsigned int pin, unsigned int config) { struct s3c_gpio_chip *chip = s3c_gpiolib_getchip(pin); unsigned long flags; int offset; int ret; if (!chip) return -EINVAL; offset = pin - chip->chip.base; s3c_gpio_lock(chip, flags); ret = s3c_gpio_do_setcfg(chip, offset, config); s3c_gpio_unlock(chip, flags); return ret; }
static void s3c_gpiolib_set(struct gpio_chip *chip, unsigned offset, int value) { struct s3c_gpio_chip *ourchip = to_s3c_gpio(chip); void __iomem *base = ourchip->base; unsigned long flags; unsigned long dat; s3c_gpio_lock(ourchip, flags); dat = __raw_readl(base + 0x04); dat &= ~(1 << offset); if (value) dat |= 1 << offset; __raw_writel(dat, base + 0x04); s3c_gpio_unlock(ourchip, flags); }