Commit graph

18605 commits

Author SHA1 Message Date
David Cormier
e0136bc7f4 ipod6g: add hardware H.264 video playback
Add S5L8702 VPU-B initialization, reset, bitstream input, frame output,
and cache maintenance to the iPod 6G target. Advertise it with
HAVE_HW_H264 and append a capability-gated decoder interface to the
plugin API.

Keep MP4 parsing, AAC decode and mixer output, A/V synchronization,
playback controls, resume state, and presentation in the multi-file
h264_player plugin. The target layer exposes decoder operations only.

Accept non-fragmented MP4/M4V containing Constrained Baseline H.264
through level 3.0, up to 640x480 at 30 fps, with optional AAC-LC audio.
Validate codec configuration and all sample-table relationships before
activating the hardware.

Read MP4 tables in bulk, boost the CPU while preparing them, and report
staged loading progress so long movies do not appear to hang during
startup.

Register the viewer and document its format limits and controls. The
libm4a compatibility fixes needed by video-first containers remain in
the preceding standalone change.

Tested on an iPod Classic 6G through an isolated Rolo nightly runtime:
H.264/AAC playback and M4V startup succeeded. Normal and
isolated-runtime iPod 6G builds also complete, and git diff --check is
clean.

Change-Id: I1e96c65c7d0b4231a94f602f8052f1b26d6e4a80
2026-09-13 08:07:59 -04:00
Christian Soffke
57a91121f6 root_menu: remove ACTIVITY_UNKNOWN hack for plugins
This was added in commit 8ff2c81bd to prevent a custom
root menu UI from flashing on screen in some themes
when returning from a plugin. Because the display isn't
updated in this scenario anymore, the workaround can be
safely eliminated.

Change-Id: Ie46b0921cfdad6e45a31661a5d451dc2717171d6
2026-09-12 08:33:27 -04:00
Christian Soffke
7e3782868c quickscreen: fix icon x-position off-by-one
Top, bottom, and right icons were displayed too far to
the left. Apparently a long-standing issue.

Icon width is 7, so subtract 7/2 = 3 pixels, instead
of 4, from calculated center, and only 7 pixels, instead
of 8, from the right vp edge.

Change-Id: I8440a4fef4778a66d56117a05b3fe4c36ac8dadd
2026-09-09 15:24:31 +02:00
Christian Soffke
f2985dc8a2 option_get_valuestring: fix trailing whitespace for UNIT_INT
Remove trailing whitespace from int settings, so
that right-aligned or centered values look correct
in Quickscreen for settings such as Brightness.

Change-Id: I006cf3c3e8b30be2246e7370f26e0428fa47e54b
2026-09-09 15:24:30 +02:00
Christian Soffke
10ec9bd530 quickscreen: eliminate excess/pad variable from vp setup
Simplifies commit da207d606 a bit more

Change-Id: I7ef98914153c0c0bfb5a3ff594fcb7e98f2dc5ba
2026-09-08 06:31:30 +02:00
Solomon Peachy
a967c5a018 Translation updates
- German (Wilfried Winkler)
 - Italian (Alessio Lenzi)

Change-Id: I52d6751364eae722743a5fdb1ece51c626498677
2026-09-07 22:21:49 -04:00
Solomon Peachy
54b26ac9f1 Translation updates:
- Chinese Simplified (Wang Ji)
 - Polish (Adam Rak)
 - Slovak (Matej Golian)
 - US English (Myself)

Change-Id: I939907d653309eabdb8d8c722bc953749a818898
2026-09-07 12:36:34 -04:00
Vencislav Atanasov
a70f30adf1 Bulgarian translation update
Change-Id: I96bc87fb873e9eb4a6ca96283873459314e0992f
2026-09-07 18:02:55 +03:00
Solomon Peachy
4f54dbec79 lang: restrict LANG_TOUCHSCREEN_FLICK_SHORTCUTS to touchscreen devices
Change-Id: Iaabc39901eadca6d36d663f7feca52273041afac
2026-09-07 09:52:58 -04:00
Solomon Peachy
76a2fdfc1f lang: Restrict LANG_COMPOSITE_VIDEO_OUTPUT to devices that have it
Currently just ipod6g, but treat it as a generic feature

Change-Id: Idda31455765908e4bd099cf5117b858bb3848f7f
2026-09-07 09:27:20 -04:00
Aidan MacDonald
376db9bf5b touchscreen: Add flick gesture support in list and WPS
Add some hardcoded flick gestures in the list UI:

