usb: iap: workaround cur/set freq mismatch

rockbox-gerrit-noreply--- via rockbox-cvs <[email protected]> Wed, 17 Jun 2026 11:01:42 -0400
Newsgroups gmane.comp.systems.archos.rockbox.cvs
Message-ID <[email protected]>
commit 7154fcd9a8efba731e9a362d3a7592f7a7066fdf
Author: mojyack <[email protected]>
Date:   Sat May 23 19:09:46 2026 +0900

    usb: iap: workaround cur/set freq mismatch
    
    Change-Id: I75a36c9dfd33e7f9192101220633137e5ad98411

diff --git a/firmware/usbstack/iap/audio.c b/firmware/usbstack/iap/audio.c
index d01b133d69..83523d6769 100644
--- a/firmware/usbstack/iap/audio.c
+++ b/firmware/usbstack/iap/audio.c
@@ -260,6 +260,16 @@ bool iap_audio_set_sampr(uint32_t sampr) {
         }
     }
     check_act(freq < ARRAYLEN(samprs), return false);
+
+    if(set_freq >= 0 && freq != set_freq) {
+        /* Accessories should only set the frequency we requested via
+         * TrackNewAudioAttributes, but in some cases, USB control requests may arrive late,
+         * breaking established cur_freq == set_freq.
+         * Ignoring sets of frequencies that were not requested can work around this. */
+        ERROR("wrong frequency set: expected=%d got=%d", set_freq, freq);
+        return true;
+    }
+
     cur_freq = freq;
 
     LOG("sampr=%lu, set_freq=%d cur_freq=%d", sampr, set_freq, cur_freq);
-- 
rockbox-cvs mailing list
[email protected]
https://lists.haxx.se/mailman/listinfo/rockbox-cvs