1 /* SPDX-License-Identifier: GPL-2.0-only */ 2 /* 3 * Copyright (c) 2024 SpacemiT Technology Co. Ltd 4 * Copyright (c) 2024-2025 Haylen Chu <heylenay@4d2.org> 5 */ 6 7 #ifndef _CCU_COMMON_H_ 8 #define _CCU_COMMON_H_ 9 10 #include <linux/regmap.h> 11 12 struct ccu_common { 13 struct regmap *regmap; 14 struct regmap *lock_regmap; 15 16 union { 17 /* For DDN and MIX */ 18 struct { 19 u32 reg_ctrl; 20 u32 reg_fc; 21 u32 mask_fc; 22 }; 23 24 /* For PLL */ 25 struct { 26 u32 reg_swcr1; 27 u32 reg_swcr3; 28 }; 29 }; 30 31 struct clk_hw hw; 32 }; 33 34 static inline struct ccu_common *hw_to_ccu_common(struct clk_hw *hw) 35 { 36 return container_of(hw, struct ccu_common, hw); 37 } 38 39 #define ccu_read(c, reg) \ 40 ({ \ 41 u32 tmp; \ 42 regmap_read((c)->regmap, (c)->reg_##reg, &tmp); \ 43 tmp; \ 44 }) 45 #define ccu_update(c, reg, mask, val) \ 46 regmap_update_bits((c)->regmap, (c)->reg_##reg, mask, val) 47 48 #endif /* _CCU_COMMON_H_ */ 49