Received: by 2002:a05:6358:3188:b0:123:57c1:9b43 with SMTP id q8csp2433286rwd; Wed, 14 Jun 2023 02:46:37 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ6howaNYtfpieBc7PMGZvrDOwO0vEzsuhxndstVGrCu1xnDXx4hM5lhFkHUgC8SbC/kdoJ2 X-Received: by 2002:a05:6214:19c8:b0:62d:f13f:77dd with SMTP id j8-20020a05621419c800b0062df13f77ddmr9186977qvc.0.1686735997093; Wed, 14 Jun 2023 02:46:37 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1686735997; cv=none; d=google.com; s=arc-20160816; b=tt6kEGAVob1jISBcywO6xNi+rik9Z8OjGJMN5xK4F17+frY1LjYcdnsGB7LbYp2Rc4 pT+KwaD4+HW36VG9PszsPl2GnCAAP3rMrXeLz8uRlDUV58iJeL2TwPepLD6ta2Y9pPT6 YF4dRuN22IfIc42tyuNZqAgHZfg8HSvhtU5vZGf6Vc6D/ke6EPO1mZOhEMuFhSj2znCz ofifpcf0z9yKUFYHe1UxXceDO5R9pgKxaWEDL2dCBQ/+au38qASHuMYuLFMedBcXvWsF inog0FMMPKOTecrMVVHxEOIItDNf9F01xB8wN4VuWdazmYKwuyPk/HCIWljm7ZsM1nPI xPDA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:authenticated-by; bh=fmWmQNCDAEy485uttu+H3VNCZ+mTm+ovvOUZyZXAi/4=; b=yXcUe77FC6xl+iD/Jb42817B+AbsT/PNl+BVlhVGycTzbM3kXzhL53daKiIzkVWlfD 1dP3UGrkPOqELQwPg6HSKTLz09QcWT3s0pGjL7BkM2f0hDmRhAN2l65h5L3fQ9vEci4F tbizzpkW8xmOfX7lIREbR8f1DizXCZonDuh70Q3po1IG2GbhSsdsaJEAuvT75qrhXCoB Fr18DVdT2qpR8ZyDnWX8JIJyd9SCUJvMtViLGnKfTvWvGxc3hEWwH9Dr1/Pn2f3dYX0f ddfZzzWWzWuNMxGFAHRU5VxHDlzfEMg/hyfr6r3WrqGz+a4UFXkbaSR4AS4V90+56sWc E/2A== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id m9-20020a654389000000b0053ef0ac79c8si8199791pgp.263.2023.06.14.02.46.24; Wed, 14 Jun 2023 02:46:37 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S244062AbjFNJal (ORCPT + 99 others); Wed, 14 Jun 2023 05:30:41 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35020 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S244151AbjFNJ35 (ORCPT ); Wed, 14 Jun 2023 05:29:57 -0400 Received: from rtits2.realtek.com.tw (rtits2.realtek.com [211.75.126.72]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CA9781713; Wed, 14 Jun 2023 02:29:54 -0700 (PDT) Authenticated-By: X-SpamFilter-By: ArmorX SpamTrap 5.77 with qID 35E9SXBU0024329, This message is accepted by code: ctloc85258 Received: from mail.realtek.com (rtexh36505.realtek.com.tw[172.21.6.25]) by rtits2.realtek.com.tw (8.15.2/2.81/5.90) with ESMTPS id 35E9SXBU0024329 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=OK); Wed, 14 Jun 2023 17:28:33 +0800 Received: from RTEXMBS03.realtek.com.tw (172.21.6.96) by RTEXH36505.realtek.com.tw (172.21.6.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.32; Wed, 14 Jun 2023 17:28:52 +0800 Received: from RTEXH36506.realtek.com.tw (172.21.6.27) by RTEXMBS03.realtek.com.tw (172.21.6.96) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.7; Wed, 14 Jun 2023 17:28:50 +0800 Received: from localhost.localdomain (172.21.252.101) by RTEXH36506.realtek.com.tw (172.21.6.27) with Microsoft SMTP Server id 15.1.2507.17 via Frontend Transport; Wed, 14 Jun 2023 17:28:50 +0800 From: Stanley Chang To: Greg Kroah-Hartman CC: Stanley Chang , Vinod Koul , Kishon Vijay Abraham I , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Alan Stern , Ray Chi , Douglas Anderson , Flavio Suligoi , Matthias Kaehlcke , , , , Subject: [PATCH v4 1/5] usb: phy: add usb phy notify port status API Date: Wed, 14 Jun 2023 17:28:31 +0800 Message-ID: <20230614092850.21460-1-stanley_chang@realtek.com> X-Mailer: git-send-email 2.40.1 MIME-Version: 1.0 Content-Transfer-Encoding: 7BIT Content-Type: text/plain; charset=US-ASCII X-KSE-ServerInfo: RTEXMBS03.realtek.com.tw, 9 X-KSE-AntiSpam-Interceptor-Info: fallback X-KSE-Antivirus-Interceptor-Info: fallback X-KSE-AntiSpam-Interceptor-Info: fallback X-KSE-ServerInfo: RTEXH36505.realtek.com.tw, 9 X-KSE-AntiSpam-Interceptor-Info: fallback X-KSE-Antivirus-Interceptor-Info: fallback X-KSE-AntiSpam-Interceptor-Info: fallback X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,SPF_HELO_NONE, SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org In Realtek SoC, the parameter of usb phy is designed to can dynamic tuning base on port status. Therefore, add a notify callback of phy driver when usb port status change. The Realtek phy driver is designed to dynamically adjust disconnection level and calibrate phy parameters. When the device connected bit changes and when the disconnected bit changes, do port status change notification: Check if portstatus is USB_PORT_STAT_CONNECTION and portchange is USB_PORT_STAT_C_CONNECTION. 1. The device is connected, the driver lowers the disconnection level and calibrates the phy parameters. 2. The device disconnects, the driver increases the disconnect level and calibrates the phy parameters. When controller to notify connect that device is already ready. If we adjust the disconnection level in notify_connect, the disconnect may have been triggered at this stage. So we need to change that as early as possible. Therefore, we add an api to notify phy the port status changes. Signed-off-by: Stanley Chang --- v3 to v4 change: Fix the warning for checkpatch with strict. v2 to v3 change: Add more comments about the reason for adding this api v1 to v2 change: No change --- drivers/usb/core/hub.c | 13 +++++++++++++ include/linux/usb/phy.h | 13 +++++++++++++ 2 files changed, 26 insertions(+) diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c index 97a0f8faea6e..10f3364c3fc2 100644 --- a/drivers/usb/core/hub.c +++ b/drivers/usb/core/hub.c @@ -614,6 +614,19 @@ static int hub_ext_port_status(struct usb_hub *hub, int port1, int type, ret = 0; } mutex_unlock(&hub->status_mutex); + + if (!ret) { + struct usb_device *hdev = hub->hdev; + + if (hdev && !hdev->parent) { + struct usb_hcd *hcd = bus_to_hcd(hdev->bus); + + if (hcd->usb_phy) + usb_phy_notify_port_status(hcd->usb_phy, + port1 - 1, *status, *change); + } + } + return ret; } diff --git a/include/linux/usb/phy.h b/include/linux/usb/phy.h index e4de6bc1f69b..b513749582d7 100644 --- a/include/linux/usb/phy.h +++ b/include/linux/usb/phy.h @@ -144,6 +144,10 @@ struct usb_phy { */ int (*set_wakeup)(struct usb_phy *x, bool enabled); + /* notify phy port status change */ + int (*notify_port_status)(struct usb_phy *x, int port, + u16 portstatus, u16 portchange); + /* notify phy connect status change */ int (*notify_connect)(struct usb_phy *x, enum usb_device_speed speed); @@ -316,6 +320,15 @@ usb_phy_set_wakeup(struct usb_phy *x, bool enabled) return 0; } +static inline int +usb_phy_notify_port_status(struct usb_phy *x, int port, u16 portstatus, u16 portchange) +{ + if (x && x->notify_port_status) + return x->notify_port_status(x, port, portstatus, portchange); + else + return 0; +} + static inline int usb_phy_notify_connect(struct usb_phy *x, enum usb_device_speed speed) { -- 2.34.1