File tree Expand file tree Collapse file tree 1 file changed +9
-2
lines changed Expand file tree Collapse file tree 1 file changed +9
-2
lines changed Original file line number Diff line number Diff line change @@ -4220,7 +4220,9 @@ int gpiochip_lock_as_irq(struct gpio_chip *gc, unsigned int offset)
4220
4220
}
4221
4221
}
4222
4222
4223
- if (test_bit (FLAG_IS_OUT , & desc -> flags )) {
4223
+ /* To be valid for IRQ the line needs to be input or open drain */
4224
+ if (test_bit (FLAG_IS_OUT , & desc -> flags ) &&
4225
+ !test_bit (FLAG_OPEN_DRAIN , & desc -> flags )) {
4224
4226
chip_err (gc ,
4225
4227
"%s: tried to flag a GPIO set as output for IRQ\n" ,
4226
4228
__func__ );
@@ -4283,7 +4285,12 @@ void gpiochip_enable_irq(struct gpio_chip *gc, unsigned int offset)
4283
4285
4284
4286
if (!IS_ERR (desc ) &&
4285
4287
!WARN_ON (!test_bit (FLAG_USED_AS_IRQ , & desc -> flags ))) {
4286
- WARN_ON (test_bit (FLAG_IS_OUT , & desc -> flags ));
4288
+ /*
4289
+ * We must not be output when using IRQ UNLESS we are
4290
+ * open drain.
4291
+ */
4292
+ WARN_ON (test_bit (FLAG_IS_OUT , & desc -> flags ) &&
4293
+ !test_bit (FLAG_OPEN_DRAIN , & desc -> flags ));
4287
4294
set_bit (FLAG_IRQ_IS_ENABLED , & desc -> flags );
4288
4295
}
4289
4296
}
You can’t perform that action at this time.
0 commit comments