18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
28c2ecf20Sopenharmony_ci
38c2ecf20Sopenharmony_ci#ifndef __QCOM_CLK_HFPLL_H__
48c2ecf20Sopenharmony_ci#define __QCOM_CLK_HFPLL_H__
58c2ecf20Sopenharmony_ci
68c2ecf20Sopenharmony_ci#include <linux/clk-provider.h>
78c2ecf20Sopenharmony_ci#include <linux/spinlock.h>
88c2ecf20Sopenharmony_ci#include "clk-regmap.h"
98c2ecf20Sopenharmony_ci
108c2ecf20Sopenharmony_cistruct hfpll_data {
118c2ecf20Sopenharmony_ci	u32 mode_reg;
128c2ecf20Sopenharmony_ci	u32 l_reg;
138c2ecf20Sopenharmony_ci	u32 m_reg;
148c2ecf20Sopenharmony_ci	u32 n_reg;
158c2ecf20Sopenharmony_ci	u32 user_reg;
168c2ecf20Sopenharmony_ci	u32 droop_reg;
178c2ecf20Sopenharmony_ci	u32 config_reg;
188c2ecf20Sopenharmony_ci	u32 status_reg;
198c2ecf20Sopenharmony_ci	u8  lock_bit;
208c2ecf20Sopenharmony_ci
218c2ecf20Sopenharmony_ci	u32 droop_val;
228c2ecf20Sopenharmony_ci	u32 config_val;
238c2ecf20Sopenharmony_ci	u32 user_val;
248c2ecf20Sopenharmony_ci	u32 user_vco_mask;
258c2ecf20Sopenharmony_ci	unsigned long low_vco_max_rate;
268c2ecf20Sopenharmony_ci
278c2ecf20Sopenharmony_ci	unsigned long min_rate;
288c2ecf20Sopenharmony_ci	unsigned long max_rate;
298c2ecf20Sopenharmony_ci};
308c2ecf20Sopenharmony_ci
318c2ecf20Sopenharmony_cistruct clk_hfpll {
328c2ecf20Sopenharmony_ci	struct hfpll_data const *d;
338c2ecf20Sopenharmony_ci	int init_done;
348c2ecf20Sopenharmony_ci
358c2ecf20Sopenharmony_ci	struct clk_regmap clkr;
368c2ecf20Sopenharmony_ci	spinlock_t lock;
378c2ecf20Sopenharmony_ci};
388c2ecf20Sopenharmony_ci
398c2ecf20Sopenharmony_ci#define to_clk_hfpll(_hw) \
408c2ecf20Sopenharmony_ci	container_of(to_clk_regmap(_hw), struct clk_hfpll, clkr)
418c2ecf20Sopenharmony_ci
428c2ecf20Sopenharmony_ciextern const struct clk_ops clk_ops_hfpll;
438c2ecf20Sopenharmony_ci
448c2ecf20Sopenharmony_ci#endif
45