At the moment the port over-current message is displayed only if the over-current condition is permanent. But in case of permanent short-circuit or over-current, some USB power-distribution switches (such as the TPS20xx, etc.), after the over-current detection and the consequent shutdown, return in the normal state. So, in these cases, the over-current error message never appears. To overcome this problem, the "over-current condition" message is displayed even after some over-current events. Signed-off-by: Flavio Suligoi <f.suligoi@xxxxxxx> --- arch/arm64/boot/dts/Makefile | 1 + drivers/usb/core/hub.c | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/arch/arm64/boot/dts/Makefile b/arch/arm64/boot/dts/Makefile index 639e01a4d855..bf26ce60d78a 100644 --- a/arch/arm64/boot/dts/Makefile +++ b/arch/arm64/boot/dts/Makefile @@ -8,6 +8,7 @@ subdir-y += amlogic subdir-y += apm subdir-y += apple subdir-y += arm +subdir-y += asem subdir-y += bitmain subdir-y += broadcom subdir-y += cavium diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c index 86658a81d284..ff6c8e0e2673 100644 --- a/drivers/usb/core/hub.c +++ b/drivers/usb/core/hub.c @@ -5577,7 +5577,8 @@ static void port_event(struct usb_hub *hub, int port1) msleep(100); /* Cool down */ hub_power_on(hub, true); hub_port_status(hub, port1, &status, &unused); - if (status & USB_PORT_STAT_OVERCURRENT) + if ((status & USB_PORT_STAT_OVERCURRENT) || + !(port_dev->over_current_count % 15)) dev_err(&port_dev->dev, "over-current condition\n"); } @@ -5738,7 +5739,7 @@ static void hub_event(struct work_struct *work) u16 status = 0; u16 unused; - dev_dbg(hub_dev, "over-current change\n"); + dev_info(hub_dev, "over-current change\n"); clear_hub_feature(hdev, C_HUB_OVER_CURRENT); msleep(500); /* Cool down */ hub_power_on(hub, true); -- 2.25.1