1// SPDX-License-Identifier: GPL-2.0+ 2/* 3 * Copyright (C) 2018 Amarula Solutions. 4 * Author: Jagan Teki <jagan@amarulasolutions.com> 5 */ 6 7#ifndef _CLK_SUNXI_H 8#define _CLK_SUNXI_H 9 10#include <linux/bitops.h> 11 12/** 13 * enum ccu_flags - ccu clock/reset flags 14 * 15 * @CCU_CLK_F_IS_VALID: is given clock gate is valid? 16 * @CCU_RST_F_IS_VALID: is given reset control is valid? 17 */ 18enum ccu_flags { 19 CCU_CLK_F_IS_VALID = BIT(0), 20 CCU_RST_F_IS_VALID = BIT(1), 21 CCU_CLK_F_DUMMY_GATE = BIT(2), 22}; 23 24/** 25 * struct ccu_clk_gate - ccu clock gate 26 * @off: gate offset 27 * @bit: gate bit 28 * @flags: ccu clock gate flags 29 */ 30struct ccu_clk_gate { 31 u16 off; 32 u32 bit; 33 enum ccu_flags flags; 34}; 35 36#define GATE(_off, _bit) { \ 37 .off = _off, \ 38 .bit = _bit, \ 39 .flags = CCU_CLK_F_IS_VALID, \ 40} 41 42#define GATE_DUMMY { \ 43 .flags = CCU_CLK_F_DUMMY_GATE, \ 44} 45 46/** 47 * struct ccu_reset - ccu reset 48 * @off: reset offset 49 * @bit: reset bit 50 * @flags: ccu reset control flags 51 */ 52struct ccu_reset { 53 u16 off; 54 u32 bit; 55 enum ccu_flags flags; 56}; 57 58#define RESET(_off, _bit) { \ 59 .off = _off, \ 60 .bit = _bit, \ 61 .flags = CCU_RST_F_IS_VALID, \ 62} 63 64/** 65 * struct ccu_desc - clock control unit descriptor 66 * 67 * @gates: clock gates 68 * @resets: reset unit 69 */ 70struct ccu_desc { 71 const struct ccu_clk_gate *gates; 72 const struct ccu_reset *resets; 73 u8 num_gates; 74 u8 num_resets; 75}; 76 77/** 78 * struct ccu_plat - sunxi clock control unit platform data 79 * 80 * @base: base address 81 * @desc: ccu descriptor 82 */ 83struct ccu_plat { 84 void *base; 85 const struct ccu_desc *desc; 86}; 87 88extern struct clk_ops sunxi_clk_ops; 89 90#endif /* _CLK_SUNXI_H */ 91