Top   -> open quickscreen
Left  -> go back
Right -> go to the WPS

The WPS also gets a set of hardcoded flick shortcuts:

Top    -> open quickscreen
Left   -> go to file / database browser
Right  -> view playlist
Bottom -> context menu

These are enabled by default in pointing mode but can
be disabled using the "Touchscreen Flick Shortcuts"
option.

Change-Id: Ib30a338ebb9662cd136985da6d34ed5b041e4077
2026-09-07 08:56:38 -04:00
David Cormier
27332d64ad ipod6g: add composite output setting
Add Off, Auto, and On choices under the LCD settings menu for targets
with HAVE_COMPOSITE_VIDEO_OUT. Off is the default and leaves accessory
ADC, video registers, framebuffer conversion, output clocks, and CPU
boost untouched.

Auto enables output only for the qualified Philips dock signature. On
still requires a physically present, fully identified dock and permits
other detected composite accessories.

Document the menu behavior and the corresponding configuration-file
values in the iPod Classic manual.

Hardware tested on an iPod Classic 6G/7G with a Philips DCP750/37.

Change-Id: I649149daa331a95aa31110e1f2260a4a00ba789a
2026-09-07 08:55:22 -04:00
Christian Soffke
2ec4760117 disktidy: fix blank "Last Run" screen in some themes
Listen to GUI_EVENT_NEED_UI_UPDATE events and redraw, so
screen doesn't disappear if a theme draws over the  UI vp.
Occurs in situations when the SBS is redrawn after waking
the screen, or when the song changes.

Change-Id: I062e802959ab9d34d8c04b7f82da6b87efb5d739
2026-09-05 19:31:28 -04:00
Christian Soffke
da207d6067 quickscreen: refactor quickscreen_fix_viewports
Reduces GNU complexity score from 7 to 2.

Use separate inline functions that group setting
- x-position and width for left and right text viewport
- y-position and height for all text viewports
- position/dimensions for icons viewport

Change-Id: I14f4eee1f4d6fefa9acbf4a37970a535e77990b1
2026-09-06 00:47:04 +02:00
William Wilgus
45bd2b970b [Bugfix] FS#13975 - Keyremap plugin: text importer allow multiple ACTION_NONE entries
importing discards duplicate entries based on context + action code
however you may want multiple entries to map to the same action
and you can't do it within the same context

instead only consider an entry as a duplicate if they have the same
context, actioncode, button, and prebutton

Change-Id: I5aba3459505987ba37e26758aec62f02fcf8165a
2026-09-05 11:03:27 -04:00
Christian Soffke
569c2a53c8 quickscreen: fix string size calculation in quickscreen_fix_viewports
The parent vp wasn't set before checking the string size,
so, in certain scenarios, the size was calculated using a
different font than the one configured for the UI viewport.

Change-Id: I66bb2e496598811f6169a118de5cb83b451fa292
2026-09-04 17:32:48 +02:00
Aidan MacDonald
284af2aee8 lastfm_scrobbler: don't include rbversion.h
I intended to remove this in commit a8f8aa40b9 ("lastfm_scrobbler:
fetch rbversion from plugin API") but apparently forgot to do so,
so the scrobbler plugin was still rebuilding itself when RBVERSION
changes. Removing the header fixes that.

Change-Id: I6740d72ad35f5037a6a4a7580559a6c980b3225b
2026-09-03 16:49:08 +01:00
Christian Soffke
1a37ac8568 tree: skip redundant SBS refresh after Quickscreen
missing from 81cf120983

Change-Id: I161a777e62d0c8563cd7b588678549e2385c6fc9
2026-09-03 01:32:17 +02:00
Christian Soffke
81cf120983 quickscreen: always refresh SBS when leaving
Eliminate special case for transition to the Shortcuts menu.
The SBS refresh doesn't cause a screen update anymore, and
has negligible cost, so do it regardless.

Reverts the changes to quickscreen.c introduced in commit
dfd9c10 ("Eliminate skin updates in between activities")

+ simplify quickscreen_draw_item (no effect on behavior)

Change-Id: I3fca976de554c720cb69a41566fd0d0a7e6ea92d
2026-09-02 23:07:58 +02:00
Christian Soffke
8eefac3638 quickscreen: prevent out-of-bounds viewports
Fixes possible crash in case of pathological
UI vp dimensions, when attempting to clear a
QS item's vp.

E.g. https://github.com/federicoplg/musicOS
(commit c5e8570) configures a 1x1 UI viewport
at x=319 y=239, resulting in left/right item
viewports that have negative width or height.

Minor additional simplifications with no
effect on behavior:

- Combine actions requiring cleanup in a setup function.
  Put it below the existing cleanup function
- Rename quick_screen_quick to quickscreen_show, and
  quickscreen_run to quickscreen_main
- Iterate over items using FOR_QS_ITEMS macro
- Remove quickscreen_draw_item's int_value
- quickscreen_update: immediately continue if qs skinned
- Remove some obsolete #includes

Change-Id: I49aea3be837b861bdcd5132e84fef858df72327b
2026-09-02 14:03:17 -04:00
Marc Andersen
8ad69d6649 debug_menu: exclude HIBY RAM info from simulators
The "View RAM info" debug screen reports the host system's memory. It
calls sysinfo(2) and reads /proc/meminfo, but it is guarded only by
HIBY_LINUX.

That breaks the win32 simulator for all seven HIBY_LINUX targets -
agptekrocker, aigoerosq, hibyr1, hibyr3proii, hidizsap80max, xduoox20
and xduoox3ii - because HIBY_LINUX is still defined when the simulator
is cross-compiled for Windows, and mingw has no <sys/sysinfo.h>:

  apps/debug_menu.c:146:10: fatal error: sys/sysinfo.h: No such file or directory

Exclude simulators at all three sites - the include, the function and
the menu entry - matching the !defined(SIMULATOR) guards already used
elsewhere in this file. On a simulator the screen reports the developer
machine's memory rather than the simulated device's, so it does not
belong there on any host.

Verified by building agptekrocker three ways: as a Windows simulator,
which now succeeds; as a Linux simulator, which still succeeds; and for
the device itself with arm-rockbox-linux-gnueabi, which still succeeds
and keeps the screen.

Provenance, per the AI disclosure requirement in docs/CONTRIBUTING: this
change was drafted with Claude Code (Anthropic Claude Opus 5) at my
direction. Patch set 3 adopts Solomon Peachy's review suggestion to key
the guard off SIMULATOR rather than __linux__.

Change-Id: If8a09da82d22118924a3375e05739dcd5640e11d
2026-09-02 09:00:59 -04:00
Marc Andersen
a3e93c496e lua: only define strerror/strcoll on native targets
apps/plugins/lua/rockaux.c defines strerror() and strcoll() so the Lua
plugin has something to link against on native targets, which have no
libc providing them. Hosted targets do have a libc, and defining them
there is at best redundant.

On the Windows simulator it is worse than redundant. Both come from
mingw's libmsvcrt.a, and because that is a static archive the linker
pulls in an archive member for an unrelated symbol, then finds a second
definition of these two, so lua.rock fails to link:

  libmsvcrt.a(...): multiple definition of `strcoll';
  rockaux.o:rockaux.c:244: first defined here
  libmsvcrt.a(...): multiple definition of `strerror';
  rockaux.o:rockaux.c:47: first defined here

On hosted Linux there is no diagnostic, because glibc supplies these
from a shared library where a local definition simply wins. That means
the plugin has been quietly shadowing glibc's strerror() with a stub
that always returned NULL, which is presumably not intended either.

Guard both with CONFIG_PLATFORM & PLATFORM_NATIVE, matching the guard
used a few lines above for errno. Hosted targets now get the real
implementations from their own libc.

This also silences a "redeclared without dllimport attribute" warning
that GCC 16 emits for the same clash.

Verified by building xduoox3 as a Windows simulator, xduoox3 as a Linux
simulator, and sansaclip as a native ARM target: all three link cleanly
with no multiple-definition errors.

Provenance, per the AI disclosure requirement in docs/CONTRIBUTING: this
change was drafted with Claude Code (Anthropic Claude Opus 5) at my
direction. Patch set 2 adopts Aidan MacDonald's review suggestion to key
the guard off PLATFORM_NATIVE rather than _WIN32.

Change-Id: I8ffb6fd792147c9067afa708003b1285fb9d07a4
2026-09-01 15:14:02 -04:00
Mauricio Garrido
e498c0171a 3ds: Port refactor.
This commit does the following changes to the 3ds port:

- Rename the target from ctru to 3ds.
- Rename all files and functions with the ctru naming convention to 3ds.
- Created a new file and folder structure that will better integrate future console ports that share the same codebase.
- Fixed a buffer overflow bug in pcm code.

Change-Id: I17c6f86df64eb99dd2b653485d70832ff46b2ba8
2026-09-01 08:39:07 -04:00
Solomon Peachy
8e965d9159 FS#13994 - Updated Dutch Translation (Marc Aarts)
Change-Id: I3e6f3062ae9e5ddc63b65e2a23ad984f13b0ba72
2026-09-01 07:39:10 -04:00
Solomon Peachy
3664373ce7 FS#13992 - Updated Vietnamese Translation (Chu Khánh Hạnh)
Change-Id: Ic0567f972cebbe152ba9b9badf6d60c17b0e6ddc
2026-08-31 22:40:30 -04:00
Aidan MacDonald
a8f8aa40b9 lastfm_scrobbler: fetch rbversion from plugin API
This prevents needlessly rebuilding the plugin whenever
RBVERSION changes. (This was introduced by the removal
of CVS $Revision$ tags.)

Change-Id: Ic981c86319edb9c7eb7f0c1de71d4fbaba8989ac
2026-08-25 13:17:08 -04:00
Solomon Peachy
3f1ec2385f FS#13988 - Hungarian translation update (Gyúróczki Norbert)
Change-Id: Ic9f376f01b03d2564dbcb348a29e23569a2ebdd3
2026-08-25 10:11:41 -04:00
Michael McAllister
ec59f570dd keyboard: point-mode virtual keyboard for touchscreens
On large touchscreens the software keyboard can now run in "point mode". Keys are laid out finger-sized and tapped directly instead of being navigated with a cursor. Targets opt in with HAVE_KBD_POINT_MODE.

Key size is derived from LCD_DPI so a key is about 5mm across whatever the panel density, falling back to a fixed size where DPI is unknown.

A phone-style default layout in the UI font, across three flip pages of eight lines. Page two is page one shifted (i.e caps). Page three completes Latin-1 and adds additional accented letters common to the other European locales.

Space is drawn as an icon, since the UI font has no glyph for it.

Change-Id: Ibe2e305b3c22b1f9152358cf3864b9445b67b463
Co-Author: Claude Opus 4.8
2026-08-25 09:56:46 -04:00
Solomon Peachy
c04c2c3e0b FS13892: Voice feedback in Cuesheet browser
Voices the index, performer, and title of each cuesheet entry.  Uses
talkclips if any are available.

Change-Id: If54931cb5bbeb698f23146479192c1d6fe387657
2026-08-25 07:54:03 -04:00
Aidan MacDonald
1f1db58d44 sdmmc: add optional SCR register to tCardInfo struct
The SCR register is needed for detecting if the card
supports certain commands like SET_BLOCK_COUNT.

Change-Id: I48cbf8fff497b71fb831ba546a462b27bb30851f
2026-08-25 07:49:05 -04:00
Christian Soffke
789d796120 quickscreen: make %QT hide built-in UI
When an SBS uses the new %QT tag (added in 96f42a5)
to retrieve the name of the top Quickscreen setting
(thus likely wants to draw its own QS UI), we disable
the built-in interface until a new SBS file is applied.

Fixes lag encountered in Themify 2 due to invisible
built-in Quickscreen UI that kept being re-drawn.

Change-Id: Id4f295f959c2d16d1650f6fc066c3ceca6685405
2026-08-22 20:23:07 +02:00
Christian Soffke
50b13493d2 skin_engine: make skin file type available to parser
Keep track of the type of skin file being parsed,
in case a tag needs this info.

E.g. %Lt should be ignored in any skin other than
SBS files.

Change-Id: Ib7e52c3e6810196cb566adb65619a1b847cf20ef
2026-08-22 19:52:43 +02:00
Christian Soffke
9cd4352256 quickscreen: fix missing redraw for QS_VOL action
If volume was set as one of the Quickscreen items,
the value wasn't updated when pressing ACTION_QS_VOLUP
or -DOWN.

Change-Id: Ie6531535745592d7b53006560f1db8c5b7dbfb97
2026-08-22 13:30:54 -04:00
Christian Soffke
30a5f1d858 quickscreen: redraw only the relevant viewports
For each setting adjustment, the whole QS was
redrawn, including icons that never change at
all. Only redraw the viewports that contain a
setting that has been adjusted.

Change-Id: I74188fbf382a92c6e8bf517d9518c3a96bdd21ef
2026-08-22 13:14:29 -04:00
Christian Soffke
3d44fe94f3 skin_display: simplify skin_wait_for_action
Reduces GNU Complexity score from 6 to 2.

Slightly adjusts behavior:

1) With TIMEOUT_NOBLOCK and peak meters enabled,
   skin_wait_for_action always returned BUTTON_NONE,
   and did nothing else. Presumably unintentional.

   WPS was not affected, since it always uses HZ/5 for the
   timeout. The FM screen uses TIMEOUT_NOBLOCK only when
   fms_do_button_loop is called with update_screen == true.

   skin_wait_for_action now returns the result of get_action
   in any given scenario.

2) fixes incorrect next_refresh calculation when peak_meters
   are enabled on multiple screens

3) button loop now refreshes peak meters when
   current_tick >= next_refresh, instead of when
   current_tick > next_refresh

Change-Id: Iaca37dbdde6057f593659b2feb97b61ac4cc4b02
2026-08-22 15:35:10 +02:00
Aidan MacDonald
e3f622a851 Fix red in 2c5482cab9
The error is caused by grayscale >1bpp targets which do not
define LCD_RGBPACK().

Change-Id: Ifc995d720f11fe3df8ac534bd0777e162541dc54
2026-08-20 14:34:59 +01:00
neofright
2c5482cab9 splash: make iPod reFresh colour workaround pixel-format independent
The splash contrast workaround for the iPod reFresh themes compares
foreground and background colours against hard-coded RGB565 values.

This prevents the workaround from being applied on targets using other
pixel formats, such as XRGB8888 hosted targets.

Use LCD_RGBPACK() and SCREEN_COLOR_TO_NATIVE() to obtain the equivalent
colours for the active screen instead.

Code change and commit message generated by GPT-5.6 Sol. Compiled on
my hosted Eros Q build and confirmed working correctly.

Change-Id: Id15669bc7b8cec11bd4ee645c0b671db4499d2cd
2026-08-19 18:30:48 +01:00
Christian Soffke
8cfa4bfd8c quickscreen: update SBS after each button press
Quickscreen will ignore update_delay so that the SBS
is updated after each button press, without any lag.

