Commit 36b7b26
usb: typec: tipd: Clear interrupts first
commit be5ae73 upstream.
Right now the interrupt handler first reads all updated status registers
and only then clears the interrupts. It's possible that a duplicate
interrupt for a changed register or plug state comes in after the
interrupts have been processed but before they have been cleared:
* plug is inserted, TPS_REG_INT_PLUG_EVENT is set
* TPS_REG_INT_EVENT1 is read
* tps6598x_handle_plug_event() has run and registered the plug
* plug is removed again, TPS_REG_INT_PLUG_EVENT is set (again)
* TPS_REG_INT_CLEAR1 is written, TPS_REG_INT_PLUG_EVENT is cleared
We then have no plug connected and no pending interrupt but the tipd
core still thinks there is a plug. It's possible to trigger this with
e.g. a slightly broken Type-C to USB A converter.
Fix this by first clearing the interrupts and only then reading the
updated registers.
Fixes: 45188f2 ("usb: typec: tipd: Add support for Apple CD321X")
Fixes: 0a4c005 ("usb: typec: driver for TI TPS6598x USB Power Delivery controllers")
Cc: [email protected]
Reviewed-by: Heikki Krogerus <[email protected]>
Reviewed-by: Neal Gompa <[email protected]>
Signed-off-by: Sven Peter <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
Signed-off-by: Greg Kroah-Hartman <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>1 parent 9d8bcaf commit 36b7b26
1 file changed
+11
-13
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
545 | 545 | | |
546 | 546 | | |
547 | 547 | | |
| 548 | + | |
| 549 | + | |
548 | 550 | | |
549 | | - | |
| 551 | + | |
550 | 552 | | |
551 | 553 | | |
552 | 554 | | |
553 | | - | |
| 555 | + | |
554 | 556 | | |
555 | 557 | | |
556 | 558 | | |
557 | | - | |
| 559 | + | |
558 | 560 | | |
559 | 561 | | |
560 | 562 | | |
561 | 563 | | |
562 | 564 | | |
563 | | - | |
564 | | - | |
565 | | - | |
566 | 565 | | |
567 | 566 | | |
568 | 567 | | |
| |||
668 | 667 | | |
669 | 668 | | |
670 | 669 | | |
| 670 | + | |
| 671 | + | |
| 672 | + | |
671 | 673 | | |
672 | | - | |
| 674 | + | |
673 | 675 | | |
674 | 676 | | |
675 | 677 | | |
676 | | - | |
| 678 | + | |
677 | 679 | | |
678 | 680 | | |
679 | 681 | | |
680 | | - | |
| 682 | + | |
681 | 683 | | |
682 | 684 | | |
683 | 685 | | |
684 | 686 | | |
685 | 687 | | |
686 | | - | |
687 | | - | |
688 | | - | |
689 | | - | |
690 | 688 | | |
691 | 689 | | |
692 | 690 | | |
| |||
0 commit comments