summaryrefslogtreecommitdiff
path: root/drivers/clk/mediatek/reset.c
diff options
context:
space:
mode:
authorRex-BC Chen <rex-bc.chen@mediatek.com>2022-05-23 12:33:33 +0300
committerStephen Boyd <sboyd@kernel.org>2022-06-16 03:24:12 +0300
commit2d2a2900588cabe2ff3abd552d1683e5f1ce398b (patch)
tree2e4a810a5820eb7baeb47f1222225e52197b0508 /drivers/clk/mediatek/reset.c
parent370bf62869695003c2994d3d98769ccde6b26083 (diff)
downloadlinux-2d2a2900588cabe2ff3abd552d1683e5f1ce398b.tar.xz
clk: mediatek: reset: Revise structure to control reset register
To declare the reset data easier, we add a strucure to do this instead of using many input variables to mtk_register_reset_controller(). - Add mtk_clk_rst_desc to define the reset description when registering the reset controller. - Rename "mtk_reset" to "mtk_clk_rst_data". We use it to store data of reset controller. - Document mtk_clk_rst_desc and mtk_clk_rst_data. - Modify the documentation of mtk_register_reset_controller. - Extract container_of in update functions to to_mtk_clk_rst_data(). Signed-off-by: Rex-BC Chen <rex-bc.chen@mediatek.com> Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com> Reviewed-by: NĂ­colas F. R. A. Prado <nfraprado@collabora.com> Tested-by: NĂ­colas F. R. A. Prado <nfraprado@collabora.com> Link: https://lore.kernel.org/r/20220523093346.28493-7-rex-bc.chen@mediatek.com Signed-off-by: Stephen Boyd <sboyd@kernel.org>
Diffstat (limited to 'drivers/clk/mediatek/reset.c')
-rw-r--r--drivers/clk/mediatek/reset.c33
1 files changed, 21 insertions, 12 deletions
diff --git a/drivers/clk/mediatek/reset.c b/drivers/clk/mediatek/reset.c
index 33745f7f144f..47bc6b1842fd 100644
--- a/drivers/clk/mediatek/reset.c
+++ b/drivers/clk/mediatek/reset.c
@@ -12,14 +12,19 @@
#include "reset.h"
+static inline struct mtk_clk_rst_data *to_mtk_clk_rst_data(struct reset_controller_dev *rcdev)
+{
+ return container_of(rcdev, struct mtk_clk_rst_data, rcdev);
+}
+
static int mtk_reset_update(struct reset_controller_dev *rcdev,
unsigned long id, bool deassert)
{
- struct mtk_reset *data = container_of(rcdev, struct mtk_reset, rcdev);
+ struct mtk_clk_rst_data *data = to_mtk_clk_rst_data(rcdev);
unsigned int val = deassert ? 0 : ~0;
return regmap_update_bits(data->regmap,
- data->regofs + ((id / 32) << 2),
+ data->desc->reg_ofs + ((id / 32) << 2),
BIT(id % 32), val);
}
@@ -49,11 +54,11 @@ static int mtk_reset(struct reset_controller_dev *rcdev, unsigned long id)
static int mtk_reset_update_set_clr(struct reset_controller_dev *rcdev,
unsigned long id, bool deassert)
{
- struct mtk_reset *data = container_of(rcdev, struct mtk_reset, rcdev);
+ struct mtk_clk_rst_data *data = to_mtk_clk_rst_data(rcdev);
unsigned int deassert_ofs = deassert ? 0x4 : 0;
return regmap_write(data->regmap,
- data->regofs + ((id / 32) << 4) + deassert_ofs,
+ data->desc->reg_ofs + ((id / 32) << 4) + deassert_ofs,
BIT(id % 32));
}
@@ -93,15 +98,19 @@ static const struct reset_control_ops mtk_reset_ops_set_clr = {
};
void mtk_register_reset_controller(struct device_node *np,
- u32 rst_bank_nr, u16 reg_ofs,
- enum mtk_reset_version version)
+ const struct mtk_clk_rst_desc *desc)
{
- struct mtk_reset *data;
- int ret;
struct regmap *regmap;
const struct reset_control_ops *rcops = NULL;
+ struct mtk_clk_rst_data *data;
+ int ret;
+
+ if (!desc) {
+ pr_err("mtk clock reset desc is NULL\n");
+ return;
+ }
- switch (version) {
+ switch (desc->version) {
case MTK_RST_SIMPLE:
rcops = &mtk_reset_ops;
break;
@@ -109,7 +118,7 @@ void mtk_register_reset_controller(struct device_node *np,
rcops = &mtk_reset_ops_set_clr;
break;
default:
- pr_err("Unknown reset version %d\n", version);
+ pr_err("Unknown reset version %d\n", desc->version);
return;
}
@@ -123,10 +132,10 @@ void mtk_register_reset_controller(struct device_node *np,
if (!data)
return;
+ data->desc = desc;
data->regmap = regmap;
- data->regofs = reg_ofs;
data->rcdev.owner = THIS_MODULE;
- data->rcdev.nr_resets = rst_bank_nr * 32;
+ data->rcdev.nr_resets = desc->rst_bank_nr * 32;
data->rcdev.ops = rcops;
data->rcdev.of_node = np;