void __set_blinking(unsigned pin, int blink) { u32 u; u = readl(GPIO_BLINK_EN(pin)); if (blink) u |= 1 << (pin & 31); else u &= ~(1 << (pin & 31)); writel(u, GPIO_BLINK_EN(pin)); }
void orion_gpio_set_blink(unsigned pin, int blink) { unsigned long flags; u32 u; spin_lock_irqsave(&gpio_lock, flags); /* * Set output value to zero. */ __set_level(pin, 0); u = readl(GPIO_BLINK_EN(pin)); if (blink) u |= 1 << (pin & 31); else u &= ~(1 << (pin & 31)); writel(u, GPIO_BLINK_EN(pin)); spin_unlock_irqrestore(&gpio_lock, flags); }
void gpio_set_value(unsigned pin, int value) { unsigned long flags; u32 u; spin_lock_irqsave(&gpio_lock, flags); /* * Disable blinking. */ u = readl(GPIO_BLINK_EN(pin)); u &= ~(1 << (pin & 31)); writel(u, GPIO_BLINK_EN(pin)); /* * Configure GPIO output value. */ __set_level(pin, value); spin_unlock_irqrestore(&gpio_lock, flags); }
int gpio_direction_output(unsigned pin, int value) { unsigned long flags; u32 u; if (pin >= GPIO_MAX || !test_bit(pin, gpio_valid)) { pr_debug("%s: invalid GPIO %d\n", __func__, pin); return -EINVAL; } spin_lock_irqsave(&gpio_lock, flags); /* * Some callers might not have used gpio_request(), * so flag this pin as requested now. */ if (gpio_label[pin] == NULL) gpio_label[pin] = "?"; /* * Disable blinking. */ u = readl(GPIO_BLINK_EN(pin)); u &= ~(1 << (pin & 31)); writel(u, GPIO_BLINK_EN(pin)); /* * Configure GPIO output value. */ __set_level(pin, value); /* * Configure GPIO direction. */ __set_direction(pin, 0); spin_unlock_irqrestore(&gpio_lock, flags); return 0; }