Linux-libre 4.13.7-gnu
[librecmc/linux-libre.git] / drivers / clk / sunxi-ng / ccu_phase.h
1 /*
2  * Copyright (c) 2016 Maxime Ripard. All rights reserved.
3  *
4  * This software is licensed under the terms of the GNU General Public
5  * License version 2, as published by the Free Software Foundation, and
6  * may be copied, distributed, and modified under those terms.
7  *
8  * This program is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11  * GNU General Public License for more details.
12  */
13
14 #ifndef _CCU_PHASE_H_
15 #define _CCU_PHASE_H_
16
17 #include <linux/clk-provider.h>
18
19 #include "ccu_common.h"
20
21 struct ccu_phase {
22         u8                      shift;
23         u8                      width;
24
25         struct ccu_common       common;
26 };
27
28 #define SUNXI_CCU_PHASE(_struct, _name, _parent, _reg, _shift, _width, _flags) \
29         struct ccu_phase _struct = {                                    \
30                 .shift  = _shift,                                       \
31                 .width  = _width,                                       \
32                 .common = {                                             \
33                         .reg            = _reg,                         \
34                         .hw.init        = CLK_HW_INIT(_name,            \
35                                                       _parent,          \
36                                                       &ccu_phase_ops,   \
37                                                       _flags),          \
38                 }                                                       \
39         }
40
41 static inline struct ccu_phase *hw_to_ccu_phase(struct clk_hw *hw)
42 {
43         struct ccu_common *common = hw_to_ccu_common(hw);
44
45         return container_of(common, struct ccu_phase, common);
46 }
47
48 extern const struct clk_ops ccu_phase_ops;
49
50 #endif /* _CCU_PHASE_H_ */