[PATCH 8/8] usb: misc: onboard_usb_dev: add support for the SMSC USB4604
From: Dmitry Baryshkov
Date: Sun Aug 09 2026 - 20:47:58 EST
The SMSC USB4604 HSIC hub on the APQ8074 Dragonboard has its RESET_N
pin wired to a PMIC GPIO, so it stays in reset until the OS releases
it. The release also has to happen while the HSIC host controller is
up: HSIC has no connect detection comparable to USB 2.0, so the
one-shot connect signaled by the hub after reset deassertion is lost
if the controller is not yet running.
Add the USB4604 (0424:4604, the ID used when the upstream port is in
HSIC mode) to the onboard USB device driver, which releases the reset
when the parent host controller probes.
Assisted-by: Claude:claude-fable-5
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@xxxxxxxxxxxxxxxx>
---
drivers/usb/misc/onboard_usb_dev.c | 1 +
drivers/usb/misc/onboard_usb_dev.h | 8 ++++++++
2 files changed, 9 insertions(+)
diff --git a/drivers/usb/misc/onboard_usb_dev.c b/drivers/usb/misc/onboard_usb_dev.c
index 6299c0539212..0eeb9713f5a3 100644
--- a/drivers/usb/misc/onboard_usb_dev.c
+++ b/drivers/usb/misc/onboard_usb_dev.c
@@ -673,6 +673,7 @@ static const struct usb_device_id onboard_dev_id_table[] = {
{ USB_DEVICE(VENDOR_ID_MICROCHIP, 0x2514) }, /* USB2514B USB 2.0 HUB */
{ USB_DEVICE(VENDOR_ID_MICROCHIP, 0x2517) }, /* USB2517 USB 2.0 HUB */
{ USB_DEVICE(VENDOR_ID_MICROCHIP, 0x2744) }, /* USB5744 USB 2.0 HUB */
+ { USB_DEVICE(VENDOR_ID_MICROCHIP, 0x4604) }, /* USB4604 HSIC HUB */
{ USB_DEVICE(VENDOR_ID_MICROCHIP, 0x5744) }, /* USB5744 USB 3.0 HUB */
{ USB_DEVICE(VENDOR_ID_PARADE, 0x5511) }, /* PS5511 USB 3.2 */
{ USB_DEVICE(VENDOR_ID_PARADE, 0x55a1) }, /* PS5511 USB 2.0 */
diff --git a/drivers/usb/misc/onboard_usb_dev.h b/drivers/usb/misc/onboard_usb_dev.h
index 11425bdc5a63..9e320b042a86 100644
--- a/drivers/usb/misc/onboard_usb_dev.h
+++ b/drivers/usb/misc/onboard_usb_dev.h
@@ -30,6 +30,13 @@ static const struct onboard_dev_pdata microchip_usb2514_data = {
.is_hub = true,
};
+static const struct onboard_dev_pdata microchip_usb4604_data = {
+ .reset_us = 3000,
+ .num_supplies = 1,
+ .supply_names = { "vdd" },
+ .is_hub = true,
+};
+
static const struct onboard_dev_pdata microchip_usb5744_data = {
.reset_us = 0,
.power_on_delay_us = 10000,
@@ -154,6 +161,7 @@ static const struct of_device_id onboard_dev_match[] = {
{ .compatible = "usb424,2514", .data = µchip_usb2514_data, },
{ .compatible = "usb424,2517", .data = µchip_usb424_data, },
{ .compatible = "usb424,2744", .data = µchip_usb5744_data, },
+ { .compatible = "usb424,4604", .data = µchip_usb4604_data, },
{ .compatible = "usb424,5744", .data = µchip_usb5744_data, },
{ .compatible = "usb451,8025", .data = &ti_tusb8020b_data, },
{ .compatible = "usb451,8027", .data = &ti_tusb8020b_data, },
--
2.47.3