static int bq51221_chg_set_property(struct power_supply *psy, enum power_supply_property psp, const union power_supply_propval *val) { struct bq51221_charger_data *charger = container_of(psy, struct bq51221_charger_data, psy_chg); switch (psp) { case POWER_SUPPLY_PROP_STATUS: if(val->intval == POWER_SUPPLY_STATUS_FULL) { charger->pdata->cs100_status = bq51221_set_full_charge_info(charger->client); pr_info("%s charger->pdata->cs100_status %d \n",__func__,charger->pdata->cs100_status); } break; case POWER_SUPPLY_PROP_CHARGE_TYPE: break; case POWER_SUPPLY_PROP_HEALTH: if(val->intval == POWER_SUPPLY_HEALTH_OVERHEAT || POWER_SUPPLY_HEALTH_OVERHEATLIMIT) { bq51221_set_over_temperuture_info(charger->client); } break; case POWER_SUPPLY_PROP_ONLINE: if(val->intval == POWER_SUPPLY_TYPE_WIRELESS) { charger->pdata->pad_mode = BQ51221_PAD_MODE_WPC; queue_delayed_work(charger->wqueue, &charger->wpc_work, msecs_to_jiffies(5000)); wake_lock_timeout(&charger->wpc_wake_lock, HZ * 6); } else if(val->intval == POWER_SUPPLY_TYPE_BATTERY) { charger->pdata->pad_mode = BQ51221_PAD_MODE_NONE; cancel_delayed_work(&charger->wpc_work); } break; default: return -EINVAL; } return 0; }
static int bq51221_chg_set_property(struct power_supply *psy, enum power_supply_property psp, const union power_supply_propval *val) { struct bq51221_charger_data *charger = container_of(psy, struct bq51221_charger_data, psy_chg); union power_supply_propval value; switch (psp) { case POWER_SUPPLY_PROP_STATUS: if(val->intval == POWER_SUPPLY_STATUS_FULL) { charger->pdata->cs100_status = bq51221_set_full_charge_info(charger->client); pr_info("%s charger->pdata->cs100_status %d \n",__func__,charger->pdata->cs100_status); } break; case POWER_SUPPLY_PROP_CHARGE_TYPE: if (!charger->pdata->default_voreg && !delayed_work_pending(&charger->wpc_work)) bq51221_set_voreg(charger->client, val->intval); break; case POWER_SUPPLY_PROP_HEALTH: if(val->intval == POWER_SUPPLY_HEALTH_OVERHEAT || val->intval == POWER_SUPPLY_HEALTH_OVERHEATLIMIT || val->intval == POWER_SUPPLY_HEALTH_COLD) bq51221_set_end_power_transfer(charger->client, END_POWER_TRANSFER_CODE_OVER_TEMPERATURE); else if(val->intval == POWER_SUPPLY_HEALTH_UNDERVOLTAGE) bq51221_set_end_power_transfer(charger->client, END_POWER_TRANSFER_CODE_RECONFIGURE); break; case POWER_SUPPLY_PROP_ONLINE: if(val->intval == POWER_SUPPLY_TYPE_WIRELESS) { charger->pdata->pad_mode = BQ51221_PAD_MODE_WPC; queue_delayed_work(charger->wqueue, &charger->wpc_work, msecs_to_jiffies(5000)); wake_lock_timeout(&charger->wpc_wake_lock, HZ * 6); } else if(val->intval == POWER_SUPPLY_TYPE_BATTERY) { bq51221_set_voreg(charger->client, 1); charger->pdata->pad_mode = BQ51221_PAD_MODE_NONE; cancel_delayed_work(&charger->wpc_work); } break; case POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN: charger->pdata->siop_level = val->intval; pr_info("%s siop = %d \n",__func__, charger->pdata->siop_level); break; case POWER_SUPPLY_PROP_CHARGE_OTG_CONTROL: if (val->intval) { charger->pdata->default_voreg = true; bq51221_set_voreg(charger->client, val->intval); } else { charger->pdata->default_voreg = false; psy_do_property("battery", get, POWER_SUPPLY_PROP_STATUS, value); if ((value.intval == POWER_SUPPLY_STATUS_CHARGING) && (charger->pdata->pad_mode == BQ51221_PAD_MODE_WPC)) { queue_delayed_work(charger->wqueue, &charger->wpc_work, msecs_to_jiffies(5000)); wake_lock_timeout(&charger->wpc_wake_lock, HZ * 6); } } break; default: return -EINVAL; } return 0; }