83 lines
1.8 KiB
C
83 lines
1.8 KiB
C
|
/* SPDX-License-Identifier: GPL-2.0-only */
|
||
|
/*
|
||
|
* Copyright (c) 2022 MediaTek Inc.
|
||
|
* Author: Edward-JW Yang <edward-jw.yang@mediatek.com>
|
||
|
*/
|
||
|
|
||
|
#ifndef __CLK_PLLFH_H
|
||
|
#define __CLK_PLLFH_H
|
||
|
|
||
|
#include "clk-pll.h"
|
||
|
|
||
|
struct fh_pll_state {
|
||
|
void __iomem *base;
|
||
|
u32 fh_enable;
|
||
|
u32 ssc_rate;
|
||
|
};
|
||
|
|
||
|
struct fh_pll_data {
|
||
|
int pll_id;
|
||
|
int fh_id;
|
||
|
u32 fhx_offset;
|
||
|
u32 dds_mask;
|
||
|
u32 slope0_value;
|
||
|
u32 slope1_value;
|
||
|
u32 sfstrx_en;
|
||
|
u32 frddsx_en;
|
||
|
u32 fhctlx_en;
|
||
|
u32 tgl_org;
|
||
|
u32 dvfs_tri;
|
||
|
u32 pcwchg;
|
||
|
u32 dt_val;
|
||
|
u32 df_val;
|
||
|
u32 updnlmt_shft;
|
||
|
u32 msk_frddsx_dys;
|
||
|
u32 msk_frddsx_dts;
|
||
|
};
|
||
|
|
||
|
struct mtk_pllfh_data {
|
||
|
struct fh_pll_state state;
|
||
|
const struct fh_pll_data data;
|
||
|
};
|
||
|
|
||
|
struct fh_pll_regs {
|
||
|
void __iomem *reg_hp_en;
|
||
|
void __iomem *reg_clk_con;
|
||
|
void __iomem *reg_rst_con;
|
||
|
void __iomem *reg_slope0;
|
||
|
void __iomem *reg_slope1;
|
||
|
void __iomem *reg_cfg;
|
||
|
void __iomem *reg_updnlmt;
|
||
|
void __iomem *reg_dds;
|
||
|
void __iomem *reg_dvfs;
|
||
|
void __iomem *reg_mon;
|
||
|
};
|
||
|
|
||
|
struct mtk_fh {
|
||
|
struct mtk_clk_pll clk_pll;
|
||
|
struct fh_pll_regs regs;
|
||
|
struct mtk_pllfh_data *pllfh_data;
|
||
|
const struct fh_operation *ops;
|
||
|
spinlock_t *lock;
|
||
|
};
|
||
|
|
||
|
struct fh_operation {
|
||
|
int (*hopping)(struct mtk_fh *fh, unsigned int new_dds,
|
||
|
unsigned int postdiv);
|
||
|
int (*ssc_enable)(struct mtk_fh *fh, u32 rate);
|
||
|
};
|
||
|
|
||
|
int mtk_clk_register_pllfhs(struct device_node *node,
|
||
|
const struct mtk_pll_data *plls, int num_plls,
|
||
|
struct mtk_pllfh_data *pllfhs, int num_pllfhs,
|
||
|
struct clk_hw_onecell_data *clk_data);
|
||
|
|
||
|
void mtk_clk_unregister_pllfhs(const struct mtk_pll_data *plls, int num_plls,
|
||
|
struct mtk_pllfh_data *pllfhs, int num_fhs,
|
||
|
struct clk_hw_onecell_data *clk_data);
|
||
|
|
||
|
void fhctl_parse_dt(const u8 *compatible_node, struct mtk_pllfh_data *pllfhs,
|
||
|
int num_pllfhs);
|
||
|
|
||
|
#endif /* __CLK_PLLFH_H */
|