Exemplo n.º 1
0
static void twl6030_bci_battery_external_power_changed(struct power_supply *psy)
{
	struct twl6030_bci_device_info *di = to_twl6030_bci_device_info(psy);

	cancel_delayed_work(&di->twl6030_bci_monitor_work);
	schedule_delayed_work(&di->twl6030_bci_monitor_work, 0);
}
Exemplo n.º 2
0
static int twl6030_bci_battery_get_property(struct power_supply *psy,
					enum power_supply_property psp,
					union power_supply_propval *val)
{
	struct twl6030_bci_device_info *di;
	int status = 0;

	di = to_twl6030_bci_device_info(psy);

	switch (psp) {
	case POWER_SUPPLY_PROP_STATUS:
		val->intval = di->charge_status;
		return 0;
	default:
		break;
	}

	switch (psp) {
	case POWER_SUPPLY_PROP_VOLTAGE_NOW:
		val->intval = di->voltage_uV;
		break;
	case POWER_SUPPLY_PROP_CURRENT_NOW:
		val->intval = di->current_uA;
		break;
	case POWER_SUPPLY_PROP_TEMP:
		val->intval = di->temp_C;
		break;
	case POWER_SUPPLY_PROP_ONLINE:
		status = twl6030bci_status();
		if ((status & CONTROLLER_CTRL1_EN_CHARGER)) {
			if ((status & CONTROLLER_CTRL1_SEL_CHARGER))
				val->intval = POWER_SUPPLY_TYPE_MAINS;
			else if(usb_connected)
				val->intval = POWER_SUPPLY_TYPE_USB;
			else
				val->intval = 0;
		} else
			val->intval = 0;
		break;
	case POWER_SUPPLY_PROP_CAPACITY:
		/* FIXME correct the threshold
		 * need to get the correct percentage value per the
		 * battery characteristics. Approx values for now.
		 */
		if (di->voltage_uV < 3250)
			val->intval = 5;
		else if (di->voltage_uV > 3250 && di->voltage_uV < 3400)
			val->intval = 20;
		else if (di->voltage_uV > 3400 && di->voltage_uV < 3700)
			val->intval = 50;
		else if (di->voltage_uV > 3700 && di->voltage_uV < 3950)
			val->intval = 75;
		else if (di->voltage_uV > 3950)
			val->intval = 90;
		break;
	default:
		return -EINVAL;
	}
	return 0;
}
Exemplo n.º 3
0
static int twl6030_bci_battery_get_property(struct power_supply *psy,
					enum power_supply_property psp,
					union power_supply_propval *val)
{
	struct twl6030_bci_device_info *di;

	di = to_twl6030_bci_device_info(psy);

	switch (psp) {
	case POWER_SUPPLY_PROP_STATUS:
		switch (di->state) {
		case STATE_USB:
		case STATE_AC:
		case STATE_FULL: /* TODO ?? */
			val->intval = POWER_SUPPLY_STATUS_CHARGING;
			break;
		default:
			val->intval = POWER_SUPPLY_STATUS_DISCHARGING;
		}
		break;
	case POWER_SUPPLY_PROP_VOLTAGE_NOW:
		val->intval = twl6030_get_battery_voltage(di) * 1000;
		break;
	case POWER_SUPPLY_PROP_CURRENT_NOW:
		twl6030battery_current(di);
		val->intval = di->current_uA;
		break;
	case POWER_SUPPLY_PROP_CHARGE_COUNTER:
		val->intval = di->capacity_uAh;
		break;
	case POWER_SUPPLY_PROP_TEMP:
		val->intval = 275; // simulate a healthy battery temp
		break;
	case POWER_SUPPLY_PROP_ONLINE:
		val->intval = 1;
		break;
	case POWER_SUPPLY_PROP_CURRENT_AVG:
		val->intval = di->current_avg_uA;
		break;
	case POWER_SUPPLY_PROP_HEALTH:
		val->intval = di->bat_health;
		break;
	case POWER_SUPPLY_PROP_CAPACITY:
		val->intval = di->capacity;
		break;
	default:
		return -EINVAL;
	}
	return 0;
}