示例#1
0
文件: clock.c 项目: liyaoshi/omapboot
/**
 * scale_vcore_omap4470() - Scale for OMAP4470
 * @rev:	OMAP chip revision
 *
 * PMIC assumed to be used is TWL6032
 */
static void scale_vcore_omap4470(unsigned int rev)
{
	/* vdd_core - SMPS 2 - OPP100-OV - 1.25V */
	omap_vc_bypass_send_value(TWL6032_SRI2C_SLAVE_ADDR,
				TWL6032_SRI2C_REG_ADDR_SMPS2, 0x2C);

	/* vdd_mpu - SMPS 1 - OPP100 - 1.2027V */
	omap_vc_bypass_send_value(TWL6032_SRI2C_SLAVE_ADDR,
				TWL6032_SRI2C_REG_ADDR_SMPS1, 0x28);

	/* vdd_iva - SMPS 5 - OPP50 - 0.950V */
	omap_vc_bypass_send_value(TWL6032_SRI2C_SLAVE_ADDR,
				TWL6032_SRI2C_REG_ADDR_SMPS5, 0x14);
}
示例#2
0
void do_scale_vcore(u32 vcore_reg, u32 volt_mv, struct pmic_data *pmic)
{
	u32 offset_code;
	u32 offset = volt_mv;
	int ret = 0;

	/* See if we can first get the GPIO if needed */
	if (pmic->gpio_en)
		ret = gpio_request(pmic->gpio, "PMIC_GPIO");

	if (ret < 0) {
		printf("%s: gpio %d request failed %d\n", __func__,
							pmic->gpio, ret);
		return;
	}

	/* Pull the GPIO low to select SET0 register, while we program SET1 */
	if (pmic->gpio_en)
		gpio_direction_output(pmic->gpio, 0);

	/* convert to uV for better accuracy in the calculations */
	offset *= 1000;

	offset_code = get_offset_code(offset, pmic);

	debug("do_scale_vcore: volt - %d offset_code - 0x%x\n", volt_mv,
		offset_code);

	if (omap_vc_bypass_send_value(SMPS_I2C_SLAVE_ADDR,
				vcore_reg, offset_code))
		printf("Scaling voltage failed for 0x%x\n", vcore_reg);

	if (pmic->gpio_en)
		gpio_direction_output(pmic->gpio, 1);
}
示例#3
0
文件: clock.c 项目: liyaoshi/omapboot
/**
 * scale_vcore_omap4430() - Scale for OMAP4430
 * @rev:	OMAP chip revision
 *
 * PMIC assumed to be used is TWL6030
 */
static void scale_vcore_omap4430(unsigned int rev)
{
	u8 vsel;

	/* vdd_core - VCORE 3 - OPP100 - ES2+: 1.127 */
	vsel = (rev == OMAP_4430_ES1_DOT_0) ? 0x31 : 0x22;
	omap_vc_bypass_send_value(TWL6030_SRI2C_SLAVE_ADDR,
				  TWL6030_SRI2C_REG_ADDR_VCORE3, vsel);

	/* vdd_mpu - VCORE 1 - OPP100 - ES2+: 1.2027 */
	vsel = (rev == OMAP_4430_ES1_DOT_0) ? 0x3B : 0x28;
	omap_vc_bypass_send_value(TWL6030_SRI2C_SLAVE_ADDR,
				  TWL6030_SRI2C_REG_ADDR_VCORE1, vsel);

	/* vdd_iva - VCORE 2 - OPP50 - ES2+: 0.950V */
	vsel = (rev == OMAP_4430_ES1_DOT_0) ? 0x31 : 0x14;
	omap_vc_bypass_send_value(TWL6030_SRI2C_SLAVE_ADDR,
				  TWL6030_SRI2C_REG_ADDR_VCORE2, vsel);
}
示例#4
0
文件: clock.c 项目: liyaoshi/omapboot
/**
 * scale_vcore_omap4460() - Scale for OMAP4460
 * @rev:	OMAP chip revision
 *
 * PMIC assumed to be used is TWL6030 + TPS62361
 */
static void scale_vcore_omap4460(unsigned int rev)
{
	u32 volt;

	/* vdd_core - TWL6030 VCORE 1 - OPP100 - 1.127V */
	omap_vc_bypass_send_value(TWL6030_SRI2C_SLAVE_ADDR,
				  TWL6030_SRI2C_REG_ADDR_VCORE1, 0x22);

	/* WKUP clocks */
	set_modify(CM_WKUP_GPIO1_CLKCTRL, 0x00000000, 0x1);
	check_loop(BIT17|BIT16, 0, CM_WKUP_GPIO1_CLKCTRL);

	/* vdd_mpu - TPS62361 - OPP100 - 1.210V (roundup from 1.2V) */
	volt = 1210;
	volt -= TPS62361_BASE_VOLT_MV;
	volt /= 10;
	do_scale_tps62361(TPS62361_REG_ADDR_SET1, volt);

	/* vdd_iva - TWL6030 VCORE 2 - OPP50  - 0.950V */
	omap_vc_bypass_send_value(TWL6030_SRI2C_SLAVE_ADDR,
				  TWL6030_SRI2C_REG_ADDR_VCORE2, 0x14);
}
示例#5
0
文件: clock.c 项目: liyaoshi/omapboot
static void do_scale_tps62361(u32 reg, u32 val)
{
	u32 l = 0;

	/*
	 * Select SET1 in TPS62361:
	 * VSEL1 is grounded on board. So the following selects
	 * VSEL1 = 0 and VSEL0 = 1
	 */

	/* set GPIO-7 direction as output */
	l = readl(0x4A310134);
	l &= ~(1 << TPS62361_VSEL0_GPIO);
	writel(l, 0x4A310134);

	omap_vc_bypass_send_value(TPS62361_I2C_SLAVE_ADDR, reg, val);

	/* set GPIO-7 data-out */
	l = 1 << TPS62361_VSEL0_GPIO;
	writel(l, 0x4A310194);
}