Skip to content

Commit 3cf16cf

Browse files
committed
Merge remote-tracking branch 'upstream/master'
2 parents a3a7155 + 58c66e2 commit 3cf16cf

397 files changed

Lines changed: 22058 additions & 65356 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

Config.in

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,6 @@ menu "Audio"
9393
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/audio/faudio/Config.in"
9494
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/audio/freepats/Config.in"
9595
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/audio/libfreeaptx/Config.in"
96-
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/audio/liblc3/Config.in"
9796
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/audio/libldac/Config.in"
9897
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/audio/libxmp/Config.in"
9998
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/audio/mt32emu/Config.in"
@@ -157,6 +156,8 @@ menu "Controllers"
157156
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/controllers/wheels/hid-t150/Config.in"
158157
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/controllers/wheels/new-lg4ff/Config.in"
159158
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/controllers/wheels/hid-tmff2/Config.in"
159+
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/controllers/wheels/logitech-trueforce/Config.in"
160+
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/controllers/wheels/logi-wheel/Config.in"
160161
endmenu
161162
endmenu
162163

PackageVersions.md

Lines changed: 104 additions & 103 deletions
Large diffs are not rendered by default.

PackagesChangelog.md

Lines changed: 104 additions & 103 deletions
Large diffs are not rendered by default.

