#ifndef __PWRCAL_H__
#define __PWRCAL_H__

#ifdef __cplusplus
extern "C" {
#endif

#define BLKPWR_MAGIC	0xB1380000

extern unsigned int cal_clk_get(char *name);
extern unsigned int cal_clk_is_enabled(unsigned int vclkid);
extern int cal_clk_setrate(unsigned int vclkid, unsigned long rate);
extern unsigned long cal_clk_getrate(unsigned int vclkid);
extern int cal_clk_enable(unsigned int vclkid);
extern int cal_clk_disable(unsigned int vclkid);


extern int cal_pd_control(unsigned int id, int on);
extern int cal_pd_status(unsigned int id);


extern int cal_pm_enter(int mode);
extern int cal_pm_exit(int mode);
extern int cal_pm_earlywakeup(int mode);


extern unsigned int cal_dfs_get(char *name);
extern unsigned long cal_dfs_get_max_freq(unsigned int id);
extern unsigned long cal_dfs_get_min_freq(unsigned int id);
extern int cal_dfs_set_rate(unsigned int id, unsigned long rate);
extern int cal_dfs_set_rate_switch(unsigned int id, unsigned long switch_rate);
extern unsigned long cal_dfs_cached_get_rate(unsigned int id);
extern unsigned long cal_dfs_get_rate(unsigned int id);
extern int cal_dfs_get_rate_table(unsigned int id, unsigned long *table);
extern int cal_dfs_get_asv_table(unsigned int id, unsigned int *table);
extern unsigned int cal_asv_pmic_info(void);


struct dvfs_rate_volt {
	unsigned long rate;
	unsigned int volt;
};
int cal_dfs_get_rate_asv_table(unsigned int id,
					struct dvfs_rate_volt *table);
extern void cal_dfs_set_volt_margin(unsigned int id, int volt);
extern unsigned long cal_dfs_get_rate_by_member(unsigned int id,
							char *member,
							unsigned long rate);
extern int cal_dfs_set_ema(unsigned int id, unsigned int volt);

enum cal_dfs_ext_ops {
	cal_dfs_initsmpl		= 0,
	cal_dfs_setsmpl		= 1,
	cal_dfs_get_smplstatus	= 2,
	cal_dfs_deinitsmpl	= 3,

	cal_dfs_dvs = 30,

	/* Add new ops at below */
	cal_dfs_mif_is_dll_on	= 50,

	cal_dfs_cpu_idle_clock_down = 60,

	cal_dfs_ctrl_clk_gate	= 70,
};

extern int cal_dfs_ext_ctrl(unsigned int id,
				enum cal_dfs_ext_ops ops,
				int para);


extern void cal_asv_print_info(void);
extern void cal_rcc_print_info(void);
extern int cal_asv_set_rcc_table(void);
extern void cal_asv_set_grp(unsigned int id, unsigned int asvgrp);
extern int cal_asv_get_grp(unsigned int id, unsigned int lv);
extern void cal_asv_set_tablever(unsigned int version);
extern int cal_asv_get_tablever(void);
extern void cal_asv_set_ssa0(unsigned int id, unsigned int ssa0);


extern int cal_init(void);

/* It is for debugging. */
extern void cal_vclk_dbg_info(unsigned int id);

#ifdef __cplusplus
}
#endif

#endif