aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2014-09-25 13:17:37 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2014-09-25 13:17:37 -0400
commit2289823c22d528c71f692c0145a1f1b5a211b6a1 (patch)
treef67b560fa8bf5ef224474ad500fcf14404db7edb
parent4d3afba349efbb5d4a3e42345f1976ec2371b7f1 (diff)
parent324b0398781e7afb846378dd2d8a4374faaf236b (diff)
Merge tag 'gpio-v3.17-4' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-gpio
Pull gpio fixes from Linus Walleij: "Two GPIO fixes: - GPIO direction flags where handled wrong in the new descriptor- based API, so direction changes did not always "take". - Fix a handler installation race in the generic GPIO irqchip code" * tag 'gpio-v3.17-4' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-gpio: gpio: Fix potential NULL handler data in chained irqchip handler gpio: Fix gpio direction flags not getting set
-rw-r--r--drivers/gpio/gpiolib.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
index 15cc0bb65dda..c68d037de656 100644
--- a/drivers/gpio/gpiolib.c
+++ b/drivers/gpio/gpiolib.c
@@ -413,12 +413,12 @@ void gpiochip_set_chained_irqchip(struct gpio_chip *gpiochip,
413 return; 413 return;
414 } 414 }
415 415
416 irq_set_chained_handler(parent_irq, parent_handler);
417 /* 416 /*
418 * The parent irqchip is already using the chip_data for this 417 * The parent irqchip is already using the chip_data for this
419 * irqchip, so our callbacks simply use the handler_data. 418 * irqchip, so our callbacks simply use the handler_data.
420 */ 419 */
421 irq_set_handler_data(parent_irq, gpiochip); 420 irq_set_handler_data(parent_irq, gpiochip);
421 irq_set_chained_handler(parent_irq, parent_handler);
422} 422}
423EXPORT_SYMBOL_GPL(gpiochip_set_chained_irqchip); 423EXPORT_SYMBOL_GPL(gpiochip_set_chained_irqchip);
424 424
@@ -1674,7 +1674,7 @@ struct gpio_desc *__must_check __gpiod_get_index(struct device *dev,
1674 set_bit(FLAG_OPEN_SOURCE, &desc->flags); 1674 set_bit(FLAG_OPEN_SOURCE, &desc->flags);
1675 1675
1676 /* No particular flag request, return here... */ 1676 /* No particular flag request, return here... */
1677 if (flags & GPIOD_FLAGS_BIT_DIR_SET) 1677 if (!(flags & GPIOD_FLAGS_BIT_DIR_SET))
1678 return desc; 1678 return desc;
1679 1679
1680 /* Process flags */ 1680 /* Process flags */