diff --git a/3rdparty/FAudio b/3rdparty/FAudio
index b2bf5b385bb0..38e9da726464 160000
--- a/3rdparty/FAudio
+++ b/3rdparty/FAudio
@@ -1 +1 @@
-Subproject commit b2bf5b385bb0719f6afc12fd3636be14280f4fbb
+Subproject commit 38e9da7264641c9cc69a80d09082f166d9b8eaf9
diff --git a/3rdparty/curl/curl b/3rdparty/curl/curl
index 7161cb17c01d..5ce164e0e929 160000
--- a/3rdparty/curl/curl
+++ b/3rdparty/curl/curl
@@ -1 +1 @@
-Subproject commit 7161cb17c01dcff1dc5bf89a18437d9d729f1ecd
+Subproject commit 5ce164e0e9290c96eb7d502173426c0a135ec008
diff --git a/3rdparty/libsdl-org/SDL b/3rdparty/libsdl-org/SDL
index 15ead9a40d09..859844eae358 160000
--- a/3rdparty/libsdl-org/SDL
+++ b/3rdparty/libsdl-org/SDL
@@ -1 +1 @@
-Subproject commit 15ead9a40d09a1eb9972215cceac2bf29c9b77f6
+Subproject commit 859844eae358447be8d66e6da59b6fb3df0ed778
diff --git a/3rdparty/libsdl-org/SDL.vcxproj b/3rdparty/libsdl-org/SDL.vcxproj
index 8e0c367326ba..687761ae932e 100644
--- a/3rdparty/libsdl-org/SDL.vcxproj
+++ b/3rdparty/libsdl-org/SDL.vcxproj
@@ -11,6 +11,12 @@
+
+
+
+
+
+
@@ -133,7 +139,9 @@
+
+
@@ -188,6 +196,13 @@
+
+
+
+
+
+
+
@@ -238,7 +253,13 @@
+
+
+
+
+
+
@@ -418,7 +439,6 @@
-
{8DC244EE-A0BD-4038-BAF7-CFAFA5EB2BAA}
diff --git a/3rdparty/libsdl-org/SDL.vcxproj.filters b/3rdparty/libsdl-org/SDL.vcxproj.filters
index e9d2239b00e2..e7f2fa2dcbd6 100644
--- a/3rdparty/libsdl-org/SDL.vcxproj.filters
+++ b/3rdparty/libsdl-org/SDL.vcxproj.filters
@@ -178,10 +178,15 @@
-
+
+
+
+
+
+
@@ -409,5 +414,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/3rdparty/libusb/libusb b/3rdparty/libusb/libusb
index 4239bc3a5001..d52e355daa09 160000
--- a/3rdparty/libusb/libusb
+++ b/3rdparty/libusb/libusb
@@ -1 +1 @@
-Subproject commit 4239bc3a50014b8e6a5a2a59df1fff3b7469543b
+Subproject commit d52e355daa09f17ce64819122cb067b8a2ee0d4b
diff --git a/3rdparty/zlib/zlib b/3rdparty/zlib/zlib
index 09155eaa2f92..51b7f2abdade 160000
--- a/3rdparty/zlib/zlib
+++ b/3rdparty/zlib/zlib
@@ -1 +1 @@
-Subproject commit 09155eaa2f9270dc4ed1fa13e2b4b2613e6e4851
+Subproject commit 51b7f2abdade71cd9bb0e7a373ef2610ec6f9daf
diff --git a/rpcs3/Emu/Cell/lv2/sys_usbd.cpp b/rpcs3/Emu/Cell/lv2/sys_usbd.cpp
index 04e5f4fb8037..ce33ac77da68 100644
--- a/rpcs3/Emu/Cell/lv2/sys_usbd.cpp
+++ b/rpcs3/Emu/Cell/lv2/sys_usbd.cpp
@@ -158,42 +158,56 @@ void LIBUSB_CALL callback_transfer(struct libusb_transfer* transfer)
usbh.transfer_complete(transfer);
}
-usb_handler_thread::usb_handler_thread()
+static void LIBUSB_CALL log_cb(libusb_context *ctx, enum libusb_log_level level, const char *str)
{
- if (int res = libusb_init(&ctx); res < 0)
- {
- sys_usbd.error("Failed to initialize sys_usbd: %s", libusb_error_name(res));
+ if (!str)
return;
- }
-#if LIBUSB_API_VERSION >= 0x01000107
- // Set LIBUSB_DEBUG env variable to receive log messages
- libusb_set_log_cb(ctx, [](libusb_context* /* ctx */, libusb_log_level level, const char* str)
+ const std::string msg = fmt::trim(str, " \t\n");
+
+ switch (level)
{
- if (!str)
- return;
+ case LIBUSB_LOG_LEVEL_ERROR:
+ sys_usbd.error("libusb log: %s", msg);
+ break;
+ case LIBUSB_LOG_LEVEL_WARNING:
+ sys_usbd.warning("libusb log: %s", msg);
+ break;
+ case LIBUSB_LOG_LEVEL_INFO:
+ sys_usbd.notice("libusb log: %s", msg);
+ break;
+ case LIBUSB_LOG_LEVEL_DEBUG:
+ sys_usbd.trace("libusb log: %s", msg);
+ break;
+ default:
+ break;
+ }
+}
- const std::string msg = fmt::trim(str, " \t\n");
+usb_handler_thread::usb_handler_thread()
+{
+#if LIBUSB_API_VERSION >= 0x0100010A
+ libusb_init_option log_lv_opt{};
+ log_lv_opt.option = LIBUSB_OPTION_LOG_LEVEL;
+ log_lv_opt.value.ival = LIBUSB_LOG_LEVEL_WARNING;// You can also set the LIBUSB_DEBUG env variable instead
+
+ libusb_init_option log_cb_opt{};
+ log_cb_opt.option = LIBUSB_OPTION_LOG_CB;
+ log_cb_opt.value.log_cbval = &log_cb;
+
+ std::vector options = {
+ std::move(log_lv_opt),
+ std::move(log_cb_opt)
+ };
- switch (level)
- {
- case LIBUSB_LOG_LEVEL_ERROR:
- sys_usbd.error("libusb log: %s", msg);
- break;
- case LIBUSB_LOG_LEVEL_WARNING:
- sys_usbd.warning("libusb log: %s", msg);
- break;
- case LIBUSB_LOG_LEVEL_INFO:
- sys_usbd.notice("libusb log: %s", msg);
- break;
- case LIBUSB_LOG_LEVEL_DEBUG:
- sys_usbd.trace("libusb log: %s", msg);
- break;
- default:
- break;
- }
- }, LIBUSB_LOG_CB_CONTEXT);
+ if (int res = libusb_init_context(&ctx, options.data(), static_cast(options.size())); res < 0)
+#else
+ if (int res = libusb_init(&ctx); res < 0)
#endif
+ {
+ sys_usbd.error("Failed to initialize sys_usbd: %s", libusb_error_name(res));
+ return;
+ }
for (u32 index = 0; index < MAX_SYS_USBD_TRANSFERS; index++)
{