/* SPDX-License-Identifier: GPL-2.0-only */ /* * Utility functions for parsing Tegra CVB voltage tables */ #ifndef __DRIVERS_CLK_TEGRA_CVB_H #define __DRIVERS_CLK_TEGRA_CVB_H #include <linux/types.h> struct device; #define MAX_DVFS_FREQS 40 struct rail_alignment { int offset_uv; int step_uv; }; struct cvb_coefficients { int c0; int c1; int c2; }; struct cvb_table_freq_entry { unsigned long freq; struct cvb_coefficients coefficients; }; struct cvb_cpu_dfll_data { u32 tune0_low; u32 tune0_high; u32 tune1; unsigned int tune_high_min_millivolts; }; struct cvb_table { int speedo_id; int process_id; int min_millivolts; int max_millivolts; int speedo_scale; int voltage_scale; struct cvb_table_freq_entry entries[MAX_DVFS_FREQS]; struct cvb_cpu_dfll_data cpu_dfll_data; }; const struct cvb_table * tegra_cvb_add_opp_table(struct device *dev, const struct cvb_table *cvb_tables, size_t count, struct rail_alignment *align, int process_id, int speedo_id, int speedo_value, unsigned long max_freq); void tegra_cvb_remove_opp_table(struct device *dev, const struct cvb_table *table, unsigned long max_freq); #endif