20498d52c9
Commit e4c23e19aa
("clk: mediatek: Register clock gate with device")
introduces a helper function for the sole purpose of propagating a
struct device pointer to the clk API when registering the mtk-gate
clocks to take advantage of Runtime PM when/where needed and where
a power domain is defined in devicetree.
Function mtk_clk_register_gates() then becomes a wrapper around the
new mtk_clk_register_gates_with_dev() function that will simply pass
NULL as struct device: this is essential when registering drivers
with CLK_OF_DECLARE instead of as a platform device, as there will
be no struct device to pass... but we can as well simply have only
one function that always takes such pointer as a param and pass NULL
when unavoidable.
This commit removes the mtk_clk_register_gates() wrapper and renames
mtk_clk_register_gates_with_dev() to the former and all of the calls
to either of the two functions were fixed in all drivers in order to
reflect this change; also, to improve consistency with other kernel
functions, the pointer to struct device was moved as the first param.
Since a lot of MediaTek clock drivers are actually registering as a
platform device, but were still registering the mtk-gate clocks
without passing any struct device to the clock framework, they've
been changed to pass a valid one now, as to make all those platforms
able to use runtime power management where available.
While at it, some much needed indentation changes were also done.
Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Reviewed-by: Chen-Yu Tsai <wenst@chromium.org>
Reviewed-by: Markus Schneider-Pargmann <msp@baylibre.com>
Tested-by: Miles Chen <miles.chen@mediatek.com>
Link: https://lore.kernel.org/r/20230120092053.182923-4-angelogioacchino.delregno@collabora.com
Tested-by: Mingming Su <mingming.su@mediatek.com>
Signed-off-by: Stephen Boyd <sboyd@kernel.org>
61 lines
1.4 KiB
C
61 lines
1.4 KiB
C
/* SPDX-License-Identifier: GPL-2.0-only */
|
|
/*
|
|
* Copyright (c) 2014 MediaTek Inc.
|
|
* Author: James Liao <jamesjj.liao@mediatek.com>
|
|
*/
|
|
|
|
#ifndef __DRV_CLK_GATE_H
|
|
#define __DRV_CLK_GATE_H
|
|
|
|
#include <linux/types.h>
|
|
|
|
struct clk;
|
|
struct clk_hw_onecell_data;
|
|
struct clk_ops;
|
|
struct device;
|
|
struct device_node;
|
|
|
|
extern const struct clk_ops mtk_clk_gate_ops_setclr;
|
|
extern const struct clk_ops mtk_clk_gate_ops_setclr_inv;
|
|
extern const struct clk_ops mtk_clk_gate_ops_no_setclr;
|
|
extern const struct clk_ops mtk_clk_gate_ops_no_setclr_inv;
|
|
|
|
struct mtk_gate_regs {
|
|
u32 sta_ofs;
|
|
u32 clr_ofs;
|
|
u32 set_ofs;
|
|
};
|
|
|
|
struct mtk_gate {
|
|
int id;
|
|
const char *name;
|
|
const char *parent_name;
|
|
const struct mtk_gate_regs *regs;
|
|
int shift;
|
|
const struct clk_ops *ops;
|
|
unsigned long flags;
|
|
};
|
|
|
|
#define GATE_MTK_FLAGS(_id, _name, _parent, _regs, _shift, \
|
|
_ops, _flags) { \
|
|
.id = _id, \
|
|
.name = _name, \
|
|
.parent_name = _parent, \
|
|
.regs = _regs, \
|
|
.shift = _shift, \
|
|
.ops = _ops, \
|
|
.flags = _flags, \
|
|
}
|
|
|
|
#define GATE_MTK(_id, _name, _parent, _regs, _shift, _ops) \
|
|
GATE_MTK_FLAGS(_id, _name, _parent, _regs, _shift, _ops, 0)
|
|
|
|
int mtk_clk_register_gates(struct device *dev, struct device_node *node,
|
|
const struct mtk_gate *clks, int num,
|
|
struct clk_hw_onecell_data *clk_data);
|
|
|
|
void mtk_clk_unregister_gates(const struct mtk_gate *clks, int num,
|
|
struct clk_hw_onecell_data *clk_data);
|
|
|
|
#endif /* __DRV_CLK_GATE_H */
|