mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-10-31 08:44:41 +00:00 
			
		
		
		
	mvebu-gpio: Disable blinking when enabling a GPIO for output
The plat-orion GPIO driver would disable any pin blinking whenever using a pin for output. Do the same here, as a blinking LED will continue to blink regardless of what the GPIO pin level is. Signed-off-by: Jamie Lentin <jm@lentin.co.uk> Acked-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
This commit is contained in:
		
							parent
							
								
									77b67063bb
								
							
						
					
					
						commit
						e91337609a
					
				
					 1 changed files with 23 additions and 0 deletions
				
			
		|  | @ -92,6 +92,11 @@ static inline void __iomem *mvebu_gpioreg_out(struct mvebu_gpio_chip *mvchip) | |||
| 	return mvchip->membase + GPIO_OUT_OFF; | ||||
| } | ||||
| 
 | ||||
| static inline void __iomem *mvebu_gpioreg_blink(struct mvebu_gpio_chip *mvchip) | ||||
| { | ||||
| 	return mvchip->membase + GPIO_BLINK_EN_OFF; | ||||
| } | ||||
| 
 | ||||
| static inline void __iomem *mvebu_gpioreg_io_conf(struct mvebu_gpio_chip *mvchip) | ||||
| { | ||||
| 	return mvchip->membase + GPIO_IO_CONF_OFF; | ||||
|  | @ -206,6 +211,23 @@ static int mvebu_gpio_get(struct gpio_chip *chip, unsigned pin) | |||
| 	return (u >> pin) & 1; | ||||
| } | ||||
| 
 | ||||
| static void mvebu_gpio_blink(struct gpio_chip *chip, unsigned pin, int value) | ||||
| { | ||||
| 	struct mvebu_gpio_chip *mvchip = | ||||
| 		container_of(chip, struct mvebu_gpio_chip, chip); | ||||
| 	unsigned long flags; | ||||
| 	u32 u; | ||||
| 
 | ||||
| 	spin_lock_irqsave(&mvchip->lock, flags); | ||||
| 	u = readl_relaxed(mvebu_gpioreg_blink(mvchip)); | ||||
| 	if (value) | ||||
| 		u |= 1 << pin; | ||||
| 	else | ||||
| 		u &= ~(1 << pin); | ||||
| 	writel_relaxed(u, mvebu_gpioreg_blink(mvchip)); | ||||
| 	spin_unlock_irqrestore(&mvchip->lock, flags); | ||||
| } | ||||
| 
 | ||||
| static int mvebu_gpio_direction_input(struct gpio_chip *chip, unsigned pin) | ||||
| { | ||||
| 	struct mvebu_gpio_chip *mvchip = | ||||
|  | @ -244,6 +266,7 @@ static int mvebu_gpio_direction_output(struct gpio_chip *chip, unsigned pin, | |||
| 	if (ret) | ||||
| 		return ret; | ||||
| 
 | ||||
| 	mvebu_gpio_blink(chip, pin, 0); | ||||
| 	mvebu_gpio_set(chip, pin, value); | ||||
| 
 | ||||
| 	spin_lock_irqsave(&mvchip->lock, flags); | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Jamie Lentin
						Jamie Lentin