162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Copyright (c) 2013, The Linux Foundation. All rights reserved. 462306a36Sopenharmony_ci */ 562306a36Sopenharmony_ci 662306a36Sopenharmony_ci#ifndef __QCOM_CLK_PLL_H__ 762306a36Sopenharmony_ci#define __QCOM_CLK_PLL_H__ 862306a36Sopenharmony_ci 962306a36Sopenharmony_ci#include <linux/clk-provider.h> 1062306a36Sopenharmony_ci#include "clk-regmap.h" 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ci/** 1362306a36Sopenharmony_ci * struct pll_freq_tbl - PLL frequency table 1462306a36Sopenharmony_ci * @l: L value 1562306a36Sopenharmony_ci * @m: M value 1662306a36Sopenharmony_ci * @n: N value 1762306a36Sopenharmony_ci * @ibits: internal values 1862306a36Sopenharmony_ci */ 1962306a36Sopenharmony_cistruct pll_freq_tbl { 2062306a36Sopenharmony_ci unsigned long freq; 2162306a36Sopenharmony_ci u16 l; 2262306a36Sopenharmony_ci u16 m; 2362306a36Sopenharmony_ci u16 n; 2462306a36Sopenharmony_ci u32 ibits; 2562306a36Sopenharmony_ci}; 2662306a36Sopenharmony_ci 2762306a36Sopenharmony_ci/** 2862306a36Sopenharmony_ci * struct clk_pll - phase locked loop (PLL) 2962306a36Sopenharmony_ci * @l_reg: L register 3062306a36Sopenharmony_ci * @m_reg: M register 3162306a36Sopenharmony_ci * @n_reg: N register 3262306a36Sopenharmony_ci * @config_reg: config register 3362306a36Sopenharmony_ci * @mode_reg: mode register 3462306a36Sopenharmony_ci * @status_reg: status register 3562306a36Sopenharmony_ci * @status_bit: ANDed with @status_reg to determine if PLL is enabled 3662306a36Sopenharmony_ci * @freq_tbl: PLL frequency table 3762306a36Sopenharmony_ci * @hw: handle between common and hardware-specific interfaces 3862306a36Sopenharmony_ci */ 3962306a36Sopenharmony_cistruct clk_pll { 4062306a36Sopenharmony_ci u32 l_reg; 4162306a36Sopenharmony_ci u32 m_reg; 4262306a36Sopenharmony_ci u32 n_reg; 4362306a36Sopenharmony_ci u32 config_reg; 4462306a36Sopenharmony_ci u32 mode_reg; 4562306a36Sopenharmony_ci u32 status_reg; 4662306a36Sopenharmony_ci u8 status_bit; 4762306a36Sopenharmony_ci u8 post_div_width; 4862306a36Sopenharmony_ci u8 post_div_shift; 4962306a36Sopenharmony_ci 5062306a36Sopenharmony_ci const struct pll_freq_tbl *freq_tbl; 5162306a36Sopenharmony_ci 5262306a36Sopenharmony_ci struct clk_regmap clkr; 5362306a36Sopenharmony_ci}; 5462306a36Sopenharmony_ci 5562306a36Sopenharmony_ciextern const struct clk_ops clk_pll_ops; 5662306a36Sopenharmony_ciextern const struct clk_ops clk_pll_vote_ops; 5762306a36Sopenharmony_ciextern const struct clk_ops clk_pll_sr2_ops; 5862306a36Sopenharmony_ci 5962306a36Sopenharmony_ci#define to_clk_pll(_hw) container_of(to_clk_regmap(_hw), struct clk_pll, clkr) 6062306a36Sopenharmony_ci 6162306a36Sopenharmony_cistruct pll_config { 6262306a36Sopenharmony_ci u16 l; 6362306a36Sopenharmony_ci u32 m; 6462306a36Sopenharmony_ci u32 n; 6562306a36Sopenharmony_ci u32 vco_val; 6662306a36Sopenharmony_ci u32 vco_mask; 6762306a36Sopenharmony_ci u32 pre_div_val; 6862306a36Sopenharmony_ci u32 pre_div_mask; 6962306a36Sopenharmony_ci u32 post_div_val; 7062306a36Sopenharmony_ci u32 post_div_mask; 7162306a36Sopenharmony_ci u32 mn_ena_mask; 7262306a36Sopenharmony_ci u32 main_output_mask; 7362306a36Sopenharmony_ci u32 aux_output_mask; 7462306a36Sopenharmony_ci}; 7562306a36Sopenharmony_ci 7662306a36Sopenharmony_civoid clk_pll_configure_sr(struct clk_pll *pll, struct regmap *regmap, 7762306a36Sopenharmony_ci const struct pll_config *config, bool fsm_mode); 7862306a36Sopenharmony_civoid clk_pll_configure_sr_hpm_lp(struct clk_pll *pll, struct regmap *regmap, 7962306a36Sopenharmony_ci const struct pll_config *config, bool fsm_mode); 8062306a36Sopenharmony_ci 8162306a36Sopenharmony_ci#endif 82