From nobody Mon Feb 9 17:06:52 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 0D79D48DA42 for ; Thu, 8 Jan 2026 10:26:07 +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=1767867976; cv=none; b=rsxxlzQHGDxdaVrBknjZ72XscjnzpGlpjENYEdgm1ELrOB3Npv+tCCqyWDsJtWwyE2NSNNZ2Weg7jt1VXca/bWuuhmF0BkC0oTajf9BjIUinzAW23g+UcavGfENIy+YTO6nzIK8iHCF5UQfqDgSvgpXI5KzkbymMZ0VKGMY+fZk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767867976; c=relaxed/simple; bh=SSCOetx+bf7TOiWJB2uQADhyOYBmEsY5VHm0DVSXU/8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=APGeXXouFHXeuPVYN0oD5MyYcrdhp4iO7UIEMG+6nmUZcpvSfuiUQ/+53jTgp98IPlhsHMeZQxxrd8WLCj0+QpAc3ixx6NfUJppaSNpYP9/3TZeDzzjYLfTEGuRd67NjPBSkl0Eq/fHaK2dNP2kzK2XDcG3ynjA+zZYyDPxITBY= 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=OUKSl3Sv; 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="OUKSl3Sv" Received: by mail-wr1-f49.google.com with SMTP id ffacd0b85a97d-43260a5a096so2074098f8f.0 for ; Thu, 08 Jan 2026 02:26:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tuxon.dev; s=google; t=1767867963; x=1768472763; 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=UzFU1t39uNOcSH5TMPmCZKGdfnSAK8ONwEhnmKi3ApE=; b=OUKSl3SvWbGZmVOLzF109OfmmyYo2MFpOwrXVLCZqh5tLzocAH2Rf3rmTxHVUYwvJL BC7SehBeXySvRzkWimsAQ+kigzQ7VpDcIKEaQdYa3QA/QlVQSj9defLWG4xTqoXtEjNE +PXD/l84BqMRMdRrYvbwQ9l8N1OhODYfvegD3PNEeqm2+Xgu/LPzw2VwFnnDV8bpvKGy njF3VJIfpcIyKPT/roRI8HAtjZzrZzy4kiANH8tJ5aH50hwKBulOItB7z/0bhxWWkyoq MtSNqeaQYkSEELR9r6G3ZgsCd385AFAa9uihvNfdxYRj18T1Fw0wPm4LdpfQfdYbWI/A aESA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767867963; x=1768472763; 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=UzFU1t39uNOcSH5TMPmCZKGdfnSAK8ONwEhnmKi3ApE=; b=m7KWIE2ZqATlJa2XeZtMbqU79F9QuiAsNSk7Zrw1IVicmo2EZtIWP+y1kQArKeeFba 6wAMl6rKBr+8iriBzQ3J2JZeYy9XKwHcVuDA+xkBSb7/CmjjC6cg8wyKcqIHdU3QcqbX J183egzYtLA6GvuUg8hO84ZpgjnmeEqIhkN8kLQ1ffLUTvKUuuyr09ryBMkq4fQ/om1P mYAYPDBPCIVPMLucYWKVbs109nWlT9M6Q5bCi/iB8E0Pl0do/7QHAqcN3wyBaTgwDTPY rgulpZtejUtPZfTgchIIj7hWVr6A3U7nrqcjXd6sG8ROBxDZEi8xBFURLdOh8baCU3ZG qw7A== X-Forwarded-Encrypted: i=1; AJvYcCWfvrKcS4k61C9NUBWrBZw0ZaaokaP9JrtLtmszp9gW1exYsDT+jCw1IxVn32Ane61lnPDYspMtKFIYa8A=@vger.kernel.org X-Gm-Message-State: AOJu0YxE8XPNjjElRjoQzz05dGvZwDcHxqPs1sbYQQRQl5yY1NPEFpLB 7V0Pfn1t7O81F++XuANqP3FU1re/Vhpp4O0K8/PGvah+WNZH5ZSFQ3o/qtFDgrA2m6glDizaxN4 6cTru X-Gm-Gg: AY/fxX5xKZ6dByALsmMHlZRW2PpNoKxNJzkim1S9KkYzvkcdfe9S/HF1j/ACD5UAskz cc1dqhWlDWzt3leBPRESBql8TpvgbjgKy5wSINE0WZPoAUWU9/roNBBlcI6N5TNA9IzSO1FkEce CIM73BX/DRhQM0P4lxppTDbf+IXmcT8q8fyeol3J3cNrZncaDaZtMrQh9gGGizhuOavB8YBo9no y6VoxWSyyMNxY9pK1O9R80aoc7/PJ/J1DVe5HotKggSGbmhXLX8ye+/FNFokIqusArnRjtb2Wtr a2jhVvr9LuwtTmm5rxDlMUkkr0z6Yis31GgURAchb97azkIqemsBi0Sc1Ft34tRaEA9BMiN/G0w XenztZQ+wj2No3h5R9kccVnH3lJsoYaHueg6XOcXsiI6dMqQxLz4r1qR9+RbxpN0vfUHea5l/EE eNjYaZdHBhXrsxdZXGLqPSgVKwnY5NzSs6VBQ+yTs= X-Google-Smtp-Source: AGHT+IE0CNR982PLvgnsDGxUBoi/E06kF5nhcy/YB4oafov1EbceLrrFoApXZmvqJ5UoCbgrcv79ng== X-Received: by 2002:a05:6000:1acb:b0:430:f879:a0fc with SMTP id ffacd0b85a97d-432c3790b06mr6924021f8f.21.1767867963408; Thu, 08 Jan 2026 02:26:03 -0800 (PST) Received: from claudiu-X670E-Pro-RS.. ([82.78.167.17]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-432bd5df90dsm14925966f8f.20.2026.01.08.02.26.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 08 Jan 2026 02:26: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 Subject: [PATCH v3 1/2] reset: rzg2l-usbphy-ctrl: Propagate the return value of regmap_field_update_bits() Date: Thu, 8 Jan 2026 12:25:59 +0200 Message-ID: <20260108102600.3477012-2-claudiu.beznea.uj@bp.renesas.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260108102600.3477012-1-claudiu.beznea.uj@bp.renesas.com> References: <20260108102600.3477012-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 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 17:06:52 2026 Received: from mail-wr1-f43.google.com (mail-wr1-f43.google.com [209.85.221.43]) (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 1E4A048DA28 for ; Thu, 8 Jan 2026 10:26:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.43 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767867973; cv=none; b=PwvjnVt9AMFX05qPA5Zp+cwncWk/AK/xKyIRJBVDF9Ppv+2h4AIZs58liGkX0OSDmiscC4cR1y83H8o9md7w5t+vZYR3TwpIW30WNysCwpx3XP2zIWAG09gFSkLMV4NojqUITWzuVde9rB7zf4fHvhtGjpB7nP+8uJNAE7b3eis= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767867973; c=relaxed/simple; bh=aud3hA9J+dNP/yaWmli9RR/ktDD7fOSwXxacJ9Zj1/U=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=X3KtPhvvT/nRdiTyFg56R/NYrRUlEUIcd1PGO5h0L0u7HRA/U2KQSvYyaPiNv0wT8cbsWzHfNZpPWQ8Uj0QysTn/TD6ghmk12KaQ5mYIXqhs8yW7M4LiSVHDJXVWxzY6uztupiWbt11SWvBvLzIf6ttobywQIVR4CuJHqo0YgtA= 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=l7aIJaq5; arc=none smtp.client-ip=209.85.221.43 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="l7aIJaq5" Received: by mail-wr1-f43.google.com with SMTP id ffacd0b85a97d-42fb5810d39so1653057f8f.2 for ; Thu, 08 Jan 2026 02:26:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tuxon.dev; s=google; t=1767867965; x=1768472765; 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=xKGt+zbBP1z1Ia5xu+9oywwacO9PwHZAgfPXexEJe7M=; b=l7aIJaq5CPcgdJLrySghxGV4kWKSFlavhVoxHr5mpsHM5s8kPWCokwtx8zP1ggLvUQ W9xF8Me9U3N0dCvVQ7mM+mS7wHKm12h5yojhoplCV9pOv5GUqax+LMdHIh18NORjo4jB JKQiy00IpK7h3OJoV0Br8qYC8+G4mu09QLcXoMFk/NSdC9Kq7UZoCG7q9H4vKnqfJosQ 4r5txZ91gKnLg79vTmMVLMUBSjIuksjeUiKabn15z/EwPSPIKfOPBlCQWB12nfNHlR+1 QCwb+if2TlImE3v0ZV5TO+4uVXNDX17Dzc9seCn253i1qKo5fGXJQkj6z+MslYfM/jZj 9OJQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767867965; x=1768472765; 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=xKGt+zbBP1z1Ia5xu+9oywwacO9PwHZAgfPXexEJe7M=; b=rSxIsYJUHSKp19iBmOvgGNaoKbG3AysleNjVJMJ/Df/Hd7LFoc0qnEpGKYKoNKl8NV 7cgw1Ngq8JsTjACm1Bnk20blnMBQN/Up2AqxEJF3hXHajZaQd4FnnTJAOViQSr3vy7Xl 2C40rC5ZLC/AZvxrDO7zQuZ0nTsjMHO4ES+LpWuWN4yBDEjtUTxTmyaKpQeWI+Qv3n0G 2nqHo46ZVk/wnGlW8J6fnIrwvpVC6daLyFe3J6bzVg3hJ/UTmGj9QlysyggYUnSJAOGv G+dGmkmduAvQ2DtX2lzoiwqX5c5QkKCplh36DjSZmQI87QnfV53nVmXQYP7zcVTteDEn l/BQ== X-Forwarded-Encrypted: i=1; AJvYcCWfJqTvHbZUjh/2yT72z5EPmjY0uTNThQFFCfN5Qi4mTEw8ufLMUrybjBDjb5fietr3DYpYnMaGLWOPibk=@vger.kernel.org X-Gm-Message-State: AOJu0YwrN1n7GY4VGHspmRj/CcHb0VDeugEugz0hSo3hyexAm/tannUX PPNyXp4l/VzlwobcwJcSLzdrV59Od6F4kGzerJJA/IhUovJgoO654YGgmnutqnKPl99ZGHIM/kL vzV5f X-Gm-Gg: AY/fxX76x7aHJk7CAelzZnDWh7PrHm2Zx4BG0xyqyfsac9qK1ldz7QsRFb/MhLpP+Mn VVQVgwiJkVbmfVDgwXSR4KMnyhMNhwhmFYGidPUn1O7KNj71reScViPW+30Iz3LbGr0iV8/B2zp ccIUpkMpaF4PhCv4MbUCtjCMZUGU9c0AG3rW38tUVyqSq/oJTTeF2uD1RAVG+X55/GTgHrRgnvh NQ52cin8JM69H7wb8/fcMpV/dpuSpBOi7lLGDwKx89ho7Wq4XhHOqhxLirbcPLgV7BpmhocSqjD hAWbLzsYiDTD4qG0BWg4QEXgsYF2MduRN72TYqwlmbYrxm5REIQDqP1SXIds5C2S0nQucLTXxji t7AlfpBDMCXilz+rTdarmomSKHswC5cGkaczwUOzTrE0DZS7IRajT5SVpFmm7YTidnXczmt+OoZ qc4Tw35om1IN4+j9Hjmw9nAzg4u51i7yDNpQtSYKY= X-Google-Smtp-Source: AGHT+IE6zYO5DX+NSREb6ieFD1ZGkz81DazBVs0kBJL/t8pOFQYJ8lc0LFWfcp71Js9AQoleM8JLHw== X-Received: by 2002:a05:6000:288f:b0:431:4bd:4edf with SMTP id ffacd0b85a97d-432c374fe9bmr7317994f8f.36.1767867964822; Thu, 08 Jan 2026 02:26:04 -0800 (PST) Received: from claudiu-X670E-Pro-RS.. ([82.78.167.17]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-432bd5df90dsm14925966f8f.20.2026.01.08.02.26.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 08 Jan 2026 02:26: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 Subject: [PATCH v3 2/2] reset: rzg2l-usbphy-ctrl: Add suspend/resume support Date: Thu, 8 Jan 2026 12:26:00 +0200 Message-ID: <20260108102600.3477012-3-claudiu.beznea.uj@bp.renesas.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260108102600.3477012-1-claudiu.beznea.uj@bp.renesas.com> References: <20260108102600.3477012-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 Signed-off-by: Claudiu Beznea Reviewed-by: Philipp Zabel --- 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 | 94 +++++++++++++++++++++---- 1 file changed, 79 insertions(+), 15 deletions(-) diff --git a/drivers/reset/reset-rzg2l-usbphy-ctrl.c b/drivers/reset/reset-= rzg2l-usbphy-ctrl.c index 9ce0c1f5d465..1a1581643bf3 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,67 @@ 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); + int ret; + + 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