static int wm831x_bat_get_prop(struct power_supply *psy,
			       enum power_supply_property psp,
			       union power_supply_propval *val)
{
	struct wm831x_power *wm831x_power = dev_get_drvdata(psy->dev->parent);
	struct wm831x *wm831x = wm831x_power->wm831x;
	int ret = 0;

	switch (psp) {
	case POWER_SUPPLY_PROP_STATUS:
		ret = wm831x_bat_check_status(wm831x, &val->intval);
		break;
	case POWER_SUPPLY_PROP_ONLINE:
		ret = wm831x_power_check_online(wm831x, WM831X_PWR_SRC_BATT,
						val);
		break;
	case POWER_SUPPLY_PROP_VOLTAGE_NOW:
		ret = wm831x_power_read_voltage(wm831x, WM831X_AUX_BATT, val);
		break;
	case POWER_SUPPLY_PROP_HEALTH:
		ret = wm831x_bat_check_health(wm831x, &val->intval);
		break;
	case POWER_SUPPLY_PROP_CHARGE_TYPE:
		ret = wm831x_bat_check_type(wm831x, &val->intval);
		break;
	default:
		ret = -EINVAL;
		break;
	}

	return ret;
}
Ejemplo n.º 2
0
static void wm831x_batt_work(struct work_struct *work)
{
	int online, status,health,level, ret; 
    union power_supply_propval val;
	struct wm831x_power *power = container_of(work, struct wm831x_power, batt_work);

	ret = wm831x_power_check_online(power->wm831x, WM831X_PWR_SRC_BATT, &val);
	if (ret < 0) {
		printk("%s: check bat online failer...  err = %d\n", __FUNCTION__, ret);
		return;
	}
	online = val.intval;

	ret = wm831x_bat_check_status(power->wm831x, &status);
	if (ret < 0) {
		printk("%s: check bat status failer...  err = %d\n", __FUNCTION__, ret);
		return;
	}

	ret = wm831x_bat_check_health(power->wm831x, &health);
	if (ret < 0) {
		printk("%s: check bat health failer...  err = %d\n", __FUNCTION__, ret);
		return;
	}

	ret = wm831x_power_read_voltage(power->wm831x, WM831X_AUX_BATT, &val);
	if (ret < 0) {
		printk("%s: read bat voltage failer...err = %d\n", __FUNCTION__, ret);
		return;
	}
	power->batt_info.voltage = val.intval;

	wm831x_batt_vol_level(power, val.intval / 1000, &level);
	//mod_timer(&power->timer, jiffies + msecs_to_jiffies(power->interval));

	if (online != power->batt_info.online || status != power->batt_info.status
			|| health != power->batt_info.health || level != power->batt_info.level)
	{
		power->batt_info.online = online;
		power->batt_info.status = status;
		power->batt_info.health = health;
		power->batt_info.level  = level;

		power_supply_changed(&power->battery);
	}

}