immortalwrt/target/linux/rockchip/patches-6.6/032-01-v6.2-regulator-rk808-reduce-struct-rk808-usage.patch
Tianling Shen 4d5fe0a362
rockchip: move kernel files to 6.6
Move kernel config and patches to kernel 6.6.

Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
2024-04-07 17:28:06 +08:00

83 lines
2.6 KiB
Diff

From 647e57351f8ebc37d8e12cbc0f4bf7471754a0cc Mon Sep 17 00:00:00 2001
From: Sebastian Reichel <sebastian.reichel@collabora.com>
Date: Thu, 20 Oct 2022 22:42:40 +0200
Subject: [PATCH] regulator: rk808: reduce 'struct rk808' usage
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 | 20 ++++++++++++--------
1 file changed, 12 insertions(+), 8 deletions(-)
--- a/drivers/regulator/rk808-regulator.c
+++ b/drivers/regulator/rk808-regulator.c
@@ -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
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);
}