|
28 | 28 |
|
29 | 29 | #if CFG_TUH_ENABLED && defined(TUP_USBIP_OHCI)
|
30 | 30 |
|
| 31 | +#ifndef OHCI_RHPORTS |
| 32 | +#error OHCI is enabled, but OHCI_RHPORTS is not defined. |
| 33 | +#endif |
| 34 | + |
31 | 35 | //--------------------------------------------------------------------+
|
32 | 36 | // INCLUDE
|
33 | 37 | //--------------------------------------------------------------------+
|
@@ -620,29 +624,30 @@ void hcd_int_handler(uint8_t hostid)
|
620 | 624 | //------------- RootHub status -------------//
|
621 | 625 | if ( int_status & OHCI_INT_RHPORT_STATUS_CHANGE_MASK )
|
622 | 626 | {
|
623 |
| - uint32_t const rhport_status = OHCI_REG->rhport_status[0] & RHPORT_ALL_CHANGE_MASK; |
624 |
| - |
625 |
| - // TODO dual port is not yet supported |
626 |
| - if ( rhport_status & RHPORT_CONNECT_STATUS_CHANGE_MASK ) |
| 627 | + for (int i = 0; i < OHCI_RHPORTS; i++) |
627 | 628 | {
|
628 |
| - // TODO check if remote wake-up |
629 |
| - if ( OHCI_REG->rhport_status_bit[0].current_connect_status ) |
| 629 | + uint32_t const rhport_status = OHCI_REG->rhport_status[i] & RHPORT_ALL_CHANGE_MASK; |
| 630 | + if ( rhport_status & RHPORT_CONNECT_STATUS_CHANGE_MASK ) |
630 | 631 | {
|
631 |
| - // TODO reset port immediately, without this controller will got 2-3 (debouncing connection status change) |
632 |
| - OHCI_REG->rhport_status[0] = RHPORT_PORT_RESET_STATUS_MASK; |
633 |
| - hcd_event_device_attach(hostid, true); |
634 |
| - }else |
635 |
| - { |
636 |
| - hcd_event_device_remove(hostid, true); |
| 632 | + // TODO check if remote wake-up |
| 633 | + if ( OHCI_REG->rhport_status_bit[i].current_connect_status ) |
| 634 | + { |
| 635 | + // TODO reset port immediately, without this controller will got 2-3 (debouncing connection status change) |
| 636 | + OHCI_REG->rhport_status[i] = RHPORT_PORT_RESET_STATUS_MASK; |
| 637 | + hcd_event_device_attach(i, true); |
| 638 | + }else |
| 639 | + { |
| 640 | + hcd_event_device_remove(i, true); |
| 641 | + } |
637 | 642 | }
|
638 |
| - } |
639 | 643 |
|
640 |
| - if ( rhport_status & RHPORT_PORT_SUSPEND_CHANGE_MASK) |
641 |
| - { |
| 644 | + if ( rhport_status & RHPORT_PORT_SUSPEND_CHANGE_MASK) |
| 645 | + { |
642 | 646 |
|
643 |
| - } |
| 647 | + } |
644 | 648 |
|
645 |
| - OHCI_REG->rhport_status[0] = rhport_status; // acknowledge all interrupt |
| 649 | + OHCI_REG->rhport_status[i] = rhport_status; // acknowledge all interrupt |
| 650 | + } |
646 | 651 | }
|
647 | 652 |
|
648 | 653 | //------------- Transfer Complete -------------//
|
|
0 commit comments