136 lines
4.6 KiB
Diff
136 lines
4.6 KiB
Diff
From 6f522f7beaebd46a80cd8c808b7634be5b80ddd8 Mon Sep 17 00:00:00 2001
|
|
From: Sebastian Reichel <sebastian.reichel@collabora.com>
|
|
Date: Tue, 12 Jul 2022 14:19:57 +0200
|
|
Subject: [PATCH 299/469] clk: 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: Stephen Boyd <sboyd@kernel.org>
|
|
Tested-by: Diederik de Haas <didi.debian@cknow.org> # Rock64, Quartz64 Model A + B
|
|
Tested-by: Vincent Legoll <vincent.legoll@gmail.com> # Pine64 QuartzPro64
|
|
Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
|
|
---
|
|
drivers/clk/clk-rk808.c | 34 ++++++++++++++++------------------
|
|
1 file changed, 16 insertions(+), 18 deletions(-)
|
|
|
|
diff --git a/drivers/clk/clk-rk808.c b/drivers/clk/clk-rk808.c
|
|
index 32f833d732ed..f7412b137e5e 100644
|
|
--- a/drivers/clk/clk-rk808.c
|
|
+++ b/drivers/clk/clk-rk808.c
|
|
@@ -12,10 +12,9 @@
|
|
#include <linux/slab.h>
|
|
#include <linux/platform_device.h>
|
|
#include <linux/mfd/rk808.h>
|
|
-#include <linux/i2c.h>
|
|
|
|
struct rk808_clkout {
|
|
- struct rk808 *rk808;
|
|
+ struct regmap *regmap;
|
|
struct clk_hw clkout1_hw;
|
|
struct clk_hw clkout2_hw;
|
|
};
|
|
@@ -31,9 +30,8 @@ static int rk808_clkout2_enable(struct clk_hw *hw, bool enable)
|
|
struct rk808_clkout *rk808_clkout = container_of(hw,
|
|
struct rk808_clkout,
|
|
clkout2_hw);
|
|
- struct rk808 *rk808 = rk808_clkout->rk808;
|
|
|
|
- return regmap_update_bits(rk808->regmap, RK808_CLK32OUT_REG,
|
|
+ return regmap_update_bits(rk808_clkout->regmap, RK808_CLK32OUT_REG,
|
|
CLK32KOUT2_EN, enable ? CLK32KOUT2_EN : 0);
|
|
}
|
|
|
|
@@ -52,10 +50,9 @@ static int rk808_clkout2_is_prepared(struct clk_hw *hw)
|
|
struct rk808_clkout *rk808_clkout = container_of(hw,
|
|
struct rk808_clkout,
|
|
clkout2_hw);
|
|
- struct rk808 *rk808 = rk808_clkout->rk808;
|
|
uint32_t val;
|
|
|
|
- int ret = regmap_read(rk808->regmap, RK808_CLK32OUT_REG, &val);
|
|
+ int ret = regmap_read(rk808_clkout->regmap, RK808_CLK32OUT_REG, &val);
|
|
|
|
if (ret < 0)
|
|
return ret;
|
|
@@ -93,9 +90,8 @@ static int rk817_clkout2_enable(struct clk_hw *hw, bool enable)
|
|
struct rk808_clkout *rk808_clkout = container_of(hw,
|
|
struct rk808_clkout,
|
|
clkout2_hw);
|
|
- struct rk808 *rk808 = rk808_clkout->rk808;
|
|
|
|
- return regmap_update_bits(rk808->regmap, RK817_SYS_CFG(1),
|
|
+ return regmap_update_bits(rk808_clkout->regmap, RK817_SYS_CFG(1),
|
|
RK817_CLK32KOUT2_EN,
|
|
enable ? RK817_CLK32KOUT2_EN : 0);
|
|
}
|
|
@@ -115,10 +111,9 @@ static int rk817_clkout2_is_prepared(struct clk_hw *hw)
|
|
struct rk808_clkout *rk808_clkout = container_of(hw,
|
|
struct rk808_clkout,
|
|
clkout2_hw);
|
|
- struct rk808 *rk808 = rk808_clkout->rk808;
|
|
unsigned int val;
|
|
|
|
- int ret = regmap_read(rk808->regmap, RK817_SYS_CFG(1), &val);
|
|
+ int ret = regmap_read(rk808_clkout->regmap, RK817_SYS_CFG(1), &val);
|
|
|
|
if (ret < 0)
|
|
return 0;
|
|
@@ -153,18 +148,21 @@ static const struct clk_ops *rkpmic_get_ops(long variant)
|
|
static int rk808_clkout_probe(struct platform_device *pdev)
|
|
{
|
|
struct rk808 *rk808 = dev_get_drvdata(pdev->dev.parent);
|
|
- struct i2c_client *client = rk808->i2c;
|
|
- struct device_node *node = client->dev.of_node;
|
|
+ struct device *dev = &pdev->dev;
|
|
struct clk_init_data init = {};
|
|
struct rk808_clkout *rk808_clkout;
|
|
int ret;
|
|
|
|
- rk808_clkout = devm_kzalloc(&client->dev,
|
|
+ dev->of_node = pdev->dev.parent->of_node;
|
|
+
|
|
+ rk808_clkout = devm_kzalloc(dev,
|
|
sizeof(*rk808_clkout), GFP_KERNEL);
|
|
if (!rk808_clkout)
|
|
return -ENOMEM;
|
|
|
|
- rk808_clkout->rk808 = rk808;
|
|
+ rk808_clkout->regmap = dev_get_regmap(pdev->dev.parent, NULL);
|
|
+ if (!rk808_clkout->regmap)
|
|
+ return -ENODEV;
|
|
|
|
init.parent_names = NULL;
|
|
init.num_parents = 0;
|
|
@@ -173,10 +171,10 @@ static int rk808_clkout_probe(struct platform_device *pdev)
|
|
rk808_clkout->clkout1_hw.init = &init;
|
|
|
|
/* optional override of the clockname */
|
|
- of_property_read_string_index(node, "clock-output-names",
|
|
+ of_property_read_string_index(dev->of_node, "clock-output-names",
|
|
0, &init.name);
|
|
|
|
- ret = devm_clk_hw_register(&client->dev, &rk808_clkout->clkout1_hw);
|
|
+ ret = devm_clk_hw_register(dev, &rk808_clkout->clkout1_hw);
|
|
if (ret)
|
|
return ret;
|
|
|
|
@@ -185,10 +183,10 @@ static int rk808_clkout_probe(struct platform_device *pdev)
|
|
rk808_clkout->clkout2_hw.init = &init;
|
|
|
|
/* optional override of the clockname */
|
|
- of_property_read_string_index(node, "clock-output-names",
|
|
+ of_property_read_string_index(dev->of_node, "clock-output-names",
|
|
1, &init.name);
|
|
|
|
- ret = devm_clk_hw_register(&client->dev, &rk808_clkout->clkout2_hw);
|
|
+ ret = devm_clk_hw_register(dev, &rk808_clkout->clkout2_hw);
|
|
if (ret)
|
|
return ret;
|
|
|
|
--
|
|
2.34.1
|
|
|