18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * Copyright (C) 2016-2018 Xilinx 48c2ecf20Sopenharmony_ci */ 58c2ecf20Sopenharmony_ci 68c2ecf20Sopenharmony_ci#ifndef __LINUX_CLK_ZYNQMP_H_ 78c2ecf20Sopenharmony_ci#define __LINUX_CLK_ZYNQMP_H_ 88c2ecf20Sopenharmony_ci 98c2ecf20Sopenharmony_ci#include <linux/spinlock.h> 108c2ecf20Sopenharmony_ci 118c2ecf20Sopenharmony_ci#include <linux/firmware/xlnx-zynqmp.h> 128c2ecf20Sopenharmony_ci 138c2ecf20Sopenharmony_cienum topology_type { 148c2ecf20Sopenharmony_ci TYPE_INVALID, 158c2ecf20Sopenharmony_ci TYPE_MUX, 168c2ecf20Sopenharmony_ci TYPE_PLL, 178c2ecf20Sopenharmony_ci TYPE_FIXEDFACTOR, 188c2ecf20Sopenharmony_ci TYPE_DIV1, 198c2ecf20Sopenharmony_ci TYPE_DIV2, 208c2ecf20Sopenharmony_ci TYPE_GATE, 218c2ecf20Sopenharmony_ci}; 228c2ecf20Sopenharmony_ci 238c2ecf20Sopenharmony_ci/** 248c2ecf20Sopenharmony_ci * struct clock_topology - Clock topology 258c2ecf20Sopenharmony_ci * @type: Type of topology 268c2ecf20Sopenharmony_ci * @flag: Topology flags 278c2ecf20Sopenharmony_ci * @type_flag: Topology type specific flag 288c2ecf20Sopenharmony_ci */ 298c2ecf20Sopenharmony_cistruct clock_topology { 308c2ecf20Sopenharmony_ci u32 type; 318c2ecf20Sopenharmony_ci u32 flag; 328c2ecf20Sopenharmony_ci u32 type_flag; 338c2ecf20Sopenharmony_ci u8 custom_type_flag; 348c2ecf20Sopenharmony_ci}; 358c2ecf20Sopenharmony_ci 368c2ecf20Sopenharmony_cistruct clk_hw *zynqmp_clk_register_pll(const char *name, u32 clk_id, 378c2ecf20Sopenharmony_ci const char * const *parents, 388c2ecf20Sopenharmony_ci u8 num_parents, 398c2ecf20Sopenharmony_ci const struct clock_topology *nodes); 408c2ecf20Sopenharmony_ci 418c2ecf20Sopenharmony_cistruct clk_hw *zynqmp_clk_register_gate(const char *name, u32 clk_id, 428c2ecf20Sopenharmony_ci const char * const *parents, 438c2ecf20Sopenharmony_ci u8 num_parents, 448c2ecf20Sopenharmony_ci const struct clock_topology *nodes); 458c2ecf20Sopenharmony_ci 468c2ecf20Sopenharmony_cistruct clk_hw *zynqmp_clk_register_divider(const char *name, 478c2ecf20Sopenharmony_ci u32 clk_id, 488c2ecf20Sopenharmony_ci const char * const *parents, 498c2ecf20Sopenharmony_ci u8 num_parents, 508c2ecf20Sopenharmony_ci const struct clock_topology *nodes); 518c2ecf20Sopenharmony_ci 528c2ecf20Sopenharmony_cistruct clk_hw *zynqmp_clk_register_mux(const char *name, u32 clk_id, 538c2ecf20Sopenharmony_ci const char * const *parents, 548c2ecf20Sopenharmony_ci u8 num_parents, 558c2ecf20Sopenharmony_ci const struct clock_topology *nodes); 568c2ecf20Sopenharmony_ci 578c2ecf20Sopenharmony_cistruct clk_hw *zynqmp_clk_register_fixed_factor(const char *name, 588c2ecf20Sopenharmony_ci u32 clk_id, 598c2ecf20Sopenharmony_ci const char * const *parents, 608c2ecf20Sopenharmony_ci u8 num_parents, 618c2ecf20Sopenharmony_ci const struct clock_topology *nodes); 628c2ecf20Sopenharmony_ci 638c2ecf20Sopenharmony_ci#endif 64