bool sec_hal_chg_set_property(struct i2c_client *client, enum power_supply_property psp, const union power_supply_propval *val) { struct sec_charger_info *charger = i2c_get_clientdata(client); switch (psp) { /* val->intval : type */ case POWER_SUPPLY_PROP_ONLINE: if (charger->charging_current < 0) smb347_charger_otg_control(client); else if (charger->charging_current > 0) smb347_charger_function_control(client); else { smb347_charger_function_control(client); smb347_charger_otg_control(client); } smb347_test_read(client); break; case POWER_SUPPLY_PROP_CURRENT_MAX: /* input current limit set */ /* calculated input current limit value */ case POWER_SUPPLY_PROP_CURRENT_NOW: smb347_set_charging_input_current_limit(client, val->intval); break; /* val->intval : charging current */ case POWER_SUPPLY_PROP_CURRENT_AVG: smb347_set_charging_current(client, val->intval); break; default: return false; } return true; }
static void smb347_set_charging_state(int enable, int charging_mode) { struct smb347_chg_data *chg = smb347_chg; pr_info("%s : enable(%d), charging_mode(%d)\n", __func__, enable, charging_mode); if (enable) { /* Only for P4C rev0.2, Check vbus for opeartion charger */ if (!smb347_check_powersource(chg)) return; /* Init smb347 charger */ smb347_charger_init(chg); switch (charging_mode) { case CABLE_TYPE_TA: /* Input current limit : DCIN 1800mA, USBIN HC 1800mA */ smb347_i2c_write(chg->client, SMB347_INPUT_CURRENTLIMIT, 0x66); /* CommandB : High-current mode */ smb347_i2c_write(chg->client, SMB347_COMMAND_B, 0x03); pr_info("%s : 1.8A charging enable\n", __func__); break; case CABLE_TYPE_DESKDOCK: /* Input current limit : DCIN 1500mA, USBIN HC 1500mA */ smb347_i2c_write(chg->client, SMB347_INPUT_CURRENTLIMIT, 0x55); /* CommandB : High-current mode */ smb347_i2c_write(chg->client, SMB347_COMMAND_B, 0x03); pr_info("%s : 1.5A charging enable\n", __func__); break; case CABLE_TYPE_USB: /* CommandB : USB5 */ smb347_i2c_write(chg->client, SMB347_COMMAND_B, 0x02); pr_info("%s : LOW(USB5) charging enable\n", __func__); break; default: /* CommandB : USB1 */ smb347_i2c_write(chg->client, SMB347_COMMAND_B, 0x00); pr_info("%s : LOW(USB1) charging enable\n", __func__); break; } smb347_enable_charging(chg); } else { smb347_disable_charging(chg); } smb347_test_read(); }
bool sec_hal_chg_init(struct i2c_client *client) { smb347_test_read(client); return true; }