Lines Matching refs:smb

292  * @smb: pointer to smb347 charger instance
298 static int smb347_update_ps_status(struct smb347_charger *smb)
305 ret = regmap_read(smb->regmap, IRQSTAT_E, &val);
313 if (smb->use_mains)
315 if (smb->use_usb)
318 ret = smb->mains_online != dc || smb->usb_online != usb;
319 smb->mains_online = dc;
320 smb->usb_online = usb;
327 * @smb: pointer to smb347 charger instance
334 static bool smb347_is_ps_online(struct smb347_charger *smb)
336 return smb->usb_online || smb->mains_online;
341 * @smb: pointer to smb347 charger instance
346 static int smb347_charging_status(struct smb347_charger *smb)
351 if (!smb347_is_ps_online(smb))
354 ret = regmap_read(smb->regmap, STAT_C, &val);
361 static int smb347_charging_set(struct smb347_charger *smb, bool enable)
365 if (smb->enable_control != SMB3XX_CHG_ENABLE_SW) {
366 dev_dbg(smb->dev, "charging enable/disable in SW disabled\n");
370 if (smb->charging_enabled != enable) {
371 ret = regmap_update_bits(smb->regmap, CMD_A, CMD_A_CHG_ENABLED,
374 smb->charging_enabled = enable;
380 static inline int smb347_charging_enable(struct smb347_charger *smb)
382 return smb347_charging_set(smb, true);
385 static inline int smb347_charging_disable(struct smb347_charger *smb)
387 return smb347_charging_set(smb, false);
390 static int smb347_start_stop_charging(struct smb347_charger *smb)
399 if (smb347_is_ps_online(smb)) {
400 ret = smb347_charging_enable(smb);
402 dev_err(smb->dev, "failed to enable charging\n");
404 ret = smb347_charging_disable(smb);
406 dev_err(smb->dev, "failed to disable charging\n");
412 static int smb347_set_charge_current(struct smb347_charger *smb)
414 unsigned int id = smb->id;
417 if (smb->max_charge_current) {
419 smb->max_charge_current);
423 ret = regmap_update_bits(smb->regmap, CFG_CHARGE_CURRENT,
430 if (smb->pre_charge_current) {
432 smb->pre_charge_current);
436 ret = regmap_update_bits(smb->regmap, CFG_CHARGE_CURRENT,
443 if (smb->termination_current) {
445 smb->termination_current);
449 ret = regmap_update_bits(smb->regmap, CFG_CHARGE_CURRENT,
458 static int smb347_set_current_limits(struct smb347_charger *smb)
460 unsigned int id = smb->id;
463 if (smb->mains_current_limit) {
465 smb->mains_current_limit);
469 ret = regmap_update_bits(smb->regmap, CFG_CURRENT_LIMIT,
476 if (smb->usb_hc_current_limit) {
478 smb->usb_hc_current_limit);
482 ret = regmap_update_bits(smb->regmap, CFG_CURRENT_LIMIT,
491 static int smb347_set_voltage_limits(struct smb347_charger *smb)
495 if (smb->pre_to_fast_voltage) {
496 ret = smb->pre_to_fast_voltage;
502 ret = regmap_update_bits(smb->regmap, CFG_FLOAT_VOLTAGE,
509 if (smb->max_charge_voltage) {
510 ret = smb->max_charge_voltage;
516 ret = regmap_update_bits(smb->regmap, CFG_FLOAT_VOLTAGE,
525 static int smb347_set_temp_limits(struct smb347_charger *smb)
527 unsigned int id = smb->id;
532 if (smb->chip_temp_threshold) {
533 val = smb->chip_temp_threshold;
539 ret = regmap_update_bits(smb->regmap, CFG_OTG,
546 if (smb->soft_cold_temp_limit != SMB3XX_TEMP_USE_DEFAULT) {
547 val = smb->soft_cold_temp_limit;
554 ret = regmap_update_bits(smb->regmap, CFG_TEMP_LIMIT,
563 if (smb->soft_hot_temp_limit != SMB3XX_TEMP_USE_DEFAULT) {
564 val = smb->soft_hot_temp_limit;
569 ret = regmap_update_bits(smb->regmap, CFG_TEMP_LIMIT,
578 if (smb->hard_cold_temp_limit != SMB3XX_TEMP_USE_DEFAULT) {
579 val = smb->hard_cold_temp_limit;
586 ret = regmap_update_bits(smb->regmap, CFG_TEMP_LIMIT,
595 if (smb->hard_hot_temp_limit != SMB3XX_TEMP_USE_DEFAULT) {
596 val = smb->hard_hot_temp_limit;
601 ret = regmap_update_bits(smb->regmap, CFG_TEMP_LIMIT,
621 ret = regmap_update_bits(smb->regmap, CFG_THERM,
627 if (smb->suspend_on_hard_temp_limit) {
628 ret = regmap_update_bits(smb->regmap, CFG_SYSOK,
634 if (smb->soft_temp_limit_compensation !=
636 val = smb->soft_temp_limit_compensation & 0x3;
638 ret = regmap_update_bits(smb->regmap, CFG_THERM,
644 ret = regmap_update_bits(smb->regmap, CFG_THERM,
651 if (smb->charge_current_compensation) {
653 smb->charge_current_compensation);
657 ret = regmap_update_bits(smb->regmap, CFG_OTG,
669 * @smb: pointer to smb347 charger instance
676 static int smb347_set_writable(struct smb347_charger *smb, bool writable)
678 return regmap_update_bits(smb->regmap, CMD_A, CMD_A_ALLOW_WRITE,
682 static int smb347_hw_init(struct smb347_charger *smb)
687 ret = smb347_set_writable(smb, true);
695 ret = smb347_set_charge_current(smb);
699 ret = smb347_set_current_limits(smb);
703 ret = smb347_set_voltage_limits(smb);
707 ret = smb347_set_temp_limits(smb);
712 if (!smb->use_usb) {
713 ret = regmap_update_bits(smb->regmap, CMD_A,
724 ret = regmap_update_bits(smb->regmap, CFG_OTHER, CFG_OTHER_RID_MASK,
725 smb->use_usb_otg ? CFG_OTHER_RID_ENABLED_AUTO_OTG : 0);
730 switch (smb->enable_control) {
733 ret = regmap_set_bits(smb->regmap, CFG_PIN, CFG_PIN_EN_CTRL);
743 switch (smb->enable_control) {
755 ret = regmap_update_bits(smb->regmap, CFG_PIN, CFG_PIN_EN_CTRL_MASK,
761 ret = regmap_update_bits(smb->regmap, CFG_PIN, CFG_PIN_EN_APSD_IRQ, 0);
765 ret = smb347_update_ps_status(smb);
769 ret = smb347_start_stop_charging(smb);
772 smb347_set_writable(smb, false);
778 struct smb347_charger *smb = data;
786 ret = regmap_read(smb->regmap, STAT_C, &stat_c);
788 dev_warn(smb->dev, "reading STAT_C failed\n");
792 ret = regmap_read(smb->regmap, IRQSTAT_C, &irqstat_c);
794 dev_warn(smb->dev, "reading IRQSTAT_C failed\n");
798 ret = regmap_read(smb->regmap, IRQSTAT_D, &irqstat_d);
800 dev_warn(smb->dev, "reading IRQSTAT_D failed\n");
804 ret = regmap_read(smb->regmap, IRQSTAT_E, &irqstat_e);
806 dev_warn(smb->dev, "reading IRQSTAT_E failed\n");
815 dev_err(smb->dev, "charging stopped due to charger error\n");
816 if (smb->use_mains)
817 power_supply_changed(smb->mains);
818 if (smb->use_usb)
819 power_supply_changed(smb->usb);
830 if (smb->use_mains)
831 power_supply_changed(smb->mains);
832 if (smb->use_usb)
833 power_supply_changed(smb->usb);
835 dev_dbg(smb->dev, "going to HW maintenance mode\n");
844 dev_dbg(smb->dev, "total Charge Timeout INT received\n");
847 dev_warn(smb->dev, "charging stopped due to timeout\n");
848 if (smb->use_mains)
849 power_supply_changed(smb->mains);
850 if (smb->use_usb)
851 power_supply_changed(smb->usb);
860 if (smb347_update_ps_status(smb) > 0) {
861 smb347_start_stop_charging(smb);
862 if (smb->use_mains)
863 power_supply_changed(smb->mains);
864 if (smb->use_usb)
865 power_supply_changed(smb->usb);
873 static int smb347_irq_set(struct smb347_charger *smb, bool enable)
877 if (smb->irq_unsupported)
880 ret = smb347_set_writable(smb, true);
891 ret = regmap_update_bits(smb->regmap, CFG_FAULT_IRQ, 0xff,
896 ret = regmap_update_bits(smb->regmap, CFG_STATUS_IRQ, 0xff,
902 ret = regmap_update_bits(smb->regmap, CFG_PIN, CFG_PIN_EN_CHARGER_ERROR,
905 smb347_set_writable(smb, false);
909 static inline int smb347_irq_enable(struct smb347_charger *smb)
911 return smb347_irq_set(smb, true);
914 static inline int smb347_irq_disable(struct smb347_charger *smb)
916 return smb347_irq_set(smb, false);
919 static int smb347_irq_init(struct smb347_charger *smb,
924 ret = devm_request_threaded_irq(smb->dev, client->irq, NULL,
926 client->name, smb);
930 ret = smb347_set_writable(smb, true);
938 ret = regmap_update_bits(smb->regmap, CFG_STAT,
942 smb347_set_writable(smb, false);
951 static int get_const_charge_current(struct smb347_charger *smb)
953 unsigned int id = smb->id;
957 if (!smb347_is_ps_online(smb))
960 ret = regmap_read(smb->regmap, STAT_B, &v);
984 static int get_const_charge_voltage(struct smb347_charger *smb)
989 if (!smb347_is_ps_online(smb))
992 ret = regmap_read(smb->regmap, STAT_A, &v);
1005 static int smb347_get_charging_status(struct smb347_charger *smb,
1012 if (!smb->usb_online)
1015 if (!smb->mains_online)
1019 ret = regmap_read(smb->regmap, STAT_C, &val);
1060 struct smb347_charger *smb = power_supply_get_drvdata(psy);
1065 ret = smb347_get_charging_status(smb, psy);
1073 if (!smb->usb_online)
1076 if (!smb->mains_online)
1084 switch (smb347_charging_status(smb)) {
1099 val->intval = smb->usb_online;
1101 val->intval = smb->mains_online;
1105 ret = get_const_charge_voltage(smb);
1112 ret = get_const_charge_current(smb);
1129 struct smb347_charger *smb = power_supply_get_drvdata(psy);
1130 struct i2c_client *client = to_i2c_client(smb->dev);
1191 static void smb347_dt_parse_dev_info(struct smb347_charger *smb)
1193 struct device *dev = smb->dev;
1195 smb->soft_temp_limit_compensation =
1201 smb->soft_cold_temp_limit = SMB3XX_TEMP_USE_DEFAULT;
1202 smb->hard_cold_temp_limit = SMB3XX_TEMP_USE_DEFAULT;
1203 smb->soft_hot_temp_limit = SMB3XX_TEMP_USE_DEFAULT;
1204 smb->hard_hot_temp_limit = SMB3XX_TEMP_USE_DEFAULT;
1208 &smb->pre_to_fast_voltage);
1210 &smb->mains_current_limit);
1212 &smb->usb_hc_current_limit);
1216 &smb->chip_temp_threshold);
1218 &smb->soft_temp_limit_compensation);
1220 &smb->charge_current_compensation);
1223 smb->use_mains = device_property_read_bool(dev, "summit,enable-mains-charging");
1224 smb->use_usb = device_property_read_bool(dev, "summit,enable-usb-charging");
1225 smb->use_usb_otg = device_property_read_bool(dev, "summit,enable-otg-charging");
1229 &smb->enable_control);
1232 static int smb347_get_battery_info(struct smb347_charger *smb)
1238 if (smb->mains)
1239 supply = smb->mains;
1241 supply = smb->usb;
1250 smb->max_charge_current = info.constant_charge_current_max_ua;
1253 smb->max_charge_voltage = info.constant_charge_voltage_max_uv;
1256 smb->pre_charge_current = info.precharge_current_ua;
1259 smb->termination_current = info.charge_term_current_ua;
1262 smb->soft_cold_temp_limit = info.temp_alert_min;
1265 smb->soft_hot_temp_limit = info.temp_alert_max;
1268 smb->hard_cold_temp_limit = info.temp_min;
1271 smb->hard_hot_temp_limit = info.temp_max;
1274 if (smb->hard_cold_temp_limit != SMB3XX_TEMP_USE_DEFAULT ||
1275 smb->hard_hot_temp_limit != SMB3XX_TEMP_USE_DEFAULT)
1276 smb->suspend_on_hard_temp_limit = true;
1310 struct smb347_charger *smb;
1313 smb = devm_kzalloc(dev, sizeof(*smb), GFP_KERNEL);
1314 if (!smb)
1316 smb->dev = &client->dev;
1317 smb->id = id->driver_data;
1318 i2c_set_clientdata(client, smb);
1320 smb347_dt_parse_dev_info(smb);
1321 if (!smb->use_mains && !smb->use_usb)
1324 smb->regmap = devm_regmap_init_i2c(client, &smb347_regmap);
1325 if (IS_ERR(smb->regmap))
1326 return PTR_ERR(smb->regmap);
1328 mains_usb_cfg.drv_data = smb;
1330 if (smb->use_mains) {
1331 smb->mains = devm_power_supply_register(dev, &smb347_mains_desc,
1333 if (IS_ERR(smb->mains))
1334 return PTR_ERR(smb->mains);
1337 if (smb->use_usb) {
1338 smb->usb = devm_power_supply_register(dev, &smb347_usb_desc,
1340 if (IS_ERR(smb->usb))
1341 return PTR_ERR(smb->usb);
1344 ret = smb347_get_battery_info(smb);
1348 ret = smb347_hw_init(smb);
1357 ret = smb347_irq_init(smb, client);
1361 smb->irq_unsupported = true;
1363 smb347_irq_enable(smb);
1372 struct smb347_charger *smb = i2c_get_clientdata(client);
1374 smb347_irq_disable(smb);