1 /* SPDX-License-Identifier: GPL-2.0-only */ 2 /* 3 * Copyright (C) 2021 BAIKAL ELECTRONICS, JSC 4 * 5 * Baikal-T1 CCU Resets interface driver 6 */ 7 #ifndef __CLK_BT1_CCU_RST_H__ 8 #define __CLK_BT1_CCU_RST_H__ 9 10 #include <linux/of.h> 11 #include <linux/regmap.h> 12 #include <linux/reset-controller.h> 13 14 struct ccu_rst_info; 15 16 /* 17 * enum ccu_rst_type - CCU Reset types 18 * @CCU_RST_TRIG: Self-deasserted reset signal. 19 * @CCU_RST_DIR: Directly controlled reset signal. 20 */ 21 enum ccu_rst_type { 22 CCU_RST_TRIG, 23 CCU_RST_DIR, 24 }; 25 26 /* 27 * struct ccu_rst_init_data - CCU Resets initialization data 28 * @sys_regs: Baikal-T1 System Controller registers map. 29 * @np: Pointer to the node with the System CCU block. 30 */ 31 struct ccu_rst_init_data { 32 struct regmap *sys_regs; 33 struct device_node *np; 34 }; 35 36 /* 37 * struct ccu_rst - CCU Reset descriptor 38 * @rcdev: Reset controller descriptor. 39 * @sys_regs: Baikal-T1 System Controller registers map. 40 * @rsts_info: Reset flag info (base address and mask). 41 */ 42 struct ccu_rst { 43 struct reset_controller_dev rcdev; 44 struct regmap *sys_regs; 45 const struct ccu_rst_info *rsts_info; 46 }; 47 #define to_ccu_rst(_rcdev) container_of(_rcdev, struct ccu_rst, rcdev) 48 49 #ifdef CONFIG_CLK_BT1_CCU_RST 50 51 struct ccu_rst *ccu_rst_hw_register(const struct ccu_rst_init_data *init); 52 53 void ccu_rst_hw_unregister(struct ccu_rst *rst); 54 55 #else 56 57 static inline 58 struct ccu_rst *ccu_rst_hw_register(const struct ccu_rst_init_data *init) 59 { 60 return NULL; 61 } 62 63 static inline void ccu_rst_hw_unregister(struct ccu_rst *rst) {} 64 65 #endif 66 67 #endif /* __CLK_BT1_CCU_RST_H__ */ 68