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 14struct 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 */ 21enum 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 */ 31struct 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 */ 42struct 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 51struct ccu_rst *ccu_rst_hw_register(const struct ccu_rst_init_data *init); 52 53void ccu_rst_hw_unregister(struct ccu_rst *rst); 54 55#else 56 57static inline 58struct ccu_rst *ccu_rst_hw_register(const struct ccu_rst_init_data *init) 59{ 60 return NULL; 61} 62 63static inline void ccu_rst_hw_unregister(struct ccu_rst *rst) {} 64 65#endif 66 67#endif /* __CLK_BT1_CCU_RST_H__ */ 68