int __init pm_params_init(void)
{
	__pm_init_errata_flg();
	pwrmgr_init_param.cmd_buf = i2c_cmd_buf;
	pwrmgr_init_param.cmd_buf_size = cmd_buf_sz;
#ifdef CONFIG_PWRMGR_1P2GHZ_OPS_SET_SELECT
	pwrmgr_init_param.def_vlt_tbl = (u8 *)
		get_sr_vlt_table(SILICON_TYPE_SLOW, A9_FREQ_1200_MHZ);
#else
	pwrmgr_init_param.def_vlt_tbl = (u8 *)
		get_sr_vlt_table(SILICON_TYPE_SLOW, A9_FREQ_1000_MHZ);
#endif
	pwrmgr_init_param.vlt_tbl_size = SR_VLT_LUT_SIZE;
	return 0;
}
static ssize_t read_volt_tbl(struct file *file, const char __user *buf,
				  size_t count, loff_t *ppos)
{
	u32 len = 0;
	u32 freq_id = A9_FREQ_1000_MHZ;
	u32 silicon_type = SILICON_TYPE_SLOW;
	char input_str[10];
	u8 *volt_table;
	int i;
	if (count > sizeof(input_str))
		len = sizeof(input_str);
	else
		len = count;

	if (copy_from_user(input_str, buf, len))
		return -EFAULT;
	/* coverity[secure_coding] */
	sscanf(input_str, "%d%d", &silicon_type, &freq_id);
	if (silicon_type >= SILICON_TYPE_MAX) {
		pr_err("%s: Invalid silicon type\n", __func__);
		return count;
	}
	/* Right now, 1.5Ghz voltage table hasn't been defined */
	if (freq_id >= A9_FREQ_1500_MHZ) {
		pr_err("%s: Invalid freq id\n", __func__);
		return count;
	}
	volt_table = (u8 *) get_sr_vlt_table(silicon_type, freq_id);
	pr_info("Silicon Type: %d, Freq Id: %d", silicon_type, freq_id);
	for (i = 0; i < 0x10; i++)
		pr_info("[%x] = %x ", i, volt_table[i]);

	return count;
}
Ejemplo n.º 3
0
int pm_init_pmu_sr_vlt_map_table(u32 silicon_type, int freq_id)
{
	int inx;
	int ret;
	u8 *vlt_table;
	vlt_table = (u8 *) get_sr_vlt_table(silicon_type, freq_id);
	for (inx = 0; inx < SR_VLT_LUT_SIZE; inx++)
		sr_vlt_table[inx] = vlt_table[inx];
	/*Init SR voltages that are not set by HW seq*/
	ret = bcmpmu_init_sr_volt();
	WARN_ON(ret);
	populate_pmu_voltage_log();
	return pwr_mgr_pm_i2c_var_data_write(vlt_table, SR_VLT_LUT_SIZE);
}