Skip to content

Commit c581230

Browse files
committed
USBHOST: TARGET_STM fix in hal for hub support
1 parent fdec620 commit c581230

File tree

4 files changed

+22
-8
lines changed

4 files changed

+22
-8
lines changed

targets/TARGET_STM/TARGET_STM32F2/device/stm32f2xx_hal_hcd.c

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -930,11 +930,15 @@ static void HCD_HC_IN_IRQHandler(HCD_HandleTypeDef *hhcd, uint8_t chnum)
930930
/* re-activate the channel */
931931
tmpreg = USBx_HC(chnum)->HCCHAR;
932932
tmpreg &= ~USB_OTG_HCCHAR_CHDIS;
933-
tmpreg |= USB_OTG_HCCHAR_CHENA;
933+
if ( hhcd->hc[chnum].urb_state != URB_ERROR) {
934+
tmpreg |= USB_OTG_HCCHAR_CHENA;
935+
reactivate = 1;
936+
}
934937
USBx_HC(chnum)->HCCHAR = tmpreg;
935-
reactivate = 1;
936938
}
937939
__HAL_HCD_CLEAR_HC_INT(chnum, USB_OTG_HCINT_CHH);
940+
if (hhcd->hc[chnum].state == 0) reactivate = 1;
941+
938942
if (reactivate == 0) HAL_HCD_HC_NotifyURBChange_Callback(hhcd, chnum, hhcd->hc[chnum].urb_state);
939943
}
940944

targets/TARGET_STM/TARGET_STM32F4/device/stm32f4xx_hal_hcd.c

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -931,10 +931,14 @@ static void HCD_HC_IN_IRQHandler(HCD_HandleTypeDef *hhcd, uint8_t chnum)
931931
/* re-activate the channel */
932932
tmpreg = USBx_HC(chnum)->HCCHAR;
933933
tmpreg &= ~USB_OTG_HCCHAR_CHDIS;
934-
tmpreg |= USB_OTG_HCCHAR_CHENA;
934+
if ( hhcd->hc[chnum].urb_state != URB_ERROR) {
935+
tmpreg |= USB_OTG_HCCHAR_CHENA;
936+
reactivate = 1;
937+
}
935938
USBx_HC(chnum)->HCCHAR = tmpreg;
936-
reactivate = 1;
939+
937940
}
941+
if (hhcd->hc[chnum].state == 0) reactivate = 1;
938942
__HAL_HCD_CLEAR_HC_INT(chnum, USB_OTG_HCINT_CHH);
939943
if (reactivate == 0) HAL_HCD_HC_NotifyURBChange_Callback(hhcd, chnum, hhcd->hc[chnum].urb_state);
940944
}

targets/TARGET_STM/TARGET_STM32F7/device/stm32f7xx_hal_hcd.c

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -932,11 +932,14 @@ static void HCD_HC_IN_IRQHandler (HCD_HandleTypeDef *hhcd, uint8_t chnum)
932932
/* re-activate the channel */
933933
tmpreg = USBx_HC(chnum)->HCCHAR;
934934
tmpreg &= ~USB_OTG_HCCHAR_CHDIS;
935-
tmpreg |= USB_OTG_HCCHAR_CHENA;
935+
if ( hhcd->hc[chnum].urb_state != URB_ERROR) {
936+
tmpreg |= USB_OTG_HCCHAR_CHENA;
937+
reactivate = 1;
938+
}
936939
USBx_HC(chnum)->HCCHAR = tmpreg;
937-
reactivate = 1;
938940
}
939941
__HAL_HCD_CLEAR_HC_INT(chnum, USB_OTG_HCINT_CHH);
942+
if (hhcd->hc[chnum].state == 0) reactivate = 1;
940943
if (reactivate == 0 )HAL_HCD_HC_NotifyURBChange_Callback(hhcd, chnum, hhcd->hc[chnum].urb_state);
941944
}
942945

targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_hcd.c

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -939,11 +939,14 @@ static void HCD_HC_IN_IRQHandler (HCD_HandleTypeDef *hhcd, uint8_t chnum)
939939
/* re-activate the channel */
940940
tmpreg = USBx_HC(chnum)->HCCHAR;
941941
tmpreg &= ~USB_OTG_HCCHAR_CHDIS;
942-
tmpreg |= USB_OTG_HCCHAR_CHENA;
942+
if ( hhcd->hc[chnum].urb_state != URB_ERROR) {
943+
tmpreg |= USB_OTG_HCCHAR_CHENA;
944+
reactivate = 1;
945+
}
943946
USBx_HC(chnum)->HCCHAR = tmpreg;
944-
reactivate = 1;
945947
}
946948
__HAL_HCD_CLEAR_HC_INT(chnum, USB_OTG_HCINT_CHH);
949+
if (hhcd->hc[chnum].state == 0) reactivate = 1;
947950
if (reactivate == 0) HAL_HCD_HC_NotifyURBChange_Callback(hhcd, chnum, hhcd->hc[chnum].urb_state);
948951
}
949952

0 commit comments

Comments
 (0)