/* SPDX-License-Identifier: GPL-2.0-only */ #include <linux/clkdev.h> struct clkops { void (*enable)(struct clk *); void (*disable)(struct clk *); unsigned long (*getrate)(struct clk *); int (*setrate)(struct clk *, unsigned long); }; struct clk { const struct clkops *ops; void __iomem *clk_rst; /* clock reset control register */ int fnclksel; /* functional clock select (APBC) */ uint32_t enable_val; /* value for clock enable (APMU) */ unsigned long rate; int enabled; }; extern struct clkops apbc_clk_ops; extern struct clkops apmu_clk_ops; #define APBC_CLK(_name, _reg, _fnclksel, _rate) \ struct clk clk_##_name = { \ .clk_rst = APBC_##_reg, \ .fnclksel = _fnclksel, \ .rate = _rate, \ .ops = &apbc_clk_ops, \ } #define APBC_CLK_OPS(_name, _reg, _fnclksel, _rate, _ops) \ struct clk clk_##_name = { \ .clk_rst = APBC_##_reg, \ .fnclksel = _fnclksel, \ .rate = _rate, \ .ops = _ops, \ } #define APMU_CLK(_name, _reg, _eval, _rate) \ struct clk clk_##_name = { \ .clk_rst = APMU_##_reg, \ .enable_val = _eval, \ .rate = _rate, \ .ops = &apmu_clk_ops, \ } #define APMU_CLK_OPS(_name, _reg, _eval, _rate, _ops) \ struct clk clk_##_name = { \ .clk_rst = APMU_##_reg, \ .enable_val = _eval, \ .rate = _rate, \ .ops = _ops, \ } #define INIT_CLKREG(_clk, _devname, _conname) \ { \ .clk = _clk, \ .dev_id = _devname, \ .con_id = _conname, \ } extern struct clk clk_pxa168_gpio; extern struct clk clk_pxa168_timers; |