162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci
362306a36Sopenharmony_ci#ifndef __QCOM_CLK_HFPLL_H__
462306a36Sopenharmony_ci#define __QCOM_CLK_HFPLL_H__
562306a36Sopenharmony_ci
662306a36Sopenharmony_ci#include <linux/clk-provider.h>
762306a36Sopenharmony_ci#include <linux/spinlock.h>
862306a36Sopenharmony_ci#include "clk-regmap.h"
962306a36Sopenharmony_ci
1062306a36Sopenharmony_cistruct hfpll_data {
1162306a36Sopenharmony_ci	u32 mode_reg;
1262306a36Sopenharmony_ci	u32 l_reg;
1362306a36Sopenharmony_ci	u32 m_reg;
1462306a36Sopenharmony_ci	u32 n_reg;
1562306a36Sopenharmony_ci	u32 user_reg;
1662306a36Sopenharmony_ci	u32 droop_reg;
1762306a36Sopenharmony_ci	u32 config_reg;
1862306a36Sopenharmony_ci	u32 status_reg;
1962306a36Sopenharmony_ci	u8  lock_bit;
2062306a36Sopenharmony_ci
2162306a36Sopenharmony_ci	u32 droop_val;
2262306a36Sopenharmony_ci	u32 config_val;
2362306a36Sopenharmony_ci	u32 user_val;
2462306a36Sopenharmony_ci	u32 user_vco_mask;
2562306a36Sopenharmony_ci	unsigned long low_vco_max_rate;
2662306a36Sopenharmony_ci
2762306a36Sopenharmony_ci	unsigned long min_rate;
2862306a36Sopenharmony_ci	unsigned long max_rate;
2962306a36Sopenharmony_ci};
3062306a36Sopenharmony_ci
3162306a36Sopenharmony_cistruct clk_hfpll {
3262306a36Sopenharmony_ci	struct hfpll_data const *d;
3362306a36Sopenharmony_ci	int init_done;
3462306a36Sopenharmony_ci
3562306a36Sopenharmony_ci	struct clk_regmap clkr;
3662306a36Sopenharmony_ci	spinlock_t lock;
3762306a36Sopenharmony_ci};
3862306a36Sopenharmony_ci
3962306a36Sopenharmony_ci#define to_clk_hfpll(_hw) \
4062306a36Sopenharmony_ci	container_of(to_clk_regmap(_hw), struct clk_hfpll, clkr)
4162306a36Sopenharmony_ci
4262306a36Sopenharmony_ciextern const struct clk_ops clk_ops_hfpll;
4362306a36Sopenharmony_ci
4462306a36Sopenharmony_ci#endif
45