@@ -72,19 +72,25 @@ static int atcgpio_get(struct gpio_chip *gc, unsigned int gpio)
7272 return (val >> gpio & 1 );
7373}
7474
75- static void atcgpio_set (struct gpio_chip * gc , unsigned int gpio , int data )
75+ static void atcgpio_setgpio_val (struct atcgpio_priv * priv , unsigned int gpio , int data )
7676{
77- unsigned long flags ;
78- struct atcgpio_priv * priv ;
7977 unsigned long val ;
8078
81- priv = gpiochip_get_data (gc );
82- spin_lock_irqsave (& priv -> lock , flags );
8379 if (data )
8480 val = GPIO_READL (GPIO_DATA_OUT , priv -> base ) | (0x1UL << gpio );
8581 else
8682 val = GPIO_READL (GPIO_DATA_OUT , priv -> base ) & ~(0x1UL << gpio );
8783 GPIO_WRITEL (val , GPIO_DATA_OUT , priv -> base );
84+ }
85+
86+ static void atcgpio_set (struct gpio_chip * gc , unsigned int gpio , int data )
87+ {
88+ unsigned long flags ;
89+ struct atcgpio_priv * priv ;
90+
91+ priv = gpiochip_get_data (gc );
92+ spin_lock_irqsave (& priv -> lock , flags );
93+ atcgpio_setgpio_val (priv , gpio , data );
8894 spin_unlock_irqrestore (& priv -> lock , flags );
8995}
9096
@@ -111,9 +117,9 @@ static int atcgpio_dir_out(struct gpio_chip *gc, unsigned int gpio, int data)
111117
112118 priv = gpiochip_get_data (gc );
113119 spin_lock_irqsave (& priv -> lock , flags );
120+ atcgpio_setgpio_val (priv , gpio , data );
114121 val = GPIO_READL (PIN_DIR , priv -> base ) | (0x1UL << gpio );
115122 GPIO_WRITEL (val , PIN_DIR , priv -> base );
116- gc -> set (gc , gpio , data );
117123 spin_unlock_irqrestore (& priv -> lock , flags );
118124
119125 return 0 ;
0 commit comments