162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Copyright (C) 2021 BAIKAL ELECTRONICS, JSC 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * Baikal-T1 CCU Resets interface driver 662306a36Sopenharmony_ci */ 762306a36Sopenharmony_ci#ifndef __CLK_BT1_CCU_RST_H__ 862306a36Sopenharmony_ci#define __CLK_BT1_CCU_RST_H__ 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ci#include <linux/of.h> 1162306a36Sopenharmony_ci#include <linux/regmap.h> 1262306a36Sopenharmony_ci#include <linux/reset-controller.h> 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_cistruct ccu_rst_info; 1562306a36Sopenharmony_ci 1662306a36Sopenharmony_ci/* 1762306a36Sopenharmony_ci * enum ccu_rst_type - CCU Reset types 1862306a36Sopenharmony_ci * @CCU_RST_TRIG: Self-deasserted reset signal. 1962306a36Sopenharmony_ci * @CCU_RST_DIR: Directly controlled reset signal. 2062306a36Sopenharmony_ci */ 2162306a36Sopenharmony_cienum ccu_rst_type { 2262306a36Sopenharmony_ci CCU_RST_TRIG, 2362306a36Sopenharmony_ci CCU_RST_DIR, 2462306a36Sopenharmony_ci}; 2562306a36Sopenharmony_ci 2662306a36Sopenharmony_ci/* 2762306a36Sopenharmony_ci * struct ccu_rst_init_data - CCU Resets initialization data 2862306a36Sopenharmony_ci * @sys_regs: Baikal-T1 System Controller registers map. 2962306a36Sopenharmony_ci * @np: Pointer to the node with the System CCU block. 3062306a36Sopenharmony_ci */ 3162306a36Sopenharmony_cistruct ccu_rst_init_data { 3262306a36Sopenharmony_ci struct regmap *sys_regs; 3362306a36Sopenharmony_ci struct device_node *np; 3462306a36Sopenharmony_ci}; 3562306a36Sopenharmony_ci 3662306a36Sopenharmony_ci/* 3762306a36Sopenharmony_ci * struct ccu_rst - CCU Reset descriptor 3862306a36Sopenharmony_ci * @rcdev: Reset controller descriptor. 3962306a36Sopenharmony_ci * @sys_regs: Baikal-T1 System Controller registers map. 4062306a36Sopenharmony_ci * @rsts_info: Reset flag info (base address and mask). 4162306a36Sopenharmony_ci */ 4262306a36Sopenharmony_cistruct ccu_rst { 4362306a36Sopenharmony_ci struct reset_controller_dev rcdev; 4462306a36Sopenharmony_ci struct regmap *sys_regs; 4562306a36Sopenharmony_ci const struct ccu_rst_info *rsts_info; 4662306a36Sopenharmony_ci}; 4762306a36Sopenharmony_ci#define to_ccu_rst(_rcdev) container_of(_rcdev, struct ccu_rst, rcdev) 4862306a36Sopenharmony_ci 4962306a36Sopenharmony_ci#ifdef CONFIG_CLK_BT1_CCU_RST 5062306a36Sopenharmony_ci 5162306a36Sopenharmony_cistruct ccu_rst *ccu_rst_hw_register(const struct ccu_rst_init_data *init); 5262306a36Sopenharmony_ci 5362306a36Sopenharmony_civoid ccu_rst_hw_unregister(struct ccu_rst *rst); 5462306a36Sopenharmony_ci 5562306a36Sopenharmony_ci#else 5662306a36Sopenharmony_ci 5762306a36Sopenharmony_cistatic inline 5862306a36Sopenharmony_cistruct ccu_rst *ccu_rst_hw_register(const struct ccu_rst_init_data *init) 5962306a36Sopenharmony_ci{ 6062306a36Sopenharmony_ci return NULL; 6162306a36Sopenharmony_ci} 6262306a36Sopenharmony_ci 6362306a36Sopenharmony_cistatic inline void ccu_rst_hw_unregister(struct ccu_rst *rst) {} 6462306a36Sopenharmony_ci 6562306a36Sopenharmony_ci#endif 6662306a36Sopenharmony_ci 6762306a36Sopenharmony_ci#endif /* __CLK_BT1_CCU_RST_H__ */ 68