regulator: rk808: reduce 'struct rk808' usage
authorSebastian Reichel <sebastian.reichel@collabora.com>
Thu, 20 Oct 2022 20:42:40 +0000 (22:42 +0200)
committerMark Brown <broonie@kernel.org>
Mon, 28 Nov 2022 13:04:40 +0000 (13:04 +0000)
Reduce usage of 'struct rk808' (driver data of the parent MFD), so
that only the chip variant field is still being accessed directly.
This allows restructuring the MFD driver to support SPI based
PMICs.

Acked-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
Link: https://lore.kernel.org/r/20221020204251.108565-3-sebastian.reichel@collabora.com
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/regulator/rk808-regulator.c

index 127dc2e2e6903bfc92c2a1abad12a720c7f26626..ce9c64cadebacb81198a0e485d1abbd6e5700b6f 100644 (file)
@@ -14,7 +14,6 @@
 
 #include <linux/delay.h>
 #include <linux/gpio.h>
-#include <linux/i2c.h>
 #include <linux/module.h>
 #include <linux/of_device.h>
 #include <linux/of_gpio.h>
@@ -1286,19 +1285,23 @@ dt_parse_end:
 static int rk808_regulator_probe(struct platform_device *pdev)
 {
        struct rk808 *rk808 = dev_get_drvdata(pdev->dev.parent);
-       struct i2c_client *client = rk808->i2c;
        struct regulator_config config = {};
        struct regulator_dev *rk808_rdev;
        struct rk808_regulator_data *pdata;
        const struct regulator_desc *regulators;
+       struct regmap *regmap;
        int ret, i, nregulators;
 
+       regmap = dev_get_regmap(pdev->dev.parent, NULL);
+       if (!regmap)
+               return -ENODEV;
+
        pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL);
        if (!pdata)
                return -ENOMEM;
 
-       ret = rk808_regulator_dt_parse_pdata(&pdev->dev, &client->dev,
-                                            rk808->regmap, pdata);
+       ret = rk808_regulator_dt_parse_pdata(&pdev->dev, pdev->dev.parent,
+                                            regmap, pdata);
        if (ret < 0)
                return ret;
 
@@ -1326,21 +1329,22 @@ static int rk808_regulator_probe(struct platform_device *pdev)
                nregulators = RK818_NUM_REGULATORS;
                break;
        default:
-               dev_err(&client->dev, "unsupported RK8XX ID %lu\n",
+               dev_err(&pdev->dev, "unsupported RK8XX ID %lu\n",
                        rk808->variant);
                return -EINVAL;
        }
 
-       config.dev = &client->dev;
+       config.dev = &pdev->dev;
+       config.dev->of_node = pdev->dev.parent->of_node;
        config.driver_data = pdata;
-       config.regmap = rk808->regmap;
+       config.regmap = regmap;
 
        /* Instantiate the regulators */
        for (i = 0; i < nregulators; i++) {
                rk808_rdev = devm_regulator_register(&pdev->dev,
                                                     &regulators[i], &config);
                if (IS_ERR(rk808_rdev)) {
-                       dev_err(&client->dev,
+                       dev_err(&pdev->dev,
                                "failed to register %d regulator\n", i);
                        return PTR_ERR(rk808_rdev);
                }