Skip to content

Conversation

@HiFiPhile
Copy link
Collaborator

Describe the PR
Tested on LPC4322 with new dynamic_switch example.

Rebase after #3378

Copilot AI review requested due to automatic review settings December 8, 2025 08:46
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR adds comprehensive deinitialization support to TinyUSB, enabling dynamic switching between USB device and host modes at runtime. The changes introduce new pre-init and post-deinit callback hooks, implement deinit functions across multiple USB controller drivers, and include a new example demonstrating the dual-role switching capability.

Key Changes:

  • Added tusb_pre_init_cb() and tusb_post_deinit_cb() callback hooks with weak default implementations for MCU-specific initialization/cleanup
  • Implemented deinit support across multiple USB drivers: dwc2 (DCD/HCD), EHCI, and chipidea ci_hs (DCD/HCD)
  • Created a new dynamic_switch example demonstrating runtime switching between device and host modes via button press

Reviewed changes

Copilot reviewed 27 out of 27 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
src/tusb.h Declares new pre-init and post-deinit callback hooks
src/tusb.c Provides weak default implementations for the new callback hooks
src/host/usbh.c Integrates pre-init/post-deinit callbacks into host stack init/deinit flow, changes to TU_ASSERT
src/device/usbd.c Integrates pre-init/post-deinit callbacks into device stack init/deinit flow, changes to TU_ASSERT
src/portable/synopsys/dwc2/dwc2_common.h Declares dwc2_core_deinit function
src/portable/synopsys/dwc2/dwc2_common.c Implements core deinit with soft disconnect and reset
src/portable/synopsys/dwc2/hcd_dwc2.c Adds HCD deinit, removes CONIDSTSCHNG interrupt handling, fixes DATATOGGLE_ERR handling
src/portable/synopsys/dwc2/dcd_dwc2.c Adds DCD deinit implementation
src/portable/ehci/ehci_api.h Declares ehci_deinit function
src/portable/ehci/ehci.c Implements EHCI deinit with interrupt/schedule disable
src/portable/chipidea/ci_hs/hcd_ci_hs.c Adds HCD deinit, fixes comment from "device" to "host", fixes full-speed logic
src/portable/chipidea/ci_hs/dcd_ci_hs.c Implements DCD deinit with interrupt disable and endpoint flushing
hw/bsp/stm32u5/family.c Implements tusb_pre_init_cb for role-specific VBUS/OTG configuration, fixes interrupt handler naming
hw/bsp/stm32h7rs/family.c Implements tusb_pre_init_cb with rhport-aware VBUS/OTG configuration
hw/bsp/stm32h7rs/boards/stm32h7s3nucleo/board.h Fixes button active_state from 1 to 0 (active low)
hw/bsp/lpc43/family.c Adds GPIO configuration for VIF_OUT, conditionally includes EA4357 board-specific code
examples/dual/dynamic_switch/* New example demonstrating dynamic device/host mode switching with CDC echo and host enumeration

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@github-actions
Copy link

github-actions bot commented Dec 8, 2025

Size Difference Report

Because TinyUSB code size varies by port and configuration, the metrics below represent the averaged totals across all example builds.

Note: If there is no change, only one value is shown.

Changes >1% in size

file .text .data .bss size % diff
hcd_ci_hs.c 190 ➙ 184 (-6) 0 0 190 ➙ 184 (-6) -3.2%
tusb.c 418 ➙ 424 (+6) 359 ➙ 361 (+2) 3 420 ➙ 425 (+5) +1.2%
TOTAL 608 359 ➙ 361 (+2) 3 610 ➙ 609 (-1) -0.2%

Changes <1% in size

file .text .rodata .data .bss size % diff
cdc_device.c 1331 ➙ 1328 (-3) 16 20 670 ➙ 669 (-1) 2000 ➙ 1996 (-4) -0.2%
dcd_ci_hs.c 1762 0 0 1280 ➙ 1344 (+64) 2530 ➙ 2541 (+11) +0.4%
ehci.c 2761 ➙ 2763 (+2) 0 0 5970 ➙ 6043 (+73) 7537 ➙ 7597 (+60) +0.8%
hcd_dwc2.c 4893 ➙ 4925 (+32) 30 0 512 5434 ➙ 5467 (+33) +0.6%
hcd_stm32_fsdev.c 3282 ➙ 3287 (+5) 0 1 420 3703 ➙ 3708 (+5) +0.1%
hub.c 1235 8 8 29 1268 ➙ 1269 (+1) +0.1%
usbd.c 3179 ➙ 3188 (+9) 57 90 276 3519 ➙ 3528 (+9) +0.3%
usbh.c 4374 ➙ 4386 (+12) 60 ➙ 54 (-6) 63 ➙ 62 (-1) 954 ➙ 951 (-3) 5415 ➙ 5423 (+8) +0.1%
TOTAL 22817 ➙ 22874 (+57) 171 ➙ 165 (-6) 182 ➙ 181 (-1) 10111 ➙ 10244 (+133) 31406 ➙ 31529 (+123) +0.4%
No changes
file .text .rodata .data .bss size % diff
audio_device.c 2855 0 1248 1679 4529 +0.0%
cdc_host.c 6596 487 15 1539 8357 +0.0%
dcd_ch32_usbfs.c 1472 0 0 2444 3916 +0.0%
dcd_ch32_usbhs.c 1648 0 0 448 2096 +0.0%
dcd_ci_fs.c 1925 0 0 1290 3215 +0.0%
dcd_da146xx.c 3067 0 0 144 3211 +0.0%
dcd_dwc2.c 4160 ➙ 4161 (+1) 25 0 263 4447 +0.0%
dcd_eptri.c 2270 0 0 259 2529 +0.0%
dcd_khci.c 1953 0 0 1290 3243 +0.0%
dcd_lpc17_40.c 1470 0 0 648 1794 +0.0%
dcd_lpc_ip3511.c 1463 0 0 264 1639 +0.0%
dcd_mm32f327x_otg.c 1478 0 0 1290 2768 +0.0%
dcd_msp430x5xx.c 1796 0 0 176 1972 +0.0%
dcd_musb.c 2079 0 0 160 2239 +0.0%
dcd_nrf5x.c 2919 0 0 292 3211 +0.0%
dcd_nuc120.c 1093 0 0 78 1171 +0.0%
dcd_nuc121.c 1167 0 0 101 1268 +0.0%
dcd_nuc505.c 0 0 1529 157 1686 +0.0%
dcd_rp2040.c 736 20 580 1029 2365 +0.0%
dcd_rusb2.c 2917 0 0 156 3073 +0.0%
dcd_samd.c 1032 0 0 266 1298 +0.0%
dcd_samg.c 1319 0 0 72 1391 +0.0%
dcd_stm32_fsdev.c 2556 0 0 291 2847 +0.0%
dfu_device.c 744 28 712 184 929 +0.0%
dfu_rt_device.c 157 0 134 0 156 +0.0%
dwc2_common.c 594 29 0 0 610 +0.0%
ecm_rndis_device.c 1037 0 1 2272 3310 +0.0%
fsdev_common.c 180 0 0 0 180 +0.0%
hcd_ch32_usbfs.c 2484 0 0 498 2982 +0.0%
hcd_khci.c 2442 0 0 449 2891 +0.0%
hcd_musb.c 3073 0 0 157 3230 +0.0%
hcd_pio_usb.c 262 0 240 0 502 +0.0%
hcd_rp2040.c 936 73 420 512 1941 +0.0%
hcd_rusb2.c 2923 0 0 245 3168 +0.0%
hcd_samd.c 2220 0 0 324 2544 +0.0%
hid_device.c 1120 44 997 115 1235 +0.0%
hid_host.c 1206 0 0 1250 2456 +0.0%
midi_device.c 1129 0 991 596 1723 +0.0%
midi_host.c 1353 7 7 3740 5097 +0.0%
msc_device.c 2506 108 2274 538 3044 +0.0%
msc_host.c 1589 0 0 394 1984 +0.0%
mtp_device.c 1622 22 1385 578 2208 +0.0%
ncm_device.c 1517 28 1408 5824 7354 +0.0%
ohci.c 1942 0 0 2414 4356 +0.0%
rp2040_usb.c 124 70 574 4 772 +0.0%
rusb2_common.c 160 0 16 0 176 +0.0%
tusb_fifo.c 844 ➙ 845 (+1) 0 477 0 839 +0.0%
typec_stm32.c 820 8 2 12 842 +0.0%
usbc.c 420 2 20 166 608 +0.0%
usbd_control.c 524 0 474 78 601 +0.0%
usbtmc_device.c 2178 24 70 294 2504 +0.0%
vendor_device.c 636 0 538 470 1105 +0.0%
video_device.c 4402 6 1851 471 4865 +0.0%
TOTAL 89115 ➙ 89117 (+2) 981 15963 35921 128477 +0.0%

Signed-off-by: HiFiPhile <admin@hifiphile.com>
Signed-off-by: HiFiPhile <admin@hifiphile.com>
Signed-off-by: HiFiPhile <admin@hifiphile.com>
Signed-off-by: HiFiPhile <admin@hifiphile.com>
Signed-off-by: HiFiPhile <admin@hifiphile.com>
Signed-off-by: HiFiPhile <admin@hifiphile.com>
Signed-off-by: HiFiPhile <admin@hifiphile.com>
Signed-off-by: HiFiPhile <admin@hifiphile.com>
Signed-off-by: Zixun LI <admin@hifiphile.com>
Signed-off-by: HiFiPhile <admin@hifiphile.com>
Signed-off-by: Zixun LI <admin@hifiphile.com>
Signed-off-by: HiFiPhile <admin@hifiphile.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants