Commit graph

11970 commits

Author SHA1 Message Date
Aidan MacDonald
44afcc8cbe firmware: add build rules for RegGen-generated headers
Change-Id: I86ff1a39aec1ee428abd6464483ae3732fdf9196
2025-12-30 13:53:48 -05:00
Aidan MacDonald
a8d792c248 firmware: add RegGen API header
Change-Id: Ifb79416f91a40d0a6538ba0b4a3c7b0496543a5f
2025-12-30 13:53:48 -05:00
Aidan MacDonald
1064aa8dab firmware: add RegGen description for Cortex-M
Change-Id: Iec8c8f1f962653cfa27c50b2bac8b2092eb7afce
2025-12-30 13:53:48 -05:00
Aidan MacDonald
e7b139b06a firmware: add RegGen description for STM32H743
Change-Id: I084c54bd1c2c2974e5fd0b1bfea68697b2b394ba
2025-12-30 13:53:48 -05:00
Sebastian Leonhardt
6552554939 Creative ZEN: split ZEN V keymaps off from other ZEN targets
The ZEN V target is the only one which has volume buttons,
but lacks the menu and shortcut buttons.
IMO an independant keymap will make maintenance easier.

Change-Id: Ide79fab629b13eae94946561d99052e570c0e4f2
2025-12-29 23:20:06 +01:00
Aidan MacDonald
cb9094dabb arm: fix start_thread() on Cortex-M targets
The layout of 'struct regs' is a bit different on Cortex-M
and start_thread() wasn't updated to match; it was loading
'sp' from the wrong offset.

Change-Id: I57dbef26809821d411dc86e2066a2f53e78a3f2d
2025-12-29 13:04:54 -05:00
Petr Mikhalicin
6f7d70797e plugin api: Add audio_pre_ff_rewind to plugin's API
According to wps code audio_pre_ff_rewind function should be called
before any rewinding. It stops playback and automatically resumes it
after audio_ff_rewind call

So, let's add audio_pre_ff_rewind to plugin's API

Lua scipts were tested:
```lua
-- has issue with rewinding
rb.audio("ff_rewind", 0)
```

```lua
-- no issue with rewinding
rb.audio("pre_ff_rewind")
rb.audio("ff_rewind", 0)
```

Change-Id: I2ad6b9c396760b2086bc0a28633a1c80c3512739
2025-12-29 19:58:26 +05:00
Marc Aarts
1183b1ab1b Rockbox for the HiBy R3 Pro II/R1
Original author Melissa Autumn (https://codeberg.org/oopsallnaps/rockbox-hibyos) with contributions from Marc Aarts.

Adaptation to Rockbox standards by Marc Aarts

Change-Id: I09e5af7ba0a75c648e4b9fd424badc2d3665c943
2025-12-27 15:44:54 -05:00
William Wilgus
44a5163061 firmware: fix misdefinition of QUEUE_GET_THREAD macro #2?
Broke the sim, just above it has..

struct queue_sender_list
{
    /* If non-NULL, there is a thread waiting for the corresponding event */
    /* Must be statically allocated to put in non-cached ram. */
    struct thread_entry *senders[QUEUE_LENGTH]; /* message->thread map */
    struct __wait_queue list;                   /* list of senders in map */
    /* Send info for last message dequeued or NULL if replied or not sent */
    struct thread_entry * volatile curr_sender;
    struct blocker blocker;
};

Change-Id: Ifc7a5fe92ebe5f06c0dc5655ce9725752e606381
2025-12-26 09:24:11 -05:00
Aidan MacDonald
28fa9ca760 firmware: fat: fix sector_t passed to 64-bit format strings
sector_t is still 32-bit on most targets, resulting in compile
warnings on debug builds when used with an %llu/%llx format.
Fix by always casting the sector to uint64_t.

Change-Id: I5afc4a0ae170981c304274806e00ac07be232cd8
2025-12-24 09:30:47 -05:00
Aidan MacDonald
d21d8f49fc firmware: fix misdefinition of QUEUE_GET_THREAD macro
This tries to access 'struct event_queue->send', but that
is only available if HAVE_EXTENDED_MESSAGING_AND_NAME is set.
This is not defined for bootloaders; this is a problem when
trying to build a bootloader with debugging enabled, because
the misdefined macro is used in some KERNEL_ASSERTs that get
compiled out on non-debug builds.

Change-Id: I334eedcda1ee7047c8dddcb7fa0c9717156f2a0a
2025-12-24 09:30:18 -05:00
Christian Soffke
eb49b82d33 backlight-sw-fading: FS#13717 fix brightness overshoot
Change-Id: If4cb0a1993c93e6ba524cbed8690bb6c1664908e
2025-12-19 08:20:07 +01:00
Dana Conrad
75df18f2c1 FS#13712: ErosQ: move all of sound hw init to audiohw_init()
Fixes voice not working after booting but before starting music playback
while line-out is plugged in. Doesn't seem to break anything on hw1 or
hw4.

Change-Id: I7b830adeeceae621177c94353e4814aa6ad0e1ec
2025-12-12 22:44:22 -05:00
Aidan MacDonald
fe11a04579 mips: show version info on exception panic screen
Change-Id: Iff315869e9190ce7d68c672c6cc78cb1fc301264
2025-12-11 15:48:50 +00:00
William Wilgus
8a773fb29f lua -- remove strtol and strtoul replace with rb->strtol and rb->strtoul
Change-Id: Ib7ba358b6488b946404c0c4cd8773e948810a7f7
2025-12-06 18:11:13 -05:00
Solomon Peachy
dada036b10 configure: Partial revert of 6c6bdbf60e
Turns out I compile-tested stale trees instead of the broken change

Net result is just the simpler MIPS revision (32/64/"classic") lookup rather than
the sub-revision (eg mips32r2 etc).

Change-Id: Ideebe522d29132f00f3769222f3846000b3a89fd
2025-12-06 15:54:43 -05:00
Solomon Peachy
6c6bdbf60e configure: Revamp MIPS architecture version+revision detection
This allows us to easily distinguish between mips32 and mips32r2

(Works at least as far back as gcc 4.9)

Change-Id: I2bcba194fd9cbeedf76cea739252271908bf73d0
2025-12-06 14:58:40 -05:00
Solomon Peachy
481cc70fe0 libc: Add an implementation of strtol/strtoul and export it via plugins
These were lifted from the lua plugin.

sdl, doom, puzzles updated to use the exported version

todo: lua, maybe?
also: convert uses of atoi [back] to strtol

Change-Id: I5a1ebbe8d8c99349e594ab9bbbce474e7645b4e9
2025-12-06 09:04:36 -05:00
Solomon Peachy
afe128f4cc arm: Profile/variation detection improvements
* Detection of 64-bit Arm v8-a
 * Proper detection of integer division support
   * always on v7-m, v8-a, v9-a, v8-m.main
   * sometimes on v7-a, v7-r, v8-r
   * never on v8-m.base v6-m, v6 and older "classic"
   * tl;dr: Rely on toolchain preprocessor definition

For the most part these additional variations won't acutally work
for native target builds, but sane -A detection is needed for
"local" builds now. -R detection is left out as it's not likely
to matter.

Change-Id: I8f6a52edc4d14490fc00e2f487406eca701eef02
2025-12-04 20:43:30 -05:00
Aidan MacDonald
0f4cc33d26 touchscreen: Increase report rate to 25fps
The touchscreen repeat interval effectively controls the report
rate of the touchscreen to the action code. Touch interactions
are smoother with a faster refresh rate, but the CPU needs to be
fast enough to keep up, or we risk queue overflows.

25fps is the minimum required to appear smooth, and probably all
targets will be able to handle the extra CPU load.

Change-Id: I96dcc80ea2ce8b915ff5682360c2e719b835388d
2025-12-04 07:10:17 -05:00
Aidan MacDonald
9e254acab3 touchscreen: Update action system touch event reporting
Add a cleaner API for reporting touch events and deprecate the old
action_get_touchscreen_press() API. The old API is now emulated by
using the new one internally.

Change-Id: I001378e66f9c81806f134f011420d671954fcde2
2025-12-04 07:10:17 -05:00
Solomon Peachy
fa164f89e0 tools: Detect A-profile ARM cores for hosted and sim builds
The only v7-a targets we have are built using the androidndk (with gcc
4.9) but it is possible to perform "self-hosted" builds for eg the
simulator or the sdlapp.

Where this gets messy is the considerable amount of inline arm
asm we have.

Native builds will need considerably more work to support
v7-a processors, but we have to start somewhere.

(Note that this contains parts of commit 508bfabe8, which had to
 be reverted due to breakage)

Change-Id: Ia1c8e10d21a976c68fdaae58e4d776854b63186c
2025-12-03 22:49:25 -05:00
Solomon Peachy
c26981a9c6 samsungypr0: Fix red in bbcf210c94 due to a merge error
Change-Id: I78b69e67a0f0cd786c79da78245d93838a9142b9
2025-12-03 22:39:33 -05:00
Solomon Peachy
bbcf210c94 Nuke maemo (nokian800/nokian900) and [open]pandora targets
They haven't seen any work since 2013, and likely hasn't compiled in at
least a couple of releases -- not that we ever "released" anything for
these targets.

Futhermore, upstream for both has been effectively dead for about as
long, and there's been no user reports of these being used since 2017
(and even then only in passing).

It isn't worth the effort to triage their current state, much less
uplift into something supportable, while the maintenance burden of
keeping these things in-tree can be demonstrated by the diffstat.

Change-Id: Id93bd450679d1b75e2c74295b3ae1548cd241b24
2025-12-03 20:42:02 -05:00
Aidan MacDonald
c47c075bd3 touchscreen: Fix event reporting in button driver
The way the button driver reported touch events was problematic
and made it impossible to detect if a touch started or if it was
a continuation of an existing touch.

Now, the first detected touch event gets BUTTON_TOUCHSCREEN and
all subsequent touch events while the screen is pressed will get
the BUTTON_REPEAT bit set. When the screen is released the final
event will have the BUTTON_REL bit set.

Change-Id: Ia456a22b2180031555a82231c2af32576bc5f2cb
2025-12-03 20:34:52 -05:00
Solomon Peachy
11163721d6 audio: Fix up final red from a79bdaf462
Change-Id: I8de562516e54e2101746ea54d91461661439bcf5
2025-12-02 22:16:34 -05:00
Solomon Peachy
6bdd3de554 Move hosted codec header files back under firmware/export
This is a partial revert of a79bdaf46

It caused all sorts of build breakages for misc stuff like the dbtool,
which doesn't include any per-target build directories

Change-Id: I493a33c1859706679972e47c96196223415985d9
2025-12-02 20:35:18 -05:00
Solomon Peachy
c2952136c6 audio: Fix up more red from a79bdaf462
Change-Id: Ie6a68f2a14489bc84ddc57b73b37ddb94b7dc0ac
2025-12-02 20:35:18 -05:00
Solomon Peachy
fd6d6c48b4 audio: Fix up most of the red from a79bdaf462
The rest involves some wrangling.

Change-Id: I5459c255677cbacf8cc8b0c28492d27c58971cb1
2025-12-02 20:09:47 -05:00
Solomon Peachy
a79bdaf462 audio: Move hosted audio "codec" drivers into their respective target dirs
They are nearly entirely generic wrappers around ALSA controls, unique
per target, and are ripe for further consolidation.

Change-Id: I05e4a450e3e89e03616906601c4f8fa46200dff5
2025-12-02 18:59:50 -05:00
Aidan MacDonald
806b71b2ed hosted: consolidate sysfs-based battery measurement code
Several hosted targets read their battery state from a fixed
sysfs path. Get rid of the duplicated code by handling this
common case in power-linux.c.

Some targets use non-standard units in sysfs instead of the
typical microvolts / microamps, so allow the scale factors
to be overridden by the target.

Change-Id: I31dc4ffc7a2d2c066d00a74070f9f9849c1663d0
2025-12-01 13:39:04 +00:00
Solomon Peachy
7ffdf50ba5 ibasso: Use generic hosted sysfs accessors
This keeps the enumerated list of sysfs parameters.

Change-Id: Ia63549809490eba02b3f75b3d2f95745636e01a9
2025-11-30 19:21:06 -05:00
Solomon Peachy
9020360f66 hosted: Pull tinyalsa out of ibasso tree so other targets can use it
Change-Id: I85e31a0d0993d3494568abbc05ff9b114d493d75
2025-11-28 19:33:48 -05:00
Solomon Peachy
6314eae268 Fix build regression for Creative ZEN V
Introduced in 297af3a483

Change-Id: I9cf37e27ecdf84b6f0a8b6c8d15b1eae987cedbe
2025-11-28 07:38:40 -05:00
Solomon Peachy
a6538abd16 rk27xx: Use slower memory timings at startup
Our decade+old defaults are reported to trigger a failure on
one user's IHIFI770c and IHIFI960, but work on their HM-603.
Backing CAS latency off from 2 to 3 appears to be sufficient.

What's interesting is that on paper, CL=2 should be easily attainable
due to our max RAM clock of 100MHz, well within the worst-case timings
of the EM639165 SDRAM.

So as an experiment, this code can go back to CL=2 when we change the
CPU+RAM clock speeds.  IF this still proves problematic, it will be
removed.

Change-Id: I4a8cfa0563c076e7f25d9599a19b454f590861cd
2025-11-28 07:18:22 -05:00
Christian Soffke
3307b04eed usb: Shorten debounce interval for USB status by event
The introduction of a debounce interval for USB
status by event (see e75a3fb), often resulted in the
FiiO M3K crashing after disconnecting from USB.
Shortening the interval to 10ms appears to fix this,
or make a crash much less likely at the very least.

Change-Id: Ibf1f02779ab1704d9b1c86d39b21648a3e2c4e9d
2025-11-27 20:55:00 -05:00
Sebastian Leonhardt
297af3a483 Creative ZEN: fix RTC regression
Creative ZEN lost it's time when shutting down.
The bug was introduced with commit 7f282b9280 (g#2601),
followed by e3f6e9d9f6 (g#2616).

I guarded all persistent register writes with wait loops,
as described in the datasheet.

TODO:
test SONY_NWZE360 and SONY_NWZE370 targets

Change-Id: Ib38ab8691fd1c6e8d0771c1e2eca20dfeb6fc87f
2025-11-27 15:04:14 -05:00
Sebastian Leonhardt
69bc230e7d imx233: add HW_RTC_CTRL and HW_RTC_STAT registers to debug screen
Change-Id: Id52f86b26ee039781f44fde639fb8f184c7dc438
2025-11-27 12:36:28 +01:00
Solomon Peachy
7511d7e514 ipod6g: Correct inverted sector shift for CE-ATA operations.
(sector needs to be scaled UP, not DOWN)

Change-Id: I350c6c371b29c5e152d8d35852e55e3eda0d1090
2025-11-24 21:08:01 -05:00
Solomon Peachy
0551c4a780 ipod6g: Scale CE-ATA READ/WRITE sector/counts correctly
Despite the fact that CE-ATA specifies a minimum logical sector size of
4096 bytes, the low-level tranfer command arguments are specified in
units of 512 bytes. So scale the sector count up and the LBA down.

On CE-ATA devies, the partition table and filesytem is formatted with 4K
logical sectors, so this will be safe.

Change-Id: I959f21f9c72a68ac28aa611d06f8517ca77f0a8c
2025-11-23 20:21:06 -05:00
Solomon Peachy
e04ed753e1 ipod6g: Correct double-shift in ata_rw_chunk_internal()
Forgot to do a commit --amend with this fix before pushing

Change-Id: I7f2e4bead7c85b9edbf13992f15c3b93c2b18197
2025-11-20 20:03:22 -05:00
Solomon Peachy
2c53f6122a ipod6g: ceata_rw_multiple_block()'s COUNT is MMC blocks, not sectors
Default MMC block size is 512B, and the DMA block size must equal
the MMC block size.  As we do not negotiate a larger block size,
scale the transfer count up to match the drive's logical sector size.

(CE-ATA mandates a *minimum* sector size of 4K)

Change-Id: I701cbac5c0fa320e8d38ea3333d99257b9b1f560
2025-11-20 19:53:56 -05:00
Solomon Peachy
25b985c319 ipod6g: Correct the DMA transfer size/count for CE-ATA devices
The DMA xfr size was fixed at 512 bytes, but the count was specified
in terms of the logical sector size (ie 4096 bytes).

Make the DMA size line up with the sector size.

Change-Id: Id9d0088b12775223f8d888f21b19e17c97927570
2025-11-20 19:33:15 -05:00
Solomon Peachy
bc7bc4e8ac storage: report physical sector multiplier via storage_get_info()
Show this in in the info dump when we can't find a filesystem to mount
in main() plus in the ipod bootloaders

Change-Id: I3b437ae0032b17f29c0dd94043743f14d2b2f3ad
2025-11-17 08:57:43 -05:00
Solomon Peachy
44b5220f22 ata: Unify more of the ATA drivers into the common code
The goal of this was to have the ipod6g's ata driver report
proper vendor/model information from storage_info()

Change-Id: I64c1aee87c817cac23c90e062333a4ba3545dfaf
2025-11-17 08:29:56 -05:00
Dana Conrad
a1837d2d80 usbaudio: block playback while usbaudio is active
Needed due to us commandeering the AUDIO DSP "channel" for USBAudio.
If/When we add another DSP channel, this can be reverted.

Works, but still goes to a "blank" WPS screen for a split second before
cancelling out.

Change-Id: I5fb8a1e226b4d3e46c86c59d593d807f49d7a35f
2025-11-15 07:38:46 -05:00
Dana Conrad
c533222851 usbaudio: send through dsp (new)
Does not seem to affect UI usability, but allowable DSP loads will vary
based on device and playback sample rate.

To-Do (someday):
- Add dedicated DSP channel
- How to apply DSP settings to above new channel? (UI)
- How to lock out timestretch from being enabled?

Change-Id: Ia24d1055340354e2c32e6008e7e2b03a8e88867d
2025-11-15 07:38:19 -05:00
Dana Conrad
7c4293af64 usbaudio: convert to asynchronous operation
Add feedback not based on samples used, but on buffers filled - idea
being we can do "PID" (someone who has actually implemented Real PID
could probably rewrite the calculation) based on how many buffers
we have filled versus the ideal buffer filled level (16).

Feedback is based on a historical average of the last two feedback
intervals.

This feedback math is done as fixed-point math to keep floats out of core. Note that a couple division operations needed to be strategically staged to avoid overflow or truncation.

Floats are still used for debug screen printout.

Also fixed a typo in the definition of usb_audio_control_request()

Host:
Linux: works
MacOS: works
Windows: Feedback does not work! It appears that Windows may not
         support asynchronous devices at all. Playback may "work",
         but results will vary as the number of buffers filled will
         drift over time.

Change-Id: I027feb16705e6e46c1144b1d08920b53de42cb26
2025-11-15 07:32:05 -05:00
Dana Conrad
9ce66e088e Add USB Audio 1.0 support
Original commit credit to Amaury Pouly, Moshe Piekarski
Pushed across the finish line by Dana Conrad

To enable, see setting under General Settings --> System --> USB-DAC.
On devices with few endpoints, this may not work while HID and/or
mass storage is enabled.

Adds new dedicated mixer channel.

setting usb-dac can have values:
- never (0)
- always (1)
- while_charge_only (2)
- while_mass_storage (3)

Relevant devices are DWC2 and ARC usb controller devices. That being:
x1000 Native targets (m3k, erosqnative, q1, others...?),
sansac200, creativezenxfi2, vibe500, ipodmini2g,
ipod4g, creativezenxfi, creativezenxfi3, sansaview, ipodcolor,
creativezenxfistyle, samsungypz5, sansafuzeplus, iriverh10_5gb,
tatungtpj1022, gigabeats, faketarget, samsungyh820, gogearhdd1630, samsungyh925, ipodmini1g, ipodvideo, creativezenmozaic, sonynwze370, creativezen, gogearsa9200, gogearhdd6330, sonynwze360, sansae200, mrobe100, iriverh10, creativezenv, ipodnano1g, samsungyh920

USB Driver-wise, it should be noted that this patch requires some
slight changes:
- proper blocking on control OUT transfers, to make sure the data is
  received *before* using it, the usb_core should probably use that too
- drivers can now support interface alternate settings
- drivers can be notified of completion by a new fast handler, which
  is called directly from the driver; this is is necessary for
  isochronous transfers because going through the usb queue is way too
  slow

Designware changes:

- enable for USBOTG_DESIGNWARE
- set maxpacketsize to 1023 for ISO endpoints

Change-Id: I570871884a4e4820b4312b203b07701f06ecacc6
2025-11-15 07:30:15 -05:00
Sebastian Leonhardt
9aafbf9ca9 STMP37xx/iMX233: reduce popping noise on power on/off (Version 1)
Version 1: this patch prolongs startup time by 2 seconds, because the
sleep happens early before other threads have started.

The patch is tested on CreativeZEN and Fuze+.

The datasheet was not very helpfull, so some experimentation was needed.
I came to the following conclusions:
* setting HP to ground:
  to prevent popping noises, the headphone output can be set to ground.
  This however must be done before any part of the audioout module is
  powered up (setting HP to ground itself will lead to a pop otherwise).
  This consequently means that HP must NOT be set to ground for powerdown
  sequence!
  Further study showed that setting HP out to ground has no audible benefit,
  controversly not setting/resetting allows for noiseless RoLo-ing.
* headphone amp class A/AB mode:
  initially the HP amp is in class A mode, and should be set to
  class AB before playing audio, as the datasheet mentions.
  If the HP output is set to ground, it must be released BEFORE
  setting class AB! Releasing from ground while in AB mode leads
  to a very loud pop!
* release HP from ground:
  as said before: never release the HP from ground if the HP amp is
  set to class AB mode. Therefore the correct order is to power up the
  headphone amp, wait some time, release HP from ground, and then
  set the amp to class AB mode.
  To prevent pop, some time is needed before releasing the HP from gnd.
  On CreativeZEN 2 sec seems to be ideal; 1 sec have no audible effect,
  1.5 sec softenes the pop to some degree.
* shutting player off
  The popping noise when shutting off is much quieter that on power up,
  so depopping measures are not absolutely necessary.
  However the power off pop can be silenced by inserting a wait time
  after the audioout block is closed and before the rest of the chip
  is powered down. The longer the better, a time of 5 sec practically
  eliminates the pop.

Note that RoLo-ing can still produce noise, because the audio device
is not properly shut down.

Change-Id: Ib20e1d613b346433d2a711c442e303ededc26e78
2025-11-12 16:07:23 -05:00