/* --------- gpio_chip related code --------- */ static void xway_gpio_set(struct gpio_chip *chip, unsigned int pin, int val) { struct ltq_pinmux_info *info = dev_get_drvdata(chip->dev); if (val) gpio_setbit(info->membase[0], GPIO_OUT(pin), PORT_PIN(pin)); else gpio_clearbit(info->membase[0], GPIO_OUT(pin), PORT_PIN(pin)); }
void __set_level(unsigned pin, int high) { u32 u; u = readl(GPIO_OUT(pin)); if (high) u |= 1 << (pin & 31); else u &= ~(1 << (pin & 31)); writel(u, GPIO_OUT(pin)); }
int kw_gpio_get_value(unsigned pin) { int val; if (readl(GPIO_IO_CONF(pin)) & (1 << (pin & 31))) val = readl(GPIO_DATA_IN(pin)) ^ readl(GPIO_IN_POL(pin)); else val = readl(GPIO_OUT(pin)); return (val >> (pin & 31)) & 1; }
static int orion_gpio_get_value(struct gpio_chip *chip, unsigned pin) { int val; if (readl(GPIO_IO_CONF(pin)) & (1 << (pin & 31))) val = readl(GPIO_DATA_IN(pin)) ^ readl(GPIO_IN_POL(pin)); else val = readl(GPIO_OUT(pin)); return (val >> (pin & 31)) & 1; }
static void get_gpio_settings(void) { unsigned long pmc_ctrl; int i; int j; pmc_ctrl = readl(IO_ADDRESS(TEGRA_PMC_BASE)); printk(KERN_INFO "pICS_%s: pmc_ctrl = 0x%lX...\n",__func__,pmc_ctrl); for (i = 0; i < 7; i++) { for (j = 0; j < 4; j++) { int gpio = tegra_gpio_compose(i, j, 0); printk(KERN_INFO "pICS_%s: %d:%d %02x %02x %02x %02x %02x %02x %06x\n",__func__, i, j, __raw_readl(GPIO_CNF(gpio)), __raw_readl(GPIO_OE(gpio)), __raw_readl(GPIO_OUT(gpio)), __raw_readl(GPIO_IN(gpio)), __raw_readl(GPIO_INT_STA(gpio)), __raw_readl(GPIO_INT_ENB(gpio)), __raw_readl(GPIO_INT_LVL(gpio))); } } }