[PATCH v6 03/10] reset: rzg2l-usbphy-ctrl: Introduce info struct for match data
Biju <[email protected]> Thu, 6 Aug 2026 11:22:22 +0100
| Newsgroups | org.kernel.vger.linux-renesas-soc,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
From: Biju Das <[email protected]> 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 <[email protected]> --- v5->v6: * No change. v4->v5: * No change. 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 f90fdb7e6ea4..79503f6f4b23 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