Example #1
0
static void twl6030_start_usb_charger(struct twl6030_bci_device_info *di, int mA)
{
	int ret;

	if (!is_battery_present(di)) {
		dev_err(di->dev, "BATTERY NOT DETECTED!\n");
		return;
	}

	if (mA < 50) {
		ret = twl_i2c_write_u8(TWL6030_MODULE_CHARGER, 0, CONTROLLER_CTRL1);
		if (ret)
			goto err;
		return;
	}

	twl6030_config_vichrg_reg(di, di->charger_outcurrentmA);
	twl6030_config_cinlimit_reg(di, mA);
	twl6030_config_voreg_reg(di, di->platform_data->max_bat_voltagemV);
	twl6030_config_iterm_reg(di, di->platform_data->termination_currentmA);

	if (mA >= 50) {
		twl6030_set_watchdog(di, di->watchdog_duration);
		/* disable current termination, suspend mode, boost mode, etc */
		twl_i2c_write_u8(TWL6030_MODULE_CHARGER, 0, CHARGERUSB_CTRL1);
		ret = twl_i2c_write_u8(TWL6030_MODULE_CHARGER, CONTROLLER_CTRL1_EN_CHARGER, CONTROLLER_CTRL1);
		if (ret)
			goto err;
	}
	/* printk("battery: CHARGER ON\n"); */
	return;

err:
	pr_err("%s: Error access to TWL6030 (%d)\n", __func__, ret);
}
Example #2
0
static void enable_charging(void)
{
	struct charger_device_info *di;
	di = this_dev;

	unsigned int charger_incurrentmA;
	unsigned int charger_outcurrentmA;
	unsigned int regulation_voltagemV;
	unsigned int termination_currentmA;
	u8 state = 0;
	
	
	int cable_status = sec_bci->charger.cable_status;

	twl_i2c_read_u8(TWL6030_MODULE_ID1, &state,
			TWL6030_REG_GPADC_CTRL);
	state |= TWL6030_GPADC_CTRL_SCALER_EN_CH11;
	twl_i2c_write_u8(TWL6030_MODULE_ID1, state,
			 TWL6030_REG_GPADC_CTRL);

	switch (cable_status) {
	case POWER_SUPPLY_TYPE_USB:
		charger_outcurrentmA = 400;
		charger_incurrentmA = 400;
		regulation_voltagemV = 4200;
		termination_currentmA = 150;
		dev_dbg(di->dev,"[TA] USB charging start\n");
		break;
		
	case POWER_SUPPLY_TYPE_MAINS:
		charger_outcurrentmA = 1000;
		charger_incurrentmA = 1000;
		regulation_voltagemV = 4200;
		termination_currentmA = 150;
		dev_dbg(di->dev,"[TA] TA charging start\n");
		break;

	default:
		dev_dbg(di->dev,"[TA] inproper charge mode\n");
		goto end_enable_charging;
	}
	
	twl6030_config_vichrg_reg(di, charger_outcurrentmA);
	twl6030_config_cinlimit_reg(di, charger_incurrentmA);
	twl6030_config_voreg_reg(di, regulation_voltagemV);
	twl6030_config_iterm_reg(di, termination_currentmA);

	twl_i2c_write_u8(TWL6030_MODULE_CHARGER,
			CONTROLLER_CTRL1_EN_CHARGER,
			CONTROLLER_CTRL1);

	dev_dbg(di->dev, "ENABLE CHARGING\n");
	
	sec_bci->charger.is_charging = true;

end_enable_charging:
	;
	

}
Example #3
0
static ssize_t set_termination_current(struct device *dev,
	struct device_attribute *attr, const char *buf, size_t count)
{
	long val;
	int status = count;
	struct twl6030_bci_device_info *di = dev_get_drvdata(dev);

	if ((strict_strtol(buf, 10, &val) < 0) || (val < 50) || (val > 400))
		return -EINVAL;
	di->platform_data->termination_currentmA = val;
	twl6030_config_iterm_reg(di, val);

	return status;
}