The SBS may display settings that are adjusted by the
Quickscreen (e.g. cabbiev2's Shuffle and Repeat icons,
or the brightness slider included in themes like
Adwaitapod and Themify).

Change-Id: I28716e81cb77e235eb009bff91c96f510365f435
2026-08-16 16:33:38 +02:00
Christian Soffke
be62759005 quickscreen: fix MIN_LINES off-by-one
Appears to be a regression introduced in e454a39, where
MIN_LINES was increased from 4 to 5, along with changing
nb_lines <= MIN_LINES to nb_lines < MIN_LINES

The top and bottom sections are supposed to switch
from 2 to 1 lines if there are fewer available lines
than MIN_LINES.

Each of the three vertical section uses two lines,
resulting in overlapping viewports, if there are exactly
5 available lines.

Icons mentioned in the comment don't really play into
that.

Change-Id: I3a0e921d9f53a490fece0ce59457feaf84a80d3b
2026-08-16 16:33:37 +02:00
Christian Soffke
cacbd9aad2 skin_engine/quickscreen: get rid of unused code, update comment, naming
- remove quickscreen_set_option prototype left
  behind from commit a22749b
- make skin_load internal to the skin_engine
- remove skin_load's isfile parameter, since
  it's always true
- update comment for skin_data_load
- slight naming adjustments
- replace MAX_PATH with sizeof

Change-Id: I6fcbcf0d3e36730c5096f38d31f8e44b92498068
2026-08-16 14:39:43 +02:00
Jerry Shen
51d7d56803 ap80max: New hosted port
HibyOS-based target: keymaps, LED, powermgmt, bootloader and sim support,
plus cabbiev2 for the new 360x640x16 screen. Opus 5 helped w/ debugging
and the initial scaffolding.

Updated name to FB_STRIDE_MISMATCH, added simulator bmp and specs.

