1 /* SPDX-License-Identifier: GPL-2.0-only */ 2 /* 3 * Toshiba Visconti clock controller 4 * 5 * Copyright (c) 2021 TOSHIBA CORPORATION 6 * Copyright (c) 2021 Toshiba Electronic Devices & Storage Corporation 7 * 8 * Nobuhiro Iwamatsu <nobuhiro1.iwamatsu@toshiba.co.jp> 9 */ 10 11 #ifndef _VISCONTI_CLKC_H_ 12 #define _VISCONTI_CLKC_H_ 13 14 #include <linux/mfd/syscon.h> 15 #include <linux/clk-provider.h> 16 #include <linux/of.h> 17 #include <linux/of_address.h> 18 #include <linux/delay.h> 19 #include <linux/regmap.h> 20 #include <linux/slab.h> 21 #include <linux/string.h> 22 #include <linux/io.h> 23 #include <linux/spinlock.h> 24 25 #include "reset.h" 26 27 struct visconti_clk_provider { 28 struct device *dev; 29 struct regmap *regmap; 30 struct clk_hw_onecell_data clk_data; 31 }; 32 33 struct visconti_clk_gate_table { 34 unsigned int id; 35 const char *name; 36 const struct clk_parent_data *parent_data; 37 u8 num_parents; 38 u8 flags; 39 u32 ckon_offset; 40 u32 ckoff_offset; 41 u8 ck_idx; 42 unsigned int div; 43 u8 rs_id; 44 }; 45 46 struct visconti_fixed_clk { 47 unsigned int id; 48 const char *name; 49 const char *parent; 50 unsigned long flag; 51 unsigned int mult; 52 unsigned int div; 53 }; 54 55 struct visconti_clk_gate { 56 struct clk_hw hw; 57 struct regmap *regmap; 58 u32 ckon_offset; 59 u32 ckoff_offset; 60 u8 ck_idx; 61 u8 flags; 62 u32 rson_offset; 63 u32 rsoff_offset; 64 u8 rs_idx; 65 spinlock_t *lock; 66 }; 67 68 struct visconti_clk_provider *visconti_init_clk(struct device *dev, 69 struct regmap *regmap, 70 unsigned long nr_clks); 71 int visconti_clk_register_gates(struct visconti_clk_provider *data, 72 const struct visconti_clk_gate_table *clks, 73 int num_gate, 74 const struct visconti_reset_data *reset, 75 spinlock_t *lock); 76 #endif /* _VISCONTI_CLKC_H_ */ 77