[PATCH v4 2/9] reset: rzg2l-usbphy-ctrl: Introduce info struct for match data
From: Biju
Date: Thu Jul 09 2026 - 04:38:28 EST
From: Biju Das <biju.das.jz@xxxxxxxxxxxxxx>
Replace the integer flag RZG2L_USBPHY_CTRL_PWRRDY with a structured
rzg2l_usbphy_ctrl_info type to hold per-compatible configuration data.
The new struct currently carries a pwrrdy boolean. The probe function
now retrieves this struct via device_get_match_data() and
conditionally calls rzg2l_usbphy_ctrl_pwrrdy_init() based on the
pwrrdy flag, removing the previous integer cast approach.
This refactoring prepares the driver for RZ/G3L (r9a08g046) support,
which requires a different regulator configuration with two per-port
VBUS regulators.
Signed-off-by: Biju Das <biju.das.jz@xxxxxxxxxxxxxx>
---
v3->v4:
* Updated the commit description.
* Moved the handling of regulator_driver_name to patch #3
in preparation for id_table match.
v2->v3:
No change.
v1->v2:
* Updated commit description.
---
drivers/reset/reset-rzg2l-usbphy-ctrl.c | 32 ++++++++++++++-----------
1 file changed, 18 insertions(+), 14 deletions(-)
diff --git a/drivers/reset/reset-rzg2l-usbphy-ctrl.c b/drivers/reset/reset-rzg2l-usbphy-ctrl.c
index fd75d9601a3b..84e745e49240 100644
--- a/drivers/reset/reset-rzg2l-usbphy-ctrl.c
+++ b/drivers/reset/reset-rzg2l-usbphy-ctrl.c
@@ -41,6 +41,10 @@ struct rzg2l_usbphy_ctrl_priv {
spinlock_t lock;
};
+struct rzg2l_usbphy_ctrl_info {
+ bool pwrrdy;
+};
+
#define rcdev_to_priv(x) container_of(x, struct rzg2l_usbphy_ctrl_priv, rcdev)
static int rzg2l_usbphy_ctrl_assert(struct reset_controller_dev *rcdev,
@@ -106,14 +110,15 @@ static void rzg2l_usbphy_ctrl_init(struct rzg2l_usbphy_ctrl_priv *priv)
spin_unlock_irqrestore(&priv->lock, flags);
}
-#define RZG2L_USBPHY_CTRL_PWRRDY 1
+static const struct rzg2l_usbphy_ctrl_info rzg2l_info = {};
+
+static const struct rzg2l_usbphy_ctrl_info rzg3s_info = {
+ .pwrrdy = true,
+};
static const struct of_device_id rzg2l_usbphy_ctrl_match_table[] = {
- { .compatible = "renesas,rzg2l-usbphy-ctrl" },
- {
- .compatible = "renesas,r9a08g045-usbphy-ctrl",
- .data = (void *)RZG2L_USBPHY_CTRL_PWRRDY
- },
+ { .compatible = "renesas,rzg2l-usbphy-ctrl", .data = &rzg2l_info },
+ { .compatible = "renesas,r9a08g045-usbphy-ctrl", .data = &rzg3s_info },
{ /* Sentinel */ }
};
MODULE_DEVICE_TABLE(of, rzg2l_usbphy_ctrl_match_table);
@@ -153,14 +158,9 @@ static int rzg2l_usbphy_ctrl_pwrrdy_init(struct device *dev,
{
struct reg_field field;
struct regmap *regmap;
- const int *data;
u32 args[2];
int ret;
- data = device_get_match_data(dev);
- if ((uintptr_t)data != RZG2L_USBPHY_CTRL_PWRRDY)
- return 0;
-
regmap = syscon_regmap_lookup_by_phandle_args(dev->of_node,
"renesas,sysc-pwrrdy",
ARRAY_SIZE(args), args);
@@ -188,6 +188,7 @@ static int rzg2l_usbphy_ctrl_pwrrdy_init(struct device *dev,
static int rzg2l_usbphy_ctrl_probe(struct platform_device *pdev)
{
+ const struct rzg2l_usbphy_ctrl_info *info;
struct device *dev = &pdev->dev;
struct rzg2l_usbphy_ctrl_priv *priv;
struct platform_device *vdev;
@@ -206,9 +207,12 @@ static int rzg2l_usbphy_ctrl_probe(struct platform_device *pdev)
if (IS_ERR(regmap))
return PTR_ERR(regmap);
- error = rzg2l_usbphy_ctrl_pwrrdy_init(dev, priv);
- if (error)
- return error;
+ info = device_get_match_data(dev);
+ if (info->pwrrdy) {
+ error = rzg2l_usbphy_ctrl_pwrrdy_init(dev, priv);
+ if (error)
+ return error;
+ }
priv->rstc = devm_reset_control_get_exclusive(&pdev->dev, NULL);
if (IS_ERR(priv->rstc))
--
2.43.0