From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from layka.disroot.org (layka.disroot.org [178.21.23.139]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 576484C652E for ; Mon, 12 Oct 2026 17:38:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=178.21.23.139 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1791826712; cv=none; b=fFrVCz3saLeJTBGo6OHG9rBcd15xjQJq7y84Mpk0yB10+p5vZpnXXG45F0/tGEsSOqyQevv6aYNq/Per3pW9gpAkGHLdZL1ZDQE9lOd15hfvefAQm1yFmrx4B8oTI06fKXR0XBKpfOalS4iwXcMvteaefT0fgbjVeZNqzirGIiU= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1791826712; c=relaxed/simple; bh=EkKjMgBUzLOohikYQvDNMu+lE0zSolRB6iMtBrVemmQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=KJjHNoN+wTeiM+H4ooKBkzbCnHXuyPT0lbD+ecqaFkWDNgiOquF2BKGOD0GzNB7mIBQGWMlJGGa87RUw/3Nx+E4yGev1pSO0fNZPGYf64WrzPFAsfjVDGgITj+u7YRuKqP5pgJzF/75emRgcSEuLTSIz/WJ5kvdVIY1zrZbpk+o= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=disroot.org; spf=pass smtp.mailfrom=disroot.org; dkim=pass (2048-bit key) header.d=disroot.org header.i=@disroot.org header.b=l+Q8VYDn; arc=none smtp.client-ip=178.21.23.139 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=disroot.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=disroot.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=disroot.org header.i=@disroot.org header.b="l+Q8VYDn" Received: from mail01.layka.lan (localhost [127.0.0.1]) by disroot.org (Postfix) with ESMTP id A2AB480B7F; Mon, 12 Oct 2026 19:38:29 +0200 (CEST) X-Virus-Scanned: SPAM Filter at disroot.org Received: from layka.disroot.org ([127.0.0.1]) by localhost (disroot.org [127.0.0.1]) (amavis, port 10024) with ESMTP id utev-ys9kcj8; Mon, 12 Oct 2026 19:38:29 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=disroot.org; s=mail; t=1791826708; bh=EkKjMgBUzLOohikYQvDNMu+lE0zSolRB6iMtBrVemmQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=l+Q8VYDnCqhF1ABZoojxoJJrdnOHBkOmdStZxo0gLSRL9t2U146hLbLiILwfwUmcG 7YImKXnfkyzUljX+DGbsto1Uvn68mazcyX1JnLikpcAeG4v19WwNEFLYJiFhWTPgxx MHoZITRqVa0zhHLN6aiBeBaBrf673NvcTq2gCMlz3ZK3aUWUaVnIu4AdAyI0/jg75S xBHYw2FQpUqHC+4/D1N5zkUUDfg4uWNAL7Ash3qP3/iJEplaNfZNsqS7LMpoAUYNMv PIESSPxkU2lfOrDb6P+d0jO2HKYekgQoLOwm7BGufeBQ8yGR8zkPlYgB7AycFtfQl5 bU/EHc3kex/fA== From: Rustam Adilov To: Vinod Koul , Neil Armstrong , Manivannan Sadhasivam , Stanley Chang , Philipp Zabel , linux-phy@lists.infradead.org, linux-kernel@vger.kernel.org Cc: Rustam Adilov , Michael Zavertkin Subject: [PATCH v8 4/6] phy: realtek: usb2: introduce reset controller struct Date: Mon, 12 Oct 2026 22:37:37 +0500 Message-ID: <20261012173739.36377-5-adilov@disroot.org> In-Reply-To: <20261012173739.36377-1-adilov@disroot.org> References: <20261012173739.36377-1-adilov@disroot.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit In RTL9607C, there is so called "IP Enable Controller" which resemble reset controller with reset lines and is used for various things like USB, PCIE, GMAC and such. Introduce the reset_control struct to this driver to handle deasserting usb2 phy reset line. Make use of the function devm_reset_control_get_optional_exclusive() function to get the reset controller and since existing RTD SoCs don't specify the resets we can have a cleaner code. Since the vendor usb driver developed by Realtek doesn't assert the reset line (or in their case clear the register bit), we can reasonably assume reset_control_assert is not needed here. Co-developed-by: Michael Zavertkin Signed-off-by: Michael Zavertkin Signed-off-by: Rustam Adilov --- drivers/phy/realtek/phy-rtk-usb2.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/drivers/phy/realtek/phy-rtk-usb2.c b/drivers/phy/realtek/phy-rtk-usb2.c index 5e483c853f02..2ddad7be7353 100644 --- a/drivers/phy/realtek/phy-rtk-usb2.c +++ b/drivers/phy/realtek/phy-rtk-usb2.c @@ -17,6 +17,7 @@ #include #include #include +#include #include /* GUSB2PHYACCn register */ @@ -128,6 +129,7 @@ struct rtk_phy { struct phy_cfg *phy_cfg; int num_phy; struct phy_parameter *phy_parameter; + struct reset_control *phy_rst; struct dentry *debug_dir; }; @@ -676,6 +678,15 @@ static int rtk_phy_init(struct phy *phy) if (!rtk_phy) return -EINVAL; + if (rtk_phy->phy_rst) { + ret = reset_control_deassert(rtk_phy->phy_rst); + + if (ret) + return ret; + + usleep_range(5000, 6000); + } + for (i = 0; i < rtk_phy->num_phy; i++) ret = do_rtk_phy_init(rtk_phy, i); @@ -1055,6 +1066,11 @@ static int rtk_usb2phy_probe(struct platform_device *pdev) rtk_phy->num_phy = phy_cfg->num_phy; + rtk_phy->phy_rst = devm_reset_control_get_optional_exclusive(dev, NULL); + if (IS_ERR(rtk_phy->phy_rst)) + return dev_err_probe(dev, PTR_ERR(rtk_phy->phy_rst), + "usb2 phy reset is not working\n"); + ret = parse_phy_data(rtk_phy); if (ret) goto err; -- 2.56.0