/* SPDX-License-Identifier: GPL-2.0-only */ /* * Copyright (C) 2021 BAIKAL ELECTRONICS, JSC * * Baikal-T1 CCU Resets interface driver */ #ifndef __CLK_BT1_CCU_RST_H__ #define __CLK_BT1_CCU_RST_H__ #include <linux/of.h> #include <linux/regmap.h> #include <linux/reset-controller.h> struct ccu_rst_info; /* * enum ccu_rst_type - CCU Reset types * @CCU_RST_TRIG: Self-deasserted reset signal. * @CCU_RST_DIR: Directly controlled reset signal. */ enum ccu_rst_type { CCU_RST_TRIG, CCU_RST_DIR, }; /* * struct ccu_rst_init_data - CCU Resets initialization data * @sys_regs: Baikal-T1 System Controller registers map. * @np: Pointer to the node with the System CCU block. */ struct ccu_rst_init_data { struct regmap *sys_regs; struct device_node *np; }; /* * struct ccu_rst - CCU Reset descriptor * @rcdev: Reset controller descriptor. * @sys_regs: Baikal-T1 System Controller registers map. * @rsts_info: Reset flag info (base address and mask). */ struct ccu_rst { struct reset_controller_dev rcdev; struct regmap *sys_regs; const struct ccu_rst_info *rsts_info; }; #define to_ccu_rst(_rcdev) container_of(_rcdev, struct ccu_rst, rcdev) #ifdef CONFIG_CLK_BT1_CCU_RST struct ccu_rst *ccu_rst_hw_register(const struct ccu_rst_init_data *init); void ccu_rst_hw_unregister(struct ccu_rst *rst); #else static inline struct ccu_rst *ccu_rst_hw_register(const struct ccu_rst_init_data *init) { return NULL; } static inline void ccu_rst_hw_unregister(struct ccu_rst *rst) {} #endif #endif /* __CLK_BT1_CCU_RST_H__ */