static int ulpmc_get_charger_property(struct power_supply *psy, enum power_supply_property psp, union power_supply_propval *val) { int ret = 0; struct ulpmc_chip_info *chip = container_of(psy, struct ulpmc_chip_info, chrg); mutex_lock(&chip->lock); switch (psp) { case POWER_SUPPLY_PROP_PRESENT: ret = ulpmc_read_reg8(chip->client, ULPMC_BC_REG_STAT); if (ret < 0) goto i2c_read_err; if ((ret & BC_STAT_VBUS_MASK) == BC_STAT_VBUS_ADP) val->intval = 1; else val->intval = 0; break; case POWER_SUPPLY_PROP_ONLINE: ret = ulpmc_read_reg8(chip->client, ULPMC_BC_REG_STAT); if (ret < 0) goto i2c_read_err; if (ret & BC_STAT_PWR_GOOD) val->intval = 1; else val->intval = 0; break; case POWER_SUPPLY_PROP_HEALTH: val->intval = get_charger_health(chip); break; default: mutex_unlock(&chip->lock); return -EINVAL; } mutex_unlock(&chip->lock); return 0; i2c_read_err: mutex_unlock(&chip->lock); return ret; }
static int pmic_chrg_usb_get_property(struct power_supply *psy, enum power_supply_property psp, union power_supply_propval *val) { struct pmic_chrg_info *info = container_of(psy, struct pmic_chrg_info, psy_usb); int ret = 0; mutex_lock(&info->lock); switch (psp) { case POWER_SUPPLY_PROP_PRESENT: /* check for OTG case first */ if (info->id_short) { val->intval = 0; break; } ret = pmic_chrg_is_present(info); if (ret < 0) goto psy_get_prop_fail; val->intval = ret; break; case POWER_SUPPLY_PROP_ONLINE: /* check for OTG case first */ if (info->id_short) { val->intval = 0; break; } val->intval = info->online; break; case POWER_SUPPLY_PROP_HEALTH: val->intval = get_charger_health(info); /* * X-Power Inlimit is getting set to default(500mA) * whenever we hit the Charger UVP condition and the * setting remains same even after UVP recovery. * As a WA to make sure INLMT is intact, we are * reprogramming the inlimit. */ if (val->intval == POWER_SUPPLY_HEALTH_GOOD) { ret = pmic_chrg_set_inlmt(info, info->inlmt); if (ret < 0) dev_warn(&info->pdev->dev, "set inlimit failed\n"); } break; case POWER_SUPPLY_PROP_MAX_CHARGE_CURRENT: val->intval = info->max_cc; break; case POWER_SUPPLY_PROP_MAX_CHARGE_VOLTAGE: val->intval = info->max_cv; break; case POWER_SUPPLY_PROP_CHARGE_CURRENT: val->intval = info->cc; break; case POWER_SUPPLY_PROP_CHARGE_VOLTAGE: val->intval = info->cv; break; case POWER_SUPPLY_PROP_INLMT: val->intval = info->inlmt; break; case POWER_SUPPLY_PROP_CHARGE_TERM_CUR: val->intval = info->iterm; break; case POWER_SUPPLY_PROP_CABLE_TYPE: val->intval = info->cable_type; break; case POWER_SUPPLY_PROP_ENABLE_CHARGING: val->intval = info->is_charging_enabled; break; case POWER_SUPPLY_PROP_ENABLE_CHARGER: val->intval = info->is_charger_enabled; break; case POWER_SUPPLY_PROP_CHARGE_CONTROL_LIMIT: val->intval = info->cntl_state; break; case POWER_SUPPLY_PROP_CHARGE_CONTROL_LIMIT_MAX: val->intval = info->pdata->num_throttle_states; break; case POWER_SUPPLY_PROP_MAX_TEMP: val->intval = info->max_temp; break; case POWER_SUPPLY_PROP_MIN_TEMP: val->intval = info->min_temp; break; default: mutex_unlock(&info->lock); return -EINVAL; } psy_get_prop_fail: mutex_unlock(&info->lock); return ret; }
static int crystalcove_chgr_usb_get_property(struct power_supply *psy, enum power_supply_property psp, union power_supply_propval *val) { struct chgr_info *info = container_of(psy, struct chgr_info, psy_usb); int ret = 0; mutex_lock(&info->lock); switch (psp) { case POWER_SUPPLY_PROP_PRESENT: ret = crystal_cove_vbus_on_status(); if (ret < 0) goto psy_get_prop_fail; val->intval = ret; break; case POWER_SUPPLY_PROP_ONLINE: val->intval = info->online; break; case POWER_SUPPLY_PROP_HEALTH: val->intval = get_charger_health(info); break; case POWER_SUPPLY_PROP_MAX_CHARGE_CURRENT: val->intval = info->max_cc; break; case POWER_SUPPLY_PROP_MAX_CHARGE_VOLTAGE: val->intval = info->max_cv; break; case POWER_SUPPLY_PROP_CHARGE_CURRENT: val->intval = info->cc; break; case POWER_SUPPLY_PROP_CHARGE_VOLTAGE: val->intval = info->cv; break; case POWER_SUPPLY_PROP_INLMT: val->intval = info->inlmt; break; case POWER_SUPPLY_PROP_CHARGE_TERM_CUR: val->intval = info->iterm; break; case POWER_SUPPLY_PROP_CABLE_TYPE: val->intval = info->cable_type; break; case POWER_SUPPLY_PROP_ENABLE_CHARGING: val->intval = info->is_charging_enabled; break; case POWER_SUPPLY_PROP_ENABLE_CHARGER: val->intval = info->is_charger_enabled; break; case POWER_SUPPLY_PROP_CHARGE_CONTROL_LIMIT: val->intval = info->cntl_state; break; case POWER_SUPPLY_PROP_CHARGE_CONTROL_LIMIT_MAX: val->intval = info->pdata->num_throttle_states; break; case POWER_SUPPLY_PROP_MAX_TEMP: val->intval = info->max_temp; break; case POWER_SUPPLY_PROP_MIN_TEMP: val->intval = info->min_temp; break; default: mutex_unlock(&info->lock); return -EINVAL; } psy_get_prop_fail: mutex_unlock(&info->lock); return ret; }