Change-Id: If797ac6581cf75d9d1fcf36e615ee03cf6f905d6
2026-08-13 17:55:06 -07:00
Solomon Peachy
0db3308e43 FS#13981 - Updated Russian Translation (Ivan Romaniuk-Mikhailovsky)
Change-Id: Ife14860048062922ac7b4eaffc42f9debe5a6ea2
2026-08-13 12:35:55 -04:00
Solomon Peachy
9641d54fee Fix remaining red from c93c7bfdcb -- dbtool and warble builds
Change-Id: I164aac856b821b9e7a96d807521912cb791e2152
2026-08-13 09:59:52 -04:00
Solomon Peachy
7e53e85cb2 Fix red in c93c7bfdcb -- Checkwps builds were failing
Change-Id: I5d81c35d4d31036954e094d6430ef31daa34642b
2026-08-13 09:36:46 -04:00
Aidan MacDonald
0e0982cb29 touchscreen: Kinetic scrolling v3
Tune accel/decel/press coefficients and add a braking force which
kicks in when swiping in the opposite direction of scrolling. This
is instead of the usual acceleration force.

Change-Id: I2b220c98674933a6957d6982020406342cd019bd
2026-08-13 08:24:51 -04:00
Aidan MacDonald
c93c7bfdcb touchscreen: Kinetic scrolling v2
Add configurable acceleration settings. There are 3 settings which
are applied at different times during scrolling. "accel" is used to
calculate the acceleration applied to the list based on the swipe
speed. "decel" determines the deceleration force applied based on
the list scroll speed, and "press" is an additional deceleration
force applied if you are pressing on the screen.

All settings have the general form:

    kinetic scroll accel: <a0> <a1> <delay>
    kinetic scroll decel: <a0> <a1> <delay>
    kinetic scroll press: <a0> <a1> <delay>

where the formula for the acceleration is "accel = a0 + a1*vel" and
"vel" is the input velocity (swipe speed for accel, list scroll speed
for decel/press).

The delay parameter is a value in milliseconds which acts as a grace
period where the acceleration will *not* be applied. For example, if
you specify 250ms for decel, then deceleration will not kick in until
250ms after scrolling starts. For press, the delay is based on the
duration of the touchscreen press.

All settings have sane default values and don't need to be configured
to enable kinetic scrolling; it is always enabled. But the settings are
there for those who want to tweak the behavior.

Change-Id: I9723b496b2b5d3fb3643af60b169754fdba497f0
2026-08-13 08:24:28 -04:00
Aidan MacDonald
a89e1f999d touchscreen: Add flick detector to touchscreen test
Change-Id: I9b41881e3e9a271f0532cc9c500e0511c606e895
2026-08-13 08:04:01 -04:00
Aidan MacDonald
814747492c touchscreen: Add flick gesture detector
Add a low-overhead detector for flick gestures, which are quick
swiping motions from the screen edges.

Change-Id: I3ef2dad328fdf566923575d437376e100a2ab8df
2026-08-13 08:03:37 -04:00
Aidan MacDonald
0ca22b9a71 touchscreen: Improved kinetic scrolling in lists
Kinetic scrolling now accelerates when repeatedly swiping over
the screen, so you can scroll through large lists easily without
using the scrollbar. Press & hold to slow down and stop.

Menu items can no longer be selected during a kinetic scroll
event, to reduce the chance of accidental selections.

Change-Id: I05b7d5fe6681a9edf53096b1fa265442fb31bf33
2026-08-13 08:02:29 -04:00
Michael McAllister
ef20bc4c78 usb: keep the USB Serial setting across connects
Debug -> USB Serial calls usb_core_enable_driver(USB_DRIVER_SERIAL, ...), which sets a flag inside usb_core. usb_core_init() clears every driver's enabled flag on each connect and runs after the toggle, so the choice is gone before any descriptor is built: the menu reports the new state and nothing changes.

Hold the setting in firmware/usb.c and reapply it from usb_configure_drivers() on each connect, which is where the other drivers are already configured. usb_set_serial()/usb_get_serial() sit alongside usb_set_hid(), which works this way for the same reason.

toggle_usb_core_driver() goes with it: toggle_usb_serial() was its only
caller, and a generic wrapper around a call that cannot persist is not worth keeping.

Affects any target building USB_ENABLE_SERIAL.

Change-Id: I171a532d23cc9cf0efe0a01c2836b69846333a4d
Co-Authored-By: Claude Opus 4.8
2026-08-10 15:32:36 -04:00