blob: 071d0fbfb58dbcebb1081e387e82c1f00bcbf7c1 [file] [log] [blame]
#ifndef __PWRCAL_DFS_H__
#define __PWRCAL_DFS_H__
#include "pwrcal-env.h"
#include "pwrcal-clk.h"
#include "pwrcal-vclk.h"
#define TRANS_HIGH 0
#define TRANS_LOW 1
#define TRANS_DIFF 2
#define TRANS_FORCE 3
#define get_value(_table, _level, _member) \
(*(_table->rate_table + (_table->num_of_members * _level + _member)))
extern unsigned int dfs_set_rate_switch(unsigned int rate_from,
unsigned int rate_to,
struct dfs_table *table);
extern int dfs_enable_switch(struct dfs_table *table);
extern int dfs_disable_switch(struct dfs_table *table);
extern int dfs_use_switch(struct dfs_table *table);
extern int dfs_not_use_switch(struct dfs_table *table);
extern int dfs_trans_div(int lv_from, int lv_to, struct dfs_table *table, int opt);
extern int dfs_trans_pll(int lv_from, int lv_to, struct dfs_table *table, int opt);
extern int dfs_trans_mux(int lv_from, int lv_to, struct dfs_table *table, int opt);
extern int dfs_trans_gate(int lv_from, int lv_to, struct dfs_table *table, int opt);
extern int dfs_get_lv(unsigned int rate, struct dfs_table *table);
extern int dfs_get_rate_table(struct dfs_table *dfs, unsigned long *table);
extern int dfs_get_target_rate_table(struct dfs_table *dfs,
unsigned int mux,
unsigned int div,
unsigned long *table);
extern int dfs_set_rate(struct vclk *vclk, unsigned long to);
extern unsigned long dfs_get_rate(struct vclk *vclk);
extern int dfs_enable(struct vclk *vclk);
extern int dfs_disable(struct vclk *vclk);
extern int dfs_is_enabled(struct vclk *vclk);
extern unsigned long dfs_get_max_freq(struct vclk *vclk);
extern unsigned long dfs_get_min_freq(struct vclk *vclk);
extern void dfs_init(void);
extern void dfs_dram_init(void);
#endif