18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * Copyright (c) 2016 Maxime Ripard. All rights reserved. 48c2ecf20Sopenharmony_ci */ 58c2ecf20Sopenharmony_ci 68c2ecf20Sopenharmony_ci#ifndef _CCU_PHASE_H_ 78c2ecf20Sopenharmony_ci#define _CCU_PHASE_H_ 88c2ecf20Sopenharmony_ci 98c2ecf20Sopenharmony_ci#include <linux/clk-provider.h> 108c2ecf20Sopenharmony_ci 118c2ecf20Sopenharmony_ci#include "ccu_common.h" 128c2ecf20Sopenharmony_ci 138c2ecf20Sopenharmony_cistruct ccu_phase { 148c2ecf20Sopenharmony_ci u8 shift; 158c2ecf20Sopenharmony_ci u8 width; 168c2ecf20Sopenharmony_ci 178c2ecf20Sopenharmony_ci struct ccu_common common; 188c2ecf20Sopenharmony_ci}; 198c2ecf20Sopenharmony_ci 208c2ecf20Sopenharmony_ci#define SUNXI_CCU_PHASE(_struct, _name, _parent, _reg, _shift, _width, _flags) \ 218c2ecf20Sopenharmony_ci struct ccu_phase _struct = { \ 228c2ecf20Sopenharmony_ci .shift = _shift, \ 238c2ecf20Sopenharmony_ci .width = _width, \ 248c2ecf20Sopenharmony_ci .common = { \ 258c2ecf20Sopenharmony_ci .reg = _reg, \ 268c2ecf20Sopenharmony_ci .hw.init = CLK_HW_INIT(_name, \ 278c2ecf20Sopenharmony_ci _parent, \ 288c2ecf20Sopenharmony_ci &ccu_phase_ops, \ 298c2ecf20Sopenharmony_ci _flags), \ 308c2ecf20Sopenharmony_ci } \ 318c2ecf20Sopenharmony_ci } 328c2ecf20Sopenharmony_ci 338c2ecf20Sopenharmony_cistatic inline struct ccu_phase *hw_to_ccu_phase(struct clk_hw *hw) 348c2ecf20Sopenharmony_ci{ 358c2ecf20Sopenharmony_ci struct ccu_common *common = hw_to_ccu_common(hw); 368c2ecf20Sopenharmony_ci 378c2ecf20Sopenharmony_ci return container_of(common, struct ccu_phase, common); 388c2ecf20Sopenharmony_ci} 398c2ecf20Sopenharmony_ci 408c2ecf20Sopenharmony_ciextern const struct clk_ops ccu_phase_ops; 418c2ecf20Sopenharmony_ci 428c2ecf20Sopenharmony_ci#endif /* _CCU_PHASE_H_ */ 43