From nobody Mon Feb 9 07:32:31 2026 Received: from mail-wr1-f49.google.com (mail-wr1-f49.google.com [209.85.221.49]) (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 3FABB3612CB for ; Fri, 9 Jan 2026 14:37:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767969429; cv=none; b=rYZwaZuveTh6IJAwlZzvmj+zkvrvNDSP1CY4SpVMxvY6JepTBtcLu4iY4SvYfy+Msc9tsglelZODNp9Ce9ReZJE3s7K3zjWl1iTsUyK3l/z4xCDkEXv6oM+ELZi7d+A5Fs+nkeBy5z2ZiqKZ8Xud9cUIrUcWk2LWergrmw+IfE8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767969429; c=relaxed/simple; bh=Zui0vLXzRFh/wERc2HgRYk2capyFYM3OgNDblRDrPj8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=i06/W+Hf268bE5dn8ix+bzrVlOPatgYJum+VtEbvjuTjUofgEULQZOVZFeTPVFy1BJvTDT+67GqVrUxm4are2h6xTKUSLnWp/KDM9AmEjg8hvaTefvxNXGXoV4g5ITlXe2Kuo8n7D3yDFJPK+Ljo4UId80l1qCl0p7RoSTHtZCY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=tuxon.dev; spf=pass smtp.mailfrom=tuxon.dev; dkim=pass (2048-bit key) header.d=tuxon.dev header.i=@tuxon.dev header.b=Fy30uRlA; arc=none smtp.client-ip=209.85.221.49 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=tuxon.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=tuxon.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=tuxon.dev header.i=@tuxon.dev header.b="Fy30uRlA" Received: by mail-wr1-f49.google.com with SMTP id ffacd0b85a97d-432d2c7a8b9so1249364f8f.2 for ; Fri, 09 Jan 2026 06:37:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tuxon.dev; s=google; t=1767969424; x=1768574224; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=PwXH/65fGSKTqwN64GUgQEIR6iAT3YZ4bpdY++yDPPE=; b=Fy30uRlAlgiGYO+c4kkRrI0wKeC9T3awH7JAtL9K+h8t7r/WZ6Fry+ew7kVs0jx4Bz 2Kts6gw9AXAAjqzRaLf3oHKc/vLlGxR+UyuVWtStxX3LuQ482Qc+eGs0Uva130JvsSZD 17B3+i3q9kZ8NOTXttSs93Z/ADu3E1O5aQxJPb7Wucgm2rL0GgHXokF2zUK0NI6rJTBP owbcCEW2E1zdaiBSMYTH7Glz5cGY7eTetYEdXEkiNJhofdzyxa2ratEGmu5bL/vb7o32 VHARnbDKOh2963RF37Au0EYQO2rpbgaEXF6RXPhSLI0BxkWDKZ0ZUzobqZ/XkhevRS95 LRUQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767969424; x=1768574224; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=PwXH/65fGSKTqwN64GUgQEIR6iAT3YZ4bpdY++yDPPE=; b=EiXvjSGSLWOX+9ZIn1kEjapQEZQU5p5iAx+rVam5AHn1WDt/ez/HbupzXcRk+TGpV/ frz4DLE4tT/lIKA699d9eaMrX9HScKoQXKFlyzn6fCAcKTADzyLhjK1dvPYngGdXKrbr osEG70IOXPZUWKKprYUxjYS3i20wgBhUCnhH6vL1wKFBHVGyf9TY6b9hBrrZNbNR4lGn 5QbUllG0By1hPFn5XXi5CYqjPeYcu7QPjJa9XOHhSXNqEHN+i+5QkOmxMmeTQFAWxeUZ wVycG+A53NaC8h0G7iAIA/jiPjyvIPb1MDUtvq6mUQ+LraCbO1yyVdFJJEPZv4YtTlTX 0Njg== X-Forwarded-Encrypted: i=1; AJvYcCWDTXip0MqRe9OZf8XDj8QnaaVFslLcvcGbsknq0f8iCqvRWO+HkSTz3srZ6qkqOOoCSvulh5ty0AIB2aQ=@vger.kernel.org X-Gm-Message-State: AOJu0Yy6N3zTmqaBufxr18oAugQ2JTrYM5lQkEFzRNFgZYlr5Q03kdFm l2/pDTRJozeFam0wfiN8etYi/nNHRAHxmvQZSfCe6IZ91U0cEajtMjx+kDiDolqD5i3Flef0hs5 xe610 X-Gm-Gg: AY/fxX6zMfytw9+uJY3eshQmPmLDPgZdBkHpifPwjR2sIR0a01f9swtnIjGrjXv2Utz Nu0kAlV/0u6WBiHMqg/LuYbXXzGJsp2ByN/qSHTJ2LG6eRJXaVArouVc4BOVOBg1fSKvqyzkZVF VOJ5wDIMZPtJ+JqzjHEZw4KoVsUpRy0cVpOlEX+xh9U95yGapVrX3DgKU0r4lizynDuECQjhljB OXBmyOJcSxL7HHhHCqAPREvMzD5BwFQvG+3GlZFdXvZF+1c6xq5A68+LC2ONkJatbd9fDyYejKy yTJpofx7HxzT64aLvt0N8yqWTcNbxgbcRVLUAouUynQIzk6LzT5EvJv/l+b/BLOEi3jULjJoCw9 v7/1V+J9vtdBa7J4xxPeOpvt3f5O634oukMHFZ/PuPQdCduhYER4yD3YLS8A+qHcMt3ODRQrgRS VnsPk6Mm94dFG8ckf3g04kKIKpcDw1fQEOFGJ7IlU= X-Google-Smtp-Source: AGHT+IF4yV3/c092rXhw/fsJog+qS63Jw0Lvg6nSkZ+NSHK+evNI7o5vQMYfw7ETawpyEOhIj1Fi2g== X-Received: by 2002:a05:6000:24c5:b0:430:f494:6a9c with SMTP id ffacd0b85a97d-432c3760c3emr11494348f8f.17.1767969423695; Fri, 09 Jan 2026 06:37:03 -0800 (PST) Received: from claudiu-X670E-Pro-RS.. ([82.78.167.31]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-432bd0e17aasm23197216f8f.15.2026.01.09.06.37.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 09 Jan 2026 06:37:03 -0800 (PST) From: Claudiu X-Google-Original-From: Claudiu To: p.zabel@pengutronix.de Cc: claudiu.beznea@tuxon.dev, linux-kernel@vger.kernel.org, linux-renesas-soc@vger.kernel.org, Claudiu Beznea , Biju Das Subject: [PATCH v4 1/2] reset: rzg2l-usbphy-ctrl: Propagate the return value of regmap_field_update_bits() Date: Fri, 9 Jan 2026 16:36:58 +0200 Message-ID: <20260109143659.817797-2-claudiu.beznea.uj@bp.renesas.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260109143659.817797-1-claudiu.beznea.uj@bp.renesas.com> References: <20260109143659.817797-1-claudiu.beznea.uj@bp.renesas.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Claudiu Beznea Propagate the return value of regmap_field_update_bits() to avoid losing any possible error. With this, the return type of rzg2l_usbphy_ctrl_set_pwrrdy() was updated accordingly. Reviewed-by: Philipp Zabel Reviewed-by: Biju Das Signed-off-by: Claudiu Beznea --- Changes in v4: - none Changes in v3: - none Changes in v2: - collected tags drivers/reset/reset-rzg2l-usbphy-ctrl.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/drivers/reset/reset-rzg2l-usbphy-ctrl.c b/drivers/reset/reset-= rzg2l-usbphy-ctrl.c index 4ecb9acb2641..9ce0c1f5d465 100644 --- a/drivers/reset/reset-rzg2l-usbphy-ctrl.c +++ b/drivers/reset/reset-rzg2l-usbphy-ctrl.c @@ -117,13 +117,13 @@ static const struct regmap_config rzg2l_usb_regconf = =3D { .max_register =3D 1, }; =20 -static void rzg2l_usbphy_ctrl_set_pwrrdy(struct regmap_field *pwrrdy, - bool power_on) +static int rzg2l_usbphy_ctrl_set_pwrrdy(struct regmap_field *pwrrdy, + bool power_on) { u32 val =3D power_on ? 0 : 1; =20 /* The initialization path guarantees that the mask is 1 bit long. */ - regmap_field_update_bits(pwrrdy, 1, val); + return regmap_field_update_bits(pwrrdy, 1, val); } =20 static void rzg2l_usbphy_ctrl_pwrrdy_off(void *data) @@ -138,6 +138,7 @@ static int rzg2l_usbphy_ctrl_pwrrdy_init(struct device = *dev) struct regmap *regmap; const int *data; u32 args[2]; + int ret; =20 data =3D device_get_match_data(dev); if ((uintptr_t)data !=3D RZG2L_USBPHY_CTRL_PWRRDY) @@ -161,7 +162,9 @@ static int rzg2l_usbphy_ctrl_pwrrdy_init(struct device = *dev) if (IS_ERR(pwrrdy)) return PTR_ERR(pwrrdy); =20 - rzg2l_usbphy_ctrl_set_pwrrdy(pwrrdy, true); + ret =3D rzg2l_usbphy_ctrl_set_pwrrdy(priv->pwrrdy, true); + if (ret) + return ret; =20 return devm_add_action_or_reset(dev, rzg2l_usbphy_ctrl_pwrrdy_off, pwrrdy= ); } --=20 2.43.0 From nobody Mon Feb 9 07:32:31 2026 Received: from mail-wm1-f41.google.com (mail-wm1-f41.google.com [209.85.128.41]) (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 F31CF35FF7C for ; Fri, 9 Jan 2026 14:37:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767969431; cv=none; b=Ytr6XV4yHNg3TCjlS1QDmixJwGlOz9bu8ZkiCsYgt8GacbiNXZRdlLPYwNB2jfZbwXUAim+b6xzP2hEQQLeTaJiML/isDvNi7a1aI1BFnxeqXbCuzzD8bamc3KF+Y09V95YdRpZ5d+cVcKfiBQw5E31zBXsxwYdy3UxBProPTJU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767969431; c=relaxed/simple; bh=9UVrFuOdE0n9T0uTC/k3M6/u9RxP8HJw4WF38+TDv9U=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=g8GYJMZ14wkoK/OIZWRZgkpWLPSZE6ib04jVC8ZR5zb2rS5uNifTDw6mijeMfB1peixtViZ+XF8bPZ5/eh3p3UZhokTnOAXxJj+o6nL/eDhV2vlxTl6kHxd7WanQltyqeBGvu9Fa19X3M+amJlPXtpnfoVZLrpDujcsqwMTtoPA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=tuxon.dev; spf=pass smtp.mailfrom=tuxon.dev; dkim=pass (2048-bit key) header.d=tuxon.dev header.i=@tuxon.dev header.b=mep/gwjf; arc=none smtp.client-ip=209.85.128.41 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=tuxon.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=tuxon.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=tuxon.dev header.i=@tuxon.dev header.b="mep/gwjf" Received: by mail-wm1-f41.google.com with SMTP id 5b1f17b1804b1-47d3ffb0f44so29990935e9.3 for ; Fri, 09 Jan 2026 06:37:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tuxon.dev; s=google; t=1767969425; x=1768574225; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=MqdSouMd2yP+Io2gtTHjnphBWXnobFguRezSiLromD8=; b=mep/gwjfMMxzpknuBJBwD/4NU4YLgbrTHNmDw5e96u1lVqVHlW0xaWNTquyDjIgfrM n5L3yyb58HBKm1zygeiBK2f4hqVufxghC0D/o8Hq+AjrW053VnB16+XeIqd3NJrpYoY2 bZWCDCMg/Rc8EaGHuYQwfN6yXaGZ8QzTcm+X/sq5IF4ex5SEPEvQZ47mzTtpcB/3saFF S6KEXCfO00j9i2O7c6ZRVZRy1X0hjwTpT5vPjB8j14NF4pR8l3mAxHCe6dascxqPhIl9 snDodz9KSHiOZv4+mJIrHsUl1ZB7v49CusnZGMRbJyYhXBrbPeuEldKPjneUOf5W1J5U MUqg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767969425; x=1768574225; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=MqdSouMd2yP+Io2gtTHjnphBWXnobFguRezSiLromD8=; b=AWNbQuRSFWDLsguOEkVziyWOFffNSQKhRWXr8r88P2txFSxPvHYjVe9InvsQ3biPaE HbQ256wlssFVdxEl7iFGTNlJTIy/rDNjK3aDRTznz2+kDjA0nGoBeZ5wUMLdDVc7aj3e gtEKI61CUyYzrRQdXaOZtl4Ipmo99OuAMmAwHBDjvQa+bH5E4FiB6jLyWpKIwjm6UkEE A2nyLsv9lgzU5uDLTj2WGNF7mvjF9d4ZnEHe1X+WlS4+U9drdGlxdPaOL+9s7YwlSRAQ X+NhEM1c4/WW/Uvbxhjxc4GzuFCTw62zZNbJvcbZuU2dHa6/KCU8s4SIVi/+7EoF/Wte am0A== X-Forwarded-Encrypted: i=1; AJvYcCXucWHVDEqj3QRmR6fwQb1HRMnG3QEwPcWQgUXh2idCDEdRGhKTFtzWCSnK8CYmdVleV4qzCLWuqOR7Nks=@vger.kernel.org X-Gm-Message-State: AOJu0YwCpFsXe3u1ZCgRn3+ohFhAYvFlnLllns0myT0lfQlGMmn2bUm8 zy3q/i0wLajmLP2TBaqVuHq9KKu/lvjCtgzJrYTIXYEjqY6rP+PCtdvBZj6YjynRWTzfvJ/XJUl YQjQ4 X-Gm-Gg: AY/fxX62RezLudrpxNrDnd+E6Qiwq/tEHyeXXvJy2auOUqb2TYCGNoOeQLLLGxFmIrE 50dCU/856xcRSKGVmM8/Juu5UTZvvgx+dBXAlttL2HX/KQHKBKCdkyT2fcPdJmCSC2H/tSowal6 2OprRTGzub6ieI83vt52ijxsTJ/PamqBjlN2OkqUlIaC7cbVXl02tEsWGOMXytUre2vVJiDErua 8T3ve3EJeLx8bKsSmIZTQRoVVLzDmP121IoDcY9vMrboRD6WBosixNK7K2o55ZMndJ8I7y/S0eA UJzXuFM2h1SD/biff+LzwjIzoe/CXxlKXW3zSUkZelExqiJDCqCXCryt5VMSDTtiFsrvSvHpWI0 yKJxMREbU7xrtlWK/jLItcBsAdXOKOV1CucarlwXSTxB0d/1pSEZo/qRoIOBJV55qr3Z+RmVxc9 Dt+m1WXa+tGRyz6kitE1LNbKHwTzwxrRwVu1ajycY= X-Google-Smtp-Source: AGHT+IEupF8eWNAcyYC7iH1qXqE+zpsvrN/76zbiRusCbCQGkNoFeGwL4Y2pZjv5Nh/hxsJJwQIj3Q== X-Received: by 2002:a05:600c:a406:b0:477:7bca:8b34 with SMTP id 5b1f17b1804b1-47d85bf0627mr97878385e9.6.1767969425038; Fri, 09 Jan 2026 06:37:05 -0800 (PST) Received: from claudiu-X670E-Pro-RS.. ([82.78.167.31]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-432bd0e17aasm23197216f8f.15.2026.01.09.06.37.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 09 Jan 2026 06:37:04 -0800 (PST) From: Claudiu X-Google-Original-From: Claudiu To: p.zabel@pengutronix.de Cc: claudiu.beznea@tuxon.dev, linux-kernel@vger.kernel.org, linux-renesas-soc@vger.kernel.org, Claudiu Beznea , Biju Das Subject: [PATCH v4 2/2] reset: rzg2l-usbphy-ctrl: Add suspend/resume support Date: Fri, 9 Jan 2026 16:36:59 +0200 Message-ID: <20260109143659.817797-3-claudiu.beznea.uj@bp.renesas.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260109143659.817797-1-claudiu.beznea.uj@bp.renesas.com> References: <20260109143659.817797-1-claudiu.beznea.uj@bp.renesas.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Claudiu Beznea The RZ/G2L USBPHY control driver is also used on the RZ/G3S SoC. The RZ/G3S SoC supports a power-saving mode in which power to most USB components (including the USBPHY control block) is turned off. Because of this, the USBPHY control block needs to be reconfigured when returning from power-saving mode. Add suspend/resume support to handle runtime suspend/resume of the device, assert/deassert the reset signal, and reinitialize the USBPHY control block. Reviewed-by: Biju Das Reviewed-by: Philipp Zabel Signed-off-by: Claudiu Beznea --- Changes in v4: - warn when suspending with resets de-asserted - collected tags Changes in v3: - collected tags Changes in v2: - used pm_runtime_put_sync() in rzg2l_usbphy_ctrl_suspend() drivers/reset/reset-rzg2l-usbphy-ctrl.c | 99 +++++++++++++++++++++---- 1 file changed, 84 insertions(+), 15 deletions(-) diff --git a/drivers/reset/reset-rzg2l-usbphy-ctrl.c b/drivers/reset/reset-= rzg2l-usbphy-ctrl.c index 9ce0c1f5d465..32bc268c9149 100644 --- a/drivers/reset/reset-rzg2l-usbphy-ctrl.c +++ b/drivers/reset/reset-rzg2l-usbphy-ctrl.c @@ -36,6 +36,7 @@ struct rzg2l_usbphy_ctrl_priv { struct reset_control *rstc; void __iomem *base; struct platform_device *vdev; + struct regmap_field *pwrrdy; =20 spinlock_t lock; }; @@ -92,6 +93,19 @@ static int rzg2l_usbphy_ctrl_status(struct reset_control= ler_dev *rcdev, return !!(readl(priv->base + RESET) & port_mask); } =20 +/* put pll and phy into reset state */ +static void rzg2l_usbphy_ctrl_init(struct rzg2l_usbphy_ctrl_priv *priv) +{ + unsigned long flags; + u32 val; + + spin_lock_irqsave(&priv->lock, flags); + val =3D readl(priv->base + RESET); + val |=3D RESET_SEL_PLLRESET | RESET_PLLRESET | PHY_RESET_PORT2 | PHY_RESE= T_PORT1; + writel(val, priv->base + RESET); + spin_unlock_irqrestore(&priv->lock, flags); +} + #define RZG2L_USBPHY_CTRL_PWRRDY 1 =20 static const struct of_device_id rzg2l_usbphy_ctrl_match_table[] =3D { @@ -131,9 +145,9 @@ static void rzg2l_usbphy_ctrl_pwrrdy_off(void *data) rzg2l_usbphy_ctrl_set_pwrrdy(data, false); } =20 -static int rzg2l_usbphy_ctrl_pwrrdy_init(struct device *dev) +static int rzg2l_usbphy_ctrl_pwrrdy_init(struct device *dev, + struct rzg2l_usbphy_ctrl_priv *priv) { - struct regmap_field *pwrrdy; struct reg_field field; struct regmap *regmap; const int *data; @@ -158,15 +172,15 @@ static int rzg2l_usbphy_ctrl_pwrrdy_init(struct devic= e *dev) field.lsb =3D __ffs(args[1]); field.msb =3D __fls(args[1]); =20 - pwrrdy =3D devm_regmap_field_alloc(dev, regmap, field); - if (IS_ERR(pwrrdy)) - return PTR_ERR(pwrrdy); + priv->pwrrdy =3D devm_regmap_field_alloc(dev, regmap, field); + if (IS_ERR(priv->pwrrdy)) + return PTR_ERR(priv->pwrrdy); =20 ret =3D rzg2l_usbphy_ctrl_set_pwrrdy(priv->pwrrdy, true); if (ret) return ret; =20 - return devm_add_action_or_reset(dev, rzg2l_usbphy_ctrl_pwrrdy_off, pwrrdy= ); + return devm_add_action_or_reset(dev, rzg2l_usbphy_ctrl_pwrrdy_off, priv->= pwrrdy); } =20 static int rzg2l_usbphy_ctrl_probe(struct platform_device *pdev) @@ -175,9 +189,7 @@ static int rzg2l_usbphy_ctrl_probe(struct platform_devi= ce *pdev) struct rzg2l_usbphy_ctrl_priv *priv; struct platform_device *vdev; struct regmap *regmap; - unsigned long flags; int error; - u32 val; =20 priv =3D devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL); if (!priv) @@ -191,7 +203,7 @@ static int rzg2l_usbphy_ctrl_probe(struct platform_devi= ce *pdev) if (IS_ERR(regmap)) return PTR_ERR(regmap); =20 - error =3D rzg2l_usbphy_ctrl_pwrrdy_init(dev); + error =3D rzg2l_usbphy_ctrl_pwrrdy_init(dev, priv); if (error) return error; =20 @@ -214,12 +226,7 @@ static int rzg2l_usbphy_ctrl_probe(struct platform_dev= ice *pdev) goto err_pm_disable_reset_deassert; } =20 - /* put pll and phy into reset state */ - spin_lock_irqsave(&priv->lock, flags); - val =3D readl(priv->base + RESET); - val |=3D RESET_SEL_PLLRESET | RESET_PLLRESET | PHY_RESET_PORT2 | PHY_RESE= T_PORT1; - writel(val, priv->base + RESET); - spin_unlock_irqrestore(&priv->lock, flags); + rzg2l_usbphy_ctrl_init(priv); =20 priv->rcdev.ops =3D &rzg2l_usbphy_ctrl_reset_ops; priv->rcdev.of_reset_n_cells =3D 1; @@ -266,10 +273,72 @@ static void rzg2l_usbphy_ctrl_remove(struct platform_= device *pdev) reset_control_assert(priv->rstc); } =20 +static int rzg2l_usbphy_ctrl_suspend(struct device *dev) +{ + struct rzg2l_usbphy_ctrl_priv *priv =3D dev_get_drvdata(dev); + u32 val; + int ret; + + val =3D readl(priv->base + RESET); + if (!(val & PHY_RESET_PORT2) || !(val & PHY_RESET_PORT1)) + WARN(1, "Suspend with resets de-asserted\n"); + + pm_runtime_put_sync(dev); + + ret =3D reset_control_assert(priv->rstc); + if (ret) + goto rpm_resume; + + ret =3D rzg2l_usbphy_ctrl_set_pwrrdy(priv->pwrrdy, false); + if (ret) + goto reset_deassert; + + return 0; + +reset_deassert: + reset_control_deassert(priv->rstc); +rpm_resume: + pm_runtime_resume_and_get(dev); + return ret; +} + +static int rzg2l_usbphy_ctrl_resume(struct device *dev) +{ + struct rzg2l_usbphy_ctrl_priv *priv =3D dev_get_drvdata(dev); + int ret; + + ret =3D rzg2l_usbphy_ctrl_set_pwrrdy(priv->pwrrdy, true); + if (ret) + return ret; + + ret =3D reset_control_deassert(priv->rstc); + if (ret) + goto pwrrdy_off; + + ret =3D pm_runtime_resume_and_get(dev); + if (ret) + goto reset_assert; + + rzg2l_usbphy_ctrl_init(priv); + + return 0; + +reset_assert: + reset_control_assert(priv->rstc); +pwrrdy_off: + rzg2l_usbphy_ctrl_set_pwrrdy(priv->pwrrdy, false); + return ret; +} + +static DEFINE_SIMPLE_DEV_PM_OPS(rzg2l_usbphy_ctrl_pm_ops, + rzg2l_usbphy_ctrl_suspend, + rzg2l_usbphy_ctrl_resume); + static struct platform_driver rzg2l_usbphy_ctrl_driver =3D { .driver =3D { .name =3D "rzg2l_usbphy_ctrl", .of_match_table =3D rzg2l_usbphy_ctrl_match_table, + .pm =3D pm_ptr(&rzg2l_usbphy_ctrl_pm_ops), }, .probe =3D rzg2l_usbphy_ctrl_probe, .remove =3D rzg2l_usbphy_ctrl_remove, --=20 2.43.0