aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpio/gpio-adnp.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpio/gpio-adnp.c')
-rw-r--r--drivers/gpio/gpio-adnp.c31
1 files changed, 14 insertions, 17 deletions
diff --git a/drivers/gpio/gpio-adnp.c b/drivers/gpio/gpio-adnp.c
index 89863ea25de1..44c09904daa6 100644
--- a/drivers/gpio/gpio-adnp.c
+++ b/drivers/gpio/gpio-adnp.c
@@ -192,28 +192,20 @@ static void adnp_gpio_dbg_show(struct seq_file *s, struct gpio_chip *chip)
192 mutex_lock(&adnp->i2c_lock); 192 mutex_lock(&adnp->i2c_lock);
193 193
194 err = adnp_read(adnp, GPIO_DDR(adnp) + i, &ddr); 194 err = adnp_read(adnp, GPIO_DDR(adnp) + i, &ddr);
195 if (err < 0) { 195 if (err < 0)
196 mutex_unlock(&adnp->i2c_lock); 196 goto unlock;
197 return;
198 }
199 197
200 err = adnp_read(adnp, GPIO_PLR(adnp) + i, &plr); 198 err = adnp_read(adnp, GPIO_PLR(adnp) + i, &plr);
201 if (err < 0) { 199 if (err < 0)
202 mutex_unlock(&adnp->i2c_lock); 200 goto unlock;
203 return;
204 }
205 201
206 err = adnp_read(adnp, GPIO_IER(adnp) + i, &ier); 202 err = adnp_read(adnp, GPIO_IER(adnp) + i, &ier);
207 if (err < 0) { 203 if (err < 0)
208 mutex_unlock(&adnp->i2c_lock); 204 goto unlock;
209 return;
210 }
211 205
212 err = adnp_read(adnp, GPIO_ISR(adnp) + i, &isr); 206 err = adnp_read(adnp, GPIO_ISR(adnp) + i, &isr);
213 if (err < 0) { 207 if (err < 0)
214 mutex_unlock(&adnp->i2c_lock); 208 goto unlock;
215 return;
216 }
217 209
218 mutex_unlock(&adnp->i2c_lock); 210 mutex_unlock(&adnp->i2c_lock);
219 211
@@ -240,6 +232,11 @@ static void adnp_gpio_dbg_show(struct seq_file *s, struct gpio_chip *chip)
240 direction, level, interrupt, pending); 232 direction, level, interrupt, pending);
241 } 233 }
242 } 234 }
235
236 return;
237
238unlock:
239 mutex_unlock(&adnp->i2c_lock);
243} 240}
244 241
245static int adnp_gpio_setup(struct adnp *adnp, unsigned int num_gpios) 242static int adnp_gpio_setup(struct adnp *adnp, unsigned int num_gpios)
@@ -323,7 +320,7 @@ static irqreturn_t adnp_irq(int irq, void *data)
323 320
324 for_each_set_bit(bit, &pending, 8) { 321 for_each_set_bit(bit, &pending, 8) {
325 unsigned int child_irq; 322 unsigned int child_irq;
326 child_irq = irq_find_mapping(adnp->gpio.irqdomain, 323 child_irq = irq_find_mapping(adnp->gpio.irq.domain,
327 base + bit); 324 base + bit);
328 handle_nested_irq(child_irq); 325 handle_nested_irq(child_irq);
329 } 326 }