batocera-Changelog.md

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
- AYN Odin 3 initial support
1212
- Mangmi Air X initial support
1313
- Odroid M2 initial support
14+
- Radxa Rock-5T initial support
1415
- Retroid Pocket Nova initial support
1516
### Added
1617
- Anbernic H700 device hardware acceleration support
@@ -57,7 +58,7 @@
5758
- Removed Libretro-Puae2021
5859
- Removed the buggy Libretro-A5200 core. We will use the compatible Libretro-Atari800 core instead
5960
- Rockchip RK3588 devices moved to the mainline linux kernel:
60-
CoolPi 4B, FriendlyElec CM3588 NAS, GameForce ACE, IndieDroid Nova, Khadas Edge2, Orange Pi 5
61+
CoolPi 4B, FriendlyElec CM3588 NAS, IndieDroid Nova, Khadas Edge2, Orange Pi 5
6162
Orange Pi 5 Plus, Orange Pi 5B, QuartzPro64, ROCK 5A, ROCK 5B, ROCK 5B Plus, ROCK 5C
6263
- Select Qualcomm handheld devices can now install batcoera on the internal drive alongside Android (batocera-install-internal)
6364
- The Force Engine to capable aarch64 devices
@@ -69,7 +70,7 @@
6970
- Azahar to 2125.1.2
7071
- BigPEmu to 1.221
7172
- Box64 0.4.2
72-
- Cemu to June 23rd, 2026 build
73+
- Cemu to August 7th, 2026 build
7374
- CDogs to 2.4.0
7475
- CLK to 2026-07-23
7576
- CorsixTH to v0.69.2
@@ -112,12 +113,13 @@
112113
- Play to 0.77
113114
- PPSSPP to v1.20.4
114115
- Python Pyxel to May 9th, 2026 build
115-
- Redream to 1.5.0-1155-g0056e35
116-
- RPCS3 to v.0.0.41
117-
- ShadPS4 to v.0.16.0
116+
- Redream to 1.5.0-1235-g506c3f1
117+
- RPCS3 to v.0.0.42
118+
- ScummVM to v2026.3.0
119+
- ShadPS4 to v.0.17.0
118120
- Solarus to 2.0.4
119121
- Sonic3-Air to v26.03.28.0
120-
- Supermodel to v0.3a-20260528
122+
- Supermodel to v0.3a-20260726-git-b7d8acd
121123
- TheXTech to v1.3.7.3-1
122124
- TRX to 1.9.2
123125
- Tsugaru to v20251206
@@ -143,8 +145,8 @@
143145
- Linux Firmware to 20260622
144146
- Mesa3D to 26.1.6
145147
- MangoHud to v0.8.4
146-
- Nvidia Open Production driver to 610.43.03
147-
- Nvidia 580 Legacy driver to 580.173.02
148+
- Nvidia Open Production driver to 610.57.04
149+
- Nvidia 580 Legacy driver to 580.178.04
148150
- QT to 6.11.1
149151
- Qualcomm SM6115 device kernel updated to 7.0.14
150152
- Qualcomm SM8550 device kernel updated to 7.0.14
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
diff --git a/drivers/hid/hid-nintendo.c b/drivers/hid/hid-nintendo.c
2+
--- a/drivers/hid/hid-nintendo.c
3+
+++ b/drivers/hid/hid-nintendo.c
4+
@@ -589,6 +589,8 @@
5+
unsigned int last_input_report_msecs;
6+
unsigned int last_subcmd_sent_msecs;
7+
unsigned int consecutive_valid_report_deltas;
8+
+ unsigned int subcmd_rate_exhaustions;
9+
+ bool subcmd_rate_relaxed;
10+
11+
/* factory calibration data */
12+
struct joycon_stick_cal left_stick_cal_x;
13+
@@ -823,7 +825,8 @@
14+
#define JC_SUBCMD_RATE_LIMITER_USB_MS 20
15+
#define JC_SUBCMD_RATE_LIMITER_BT_MS 60
16+
#define JC_SUBCMD_RATE_LIMITER_MS(ctlr) ((ctlr)->hdev->bus == BUS_USB ? JC_SUBCMD_RATE_LIMITER_USB_MS : JC_SUBCMD_RATE_LIMITER_BT_MS)
17+
-static void joycon_enforce_subcmd_rate(struct joycon_ctlr *ctlr)
18+
+#define JC_SUBCMD_RATE_MAX_FAILURES 2
19+
+static void joycon_enforce_subcmd_rate_strict(struct joycon_ctlr *ctlr)
20+
{
21+
unsigned int current_ms;
22+
unsigned long subcmd_delta;
23+
@@ -851,6 +854,14 @@
24+
25+
if (attempts >= JC_SUBCMD_RATE_MAX_ATTEMPTS) {
26+
hid_warn(ctlr->hdev, "%s: exceeded max attempts", __func__);
27+
+
28+
+ if (++ctlr->subcmd_rate_exhaustions == JC_SUBCMD_RATE_MAX_FAILURES) {
29+
+ ctlr->subcmd_rate_relaxed = true;
30+
+ hid_info(ctlr->hdev,
31+
+ "input report cadence does not fit the %d-%dms window; using the legacy subcommand throttle\n",
32+
+ JC_INPUT_REPORT_MIN_DELTA,
33+
+ JC_INPUT_REPORT_MAX_DELTA);
34+
+ }
35+
return;
36+
}
37+
38+
@@ -865,6 +876,32 @@
39+
msleep(JC_SUBCMD_TX_OFFSET_MS);
40+
}
41+
42+
+/* The rate limiter as it was before commit d750d1480362, without the report
43+
+ * cadence requirement.
44+
+ */
45+
+static void joycon_enforce_subcmd_rate_legacy(struct joycon_ctlr *ctlr)
46+
+{
47+
+ static const unsigned int max_subcmd_rate_ms = 25;
48+
+ unsigned int current_ms = jiffies_to_msecs(jiffies);
49+
+ unsigned int delta_ms = current_ms - ctlr->last_subcmd_sent_msecs;
50+
+
51+
+ while (delta_ms < max_subcmd_rate_ms &&
52+
+ ctlr->ctlr_state == JOYCON_CTLR_STATE_READ) {
53+
+ joycon_wait_for_input_report(ctlr);
54+
+ current_ms = jiffies_to_msecs(jiffies);
55+
+ delta_ms = current_ms - ctlr->last_subcmd_sent_msecs;
56+
+ }
57+
+ ctlr->last_subcmd_sent_msecs = current_ms;
58+
+}
59+
+
60+
+static void joycon_enforce_subcmd_rate(struct joycon_ctlr *ctlr)
61+
+{
62+
+ if (ctlr->subcmd_rate_relaxed)
63+
+ joycon_enforce_subcmd_rate_legacy(ctlr);
64+
+ else
65+
+ joycon_enforce_subcmd_rate_strict(ctlr);
66+
+}
67+
+
68+
static int joycon_hid_send_sync(struct joycon_ctlr *ctlr, u8 *data, size_t len,
69+
u32 timeout)
70+
{

board/batocera/allwinner/h616/linux_patches/series

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -517,3 +517,4 @@ patches.armbian/arm64-dts-sun50i-h616-bigtreetech-cb1-emac1-ac300.patch
517517
linux-usbhid-quircks.patch
518518
linux-wiimote-abs-not-hat.patch
519519
uvc-bandwidth_cap_param-for-sinden.patch
520+
hid-nintendo-bt-rumble.patch
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
diff --git a/drivers/hid/hid-nintendo.c b/drivers/hid/hid-nintendo.c
2+
--- a/drivers/hid/hid-nintendo.c
3+
+++ b/drivers/hid/hid-nintendo.c
4+
@@ -589,6 +589,8 @@
5+
unsigned int last_input_report_msecs;
6+
unsigned int last_subcmd_sent_msecs;
7+
unsigned int consecutive_valid_report_deltas;
8+
+ unsigned int subcmd_rate_exhaustions;
9+
+ bool subcmd_rate_relaxed;
10+
11+
/* factory calibration data */
12+
struct joycon_stick_cal left_stick_cal_x;
13+
@@ -823,7 +825,8 @@
14+
#define JC_SUBCMD_RATE_LIMITER_USB_MS 20
15+
#define JC_SUBCMD_RATE_LIMITER_BT_MS 60
16+
#define JC_SUBCMD_RATE_LIMITER_MS(ctlr) ((ctlr)->hdev->bus == BUS_USB ? JC_SUBCMD_RATE_LIMITER_USB_MS : JC_SUBCMD_RATE_LIMITER_BT_MS)
17+
-static void joycon_enforce_subcmd_rate(struct joycon_ctlr *ctlr)
18+
+#define JC_SUBCMD_RATE_MAX_FAILURES 2
19+
+static void joycon_enforce_subcmd_rate_strict(struct joycon_ctlr *ctlr)
20+
{
21+
unsigned int current_ms;
22+
unsigned long subcmd_delta;
23+
@@ -851,6 +854,14 @@
24+
25+
if (attempts >= JC_SUBCMD_RATE_MAX_ATTEMPTS) {
26+
hid_warn(ctlr->hdev, "%s: exceeded max attempts", __func__);
27+
+
28+
+ if (++ctlr->subcmd_rate_exhaustions == JC_SUBCMD_RATE_MAX_FAILURES) {
29+
+ ctlr->subcmd_rate_relaxed = true;
30+
+ hid_info(ctlr->hdev,
31+
+ "input report cadence does not fit the %d-%dms window; using the legacy subcommand throttle\n",
32+
+ JC_INPUT_REPORT_MIN_DELTA,
33+
+ JC_INPUT_REPORT_MAX_DELTA);
34+
+ }
35+
return;
36+
}
37+
38+
@@ -865,6 +876,32 @@
39+
msleep(JC_SUBCMD_TX_OFFSET_MS);
40+
}
41+
42+
+/* The rate limiter as it was before commit d750d1480362, without the report
43+
+ * cadence requirement.
44+
+ */
45+
+static void joycon_enforce_subcmd_rate_legacy(struct joycon_ctlr *ctlr)
46+
+{
47+
+ static const unsigned int max_subcmd_rate_ms = 25;
48+
+ unsigned int current_ms = jiffies_to_msecs(jiffies);
49+
+ unsigned int delta_ms = current_ms - ctlr->last_subcmd_sent_msecs;
50+
+
51+
+ while (delta_ms < max_subcmd_rate_ms &&
52+
+ ctlr->ctlr_state == JOYCON_CTLR_STATE_READ) {
53+
+ joycon_wait_for_input_report(ctlr);
54+
+ current_ms = jiffies_to_msecs(jiffies);
55+
+ delta_ms = current_ms - ctlr->last_subcmd_sent_msecs;
56+
+ }
57+
+ ctlr->last_subcmd_sent_msecs = current_ms;
58+
+}
59+
+
60+
+static void joycon_enforce_subcmd_rate(struct joycon_ctlr *ctlr)
61+
+{
62+
+ if (ctlr->subcmd_rate_relaxed)
63+
+ joycon_enforce_subcmd_rate_legacy(ctlr);
64+
+ else
65+
+ joycon_enforce_subcmd_rate_strict(ctlr);
66+
+}
67+
+
68+
static int joycon_hid_send_sync(struct joycon_ctlr *ctlr, u8 *data, size_t len,
69+
u32 timeout)
70+
{
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
diff --git a/drivers/hid/hid-nintendo.c b/drivers/hid/hid-nintendo.c
2+
--- a/drivers/hid/hid-nintendo.c
3+
+++ b/drivers/hid/hid-nintendo.c
4+
@@ -589,6 +589,8 @@
5+
unsigned int last_input_report_msecs;
6+
unsigned int last_subcmd_sent_msecs;
7+
unsigned int consecutive_valid_report_deltas;
8+
+ unsigned int subcmd_rate_exhaustions;
9+
+ bool subcmd_rate_relaxed;
10+
11+
/* factory calibration data */
12+
struct joycon_stick_cal left_stick_cal_x;
13+
@@ -823,7 +825,8 @@
14+
#define JC_SUBCMD_RATE_LIMITER_USB_MS 20
15+
#define JC_SUBCMD_RATE_LIMITER_BT_MS 60
16+
#define JC_SUBCMD_RATE_LIMITER_MS(ctlr) ((ctlr)->hdev->bus == BUS_USB ? JC_SUBCMD_RATE_LIMITER_USB_MS : JC_SUBCMD_RATE_LIMITER_BT_MS)
17+
-static void joycon_enforce_subcmd_rate(struct joycon_ctlr *ctlr)
18+
+#define JC_SUBCMD_RATE_MAX_FAILURES 2
19+
+static void joycon_enforce_subcmd_rate_strict(struct joycon_ctlr *ctlr)
20+
{
21+
unsigned int current_ms;
22+
unsigned long subcmd_delta;
23+
@@ -851,6 +854,14 @@
24+
25+
if (attempts >= JC_SUBCMD_RATE_MAX_ATTEMPTS) {
26+
hid_warn(ctlr->hdev, "%s: exceeded max attempts", __func__);
27+
+
28+
+ if (++ctlr->subcmd_rate_exhaustions == JC_SUBCMD_RATE_MAX_FAILURES) {
29+
+ ctlr->subcmd_rate_relaxed = true;
30+
+ hid_info(ctlr->hdev,
31+
+ "input report cadence does not fit the %d-%dms window; using the legacy subcommand throttle\n",
32+
+ JC_INPUT_REPORT_MIN_DELTA,
33+
+ JC_INPUT_REPORT_MAX_DELTA);
34+
+ }
35+
return;
36+
}
37+
38+
@@ -865,6 +876,32 @@
39+
msleep(JC_SUBCMD_TX_OFFSET_MS);
40+
}
41+
42+
+/* The rate limiter as it was before commit d750d1480362, without the report
43+
+ * cadence requirement.
44+
+ */
45+
+static void joycon_enforce_subcmd_rate_legacy(struct joycon_ctlr *ctlr)
46+
+{
47+
+ static const unsigned int max_subcmd_rate_ms = 25;
48+
+ unsigned int current_ms = jiffies_to_msecs(jiffies);
49+
+ unsigned int delta_ms = current_ms - ctlr->last_subcmd_sent_msecs;
50+
+
51+
+ while (delta_ms < max_subcmd_rate_ms &&
52+
+ ctlr->ctlr_state == JOYCON_CTLR_STATE_READ) {
53+
+ joycon_wait_for_input_report(ctlr);
54+
+ current_ms = jiffies_to_msecs(jiffies);
55+
+ delta_ms = current_ms - ctlr->last_subcmd_sent_msecs;
56+
+ }
57+
+ ctlr->last_subcmd_sent_msecs = current_ms;
58+
+}
59+
+
60+
+static void joycon_enforce_subcmd_rate(struct joycon_ctlr *ctlr)
61+
+{
62+
+ if (ctlr->subcmd_rate_relaxed)
63+
+ joycon_enforce_subcmd_rate_legacy(ctlr);
64+
+ else
65+
+ joycon_enforce_subcmd_rate_strict(ctlr);
66+
+}
67+
+
68+
static int joycon_hid_send_sync(struct joycon_ctlr *ctlr, u8 *data, size_t len,
69+
u32 timeout)
70+
{
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
diff --git a/drivers/hid/hid-nintendo.c b/drivers/hid/hid-nintendo.c
2+
--- a/drivers/hid/hid-nintendo.c
3+
+++ b/drivers/hid/hid-nintendo.c
4+
@@ -589,6 +589,8 @@
5+
unsigned int last_input_report_msecs;
6+
unsigned int last_subcmd_sent_msecs;
7+
unsigned int consecutive_valid_report_deltas;
8+
+ unsigned int subcmd_rate_exhaustions;
9+
+ bool subcmd_rate_relaxed;
10+
11+
/* factory calibration data */
12+
struct joycon_stick_cal left_stick_cal_x;
13+
@@ -823,7 +825,8 @@
14+
#define JC_SUBCMD_RATE_LIMITER_USB_MS 20
15+
#define JC_SUBCMD_RATE_LIMITER_BT_MS 60
16+
#define JC_SUBCMD_RATE_LIMITER_MS(ctlr) ((ctlr)->hdev->bus == BUS_USB ? JC_SUBCMD_RATE_LIMITER_USB_MS : JC_SUBCMD_RATE_LIMITER_BT_MS)
17+
-static void joycon_enforce_subcmd_rate(struct joycon_ctlr *ctlr)
18+
+#define JC_SUBCMD_RATE_MAX_FAILURES 2
19+
+static void joycon_enforce_subcmd_rate_strict(struct joycon_ctlr *ctlr)
20+
{
21+
unsigned int current_ms;
22+
unsigned long subcmd_delta;
23+
@@ -851,6 +854,14 @@
24+
25+
if (attempts >= JC_SUBCMD_RATE_MAX_ATTEMPTS) {
26+
hid_warn(ctlr->hdev, "%s: exceeded max attempts", __func__);
27+
+
28+
+ if (++ctlr->subcmd_rate_exhaustions == JC_SUBCMD_RATE_MAX_FAILURES) {
29+
+ ctlr->subcmd_rate_relaxed = true;
30+
+ hid_info(ctlr->hdev,
31+
+ "input report cadence does not fit the %d-%dms window; using the legacy subcommand throttle\n",
32+
+ JC_INPUT_REPORT_MIN_DELTA,
33+
+ JC_INPUT_REPORT_MAX_DELTA);
34+
+ }
35+
return;
36+
}
37+
38+
@@ -865,6 +876,32 @@
39+
msleep(JC_SUBCMD_TX_OFFSET_MS);
40+
}
41+
42+
+/* The rate limiter as it was before commit d750d1480362, without the report
43+
+ * cadence requirement.
44+
+ */
45+
+static void joycon_enforce_subcmd_rate_legacy(struct joycon_ctlr *ctlr)
46+
+{
47+
+ static const unsigned int max_subcmd_rate_ms = 25;
48+
+ unsigned int current_ms = jiffies_to_msecs(jiffies);
49+
+ unsigned int delta_ms = current_ms - ctlr->last_subcmd_sent_msecs;
50+
+
51+
+ while (delta_ms < max_subcmd_rate_ms &&
52+
+ ctlr->ctlr_state == JOYCON_CTLR_STATE_READ) {
53+
+ joycon_wait_for_input_report(ctlr);
54+
+ current_ms = jiffies_to_msecs(jiffies);
55+
+ delta_ms = current_ms - ctlr->last_subcmd_sent_msecs;
56+
+ }
57+
+ ctlr->last_subcmd_sent_msecs = current_ms;
58+
+}
59+
+
60+
+static void joycon_enforce_subcmd_rate(struct joycon_ctlr *ctlr)
61+
+{
62+
+ if (ctlr->subcmd_rate_relaxed)
63+
+ joycon_enforce_subcmd_rate_legacy(ctlr);
64+
+ else
65+
+ joycon_enforce_subcmd_rate_strict(ctlr);
66+
+}
67+
+
68+
static int joycon_hid_send_sync(struct joycon_ctlr *ctlr, u8 *data, size_t len,
69+
u32 timeout)
70+
{

0 commit comments

Comments
 (0)