Lines Matching refs:bdi

243 static int bq24190_read(struct bq24190_dev_info *bdi, u8 reg, u8 *data)
247 ret = i2c_smbus_read_byte_data(bdi->client, reg);
255 static int bq24190_write(struct bq24190_dev_info *bdi, u8 reg, u8 data)
257 return i2c_smbus_write_byte_data(bdi->client, reg, data);
260 static int bq24190_read_mask(struct bq24190_dev_info *bdi, u8 reg,
266 ret = bq24190_read(bdi, reg, &v);
277 static int bq24190_write_mask(struct bq24190_dev_info *bdi, u8 reg,
283 ret = bq24190_read(bdi, reg, &v);
290 return bq24190_write(bdi, reg, v);
293 static int bq24190_get_field_val(struct bq24190_dev_info *bdi,
301 ret = bq24190_read_mask(bdi, reg, mask, shift, &v);
311 static int bq24190_set_field_val(struct bq24190_dev_info *bdi,
320 return bq24190_write_mask(bdi, reg, mask, shift, idx);
441 struct bq24190_dev_info *bdi = power_supply_get_drvdata(psy);
451 ret = pm_runtime_resume_and_get(bdi->dev);
455 ret = bq24190_read_mask(bdi, info->reg, info->mask, info->shift, &v);
461 pm_runtime_mark_last_busy(bdi->dev);
462 pm_runtime_put_autosuspend(bdi->dev);
471 struct bq24190_dev_info *bdi = power_supply_get_drvdata(psy);
484 ret = pm_runtime_resume_and_get(bdi->dev);
488 ret = bq24190_write_mask(bdi, info->reg, info->mask, info->shift, v);
492 pm_runtime_mark_last_busy(bdi->dev);
493 pm_runtime_put_autosuspend(bdi->dev);
502 struct bq24190_dev_info *bdi = rdev_get_drvdata(dev);
505 ret = pm_runtime_resume_and_get(bdi->dev);
507 dev_warn(bdi->dev, "pm_runtime_get failed: %i\n", ret);
511 ret = bq24190_write_mask(bdi, BQ24190_REG_POC,
515 pm_runtime_mark_last_busy(bdi->dev);
516 pm_runtime_put_autosuspend(bdi->dev);
533 struct bq24190_dev_info *bdi = rdev_get_drvdata(dev);
537 ret = pm_runtime_resume_and_get(bdi->dev);
539 dev_warn(bdi->dev, "pm_runtime_get failed: %i\n", ret);
543 ret = bq24190_read_mask(bdi, BQ24190_REG_POC,
547 pm_runtime_mark_last_busy(bdi->dev);
548 pm_runtime_put_autosuspend(bdi->dev);
579 static int bq24190_register_vbus_regulator(struct bq24190_dev_info *bdi)
581 struct bq24190_platform_data *pdata = bdi->dev->platform_data;
586 cfg.dev = bdi->dev;
591 cfg.driver_data = bdi;
592 reg = devm_regulator_register(bdi->dev, &bq24190_vbus_desc, &cfg);
595 dev_err(bdi->dev, "Can't register regulator: %d\n", ret);
601 static int bq24190_register_vbus_regulator(struct bq24190_dev_info *bdi)
607 static int bq24190_set_config(struct bq24190_dev_info *bdi)
612 ret = bq24190_read(bdi, BQ24190_REG_CTTC, &v);
616 bdi->watchdog = ((v & BQ24190_REG_CTTC_WATCHDOG_MASK) >>
629 ret = bq24190_write(bdi, BQ24190_REG_CTTC, v);
633 if (bdi->sys_min) {
634 v = bdi->sys_min / 100 - 30; // manual section 9.5.1.2, table 9
635 ret = bq24190_write_mask(bdi, BQ24190_REG_POC,
643 if (bdi->iprechg) {
644 v = bdi->iprechg / 128 - 1; // manual section 9.5.1.4, table 11
645 ret = bq24190_write_mask(bdi, BQ24190_REG_PCTCC,
653 if (bdi->iterm) {
654 v = bdi->iterm / 128 - 1; // manual section 9.5.1.4, table 11
655 ret = bq24190_write_mask(bdi, BQ24190_REG_PCTCC,
666 static int bq24190_register_reset(struct bq24190_dev_info *bdi)
681 if (device_property_read_bool(bdi->dev, "disable-reset"))
685 ret = bq24190_write_mask(bdi, BQ24190_REG_POC,
694 ret = bq24190_read_mask(bdi, BQ24190_REG_POC,
712 static int bq24190_charger_get_charge_type(struct bq24190_dev_info *bdi,
718 ret = bq24190_read_mask(bdi, BQ24190_REG_POC,
729 ret = bq24190_read_mask(bdi, BQ24190_REG_CCC,
745 static int bq24190_charger_set_charge_type(struct bq24190_dev_info *bdi,
780 ret = bq24190_write_mask(bdi, BQ24190_REG_CCC,
787 ret = bq24190_write_mask(bdi, BQ24190_REG_CTTC,
795 return bq24190_write_mask(bdi, BQ24190_REG_POC,
800 static int bq24190_charger_get_health(struct bq24190_dev_info *bdi,
806 mutex_lock(&bdi->f_reg_lock);
807 v = bdi->f_reg;
808 mutex_unlock(&bdi->f_reg_lock);
865 static int bq24190_charger_get_online(struct bq24190_dev_info *bdi,
871 ret = bq24190_read_mask(bdi, BQ24190_REG_SS,
877 ret = bq24190_read_mask(bdi, BQ24190_REG_MOC,
888 static int bq24190_battery_set_online(struct bq24190_dev_info *bdi,
890 static int bq24190_battery_get_status(struct bq24190_dev_info *bdi,
892 static int bq24190_battery_get_temp_alert_max(struct bq24190_dev_info *bdi,
894 static int bq24190_battery_set_temp_alert_max(struct bq24190_dev_info *bdi,
897 static int bq24190_charger_set_online(struct bq24190_dev_info *bdi,
900 return bq24190_battery_set_online(bdi, val);
903 static int bq24190_charger_get_status(struct bq24190_dev_info *bdi,
906 return bq24190_battery_get_status(bdi, val);
909 static int bq24190_charger_get_temp_alert_max(struct bq24190_dev_info *bdi,
912 return bq24190_battery_get_temp_alert_max(bdi, val);
915 static int bq24190_charger_set_temp_alert_max(struct bq24190_dev_info *bdi,
918 return bq24190_battery_set_temp_alert_max(bdi, val);
921 static int bq24190_charger_get_precharge(struct bq24190_dev_info *bdi,
927 ret = bq24190_read_mask(bdi, BQ24190_REG_PCTCC,
937 static int bq24190_charger_get_charge_term(struct bq24190_dev_info *bdi,
943 ret = bq24190_read_mask(bdi, BQ24190_REG_PCTCC,
953 static int bq24190_charger_get_current(struct bq24190_dev_info *bdi,
959 ret = bq24190_get_field_val(bdi, BQ24190_REG_CCC,
966 ret = bq24190_read_mask(bdi, BQ24190_REG_CCC,
980 static int bq24190_charger_get_current_max(struct bq24190_dev_info *bdi,
989 static int bq24190_charger_set_current(struct bq24190_dev_info *bdi,
995 ret = bq24190_read_mask(bdi, BQ24190_REG_CCC,
1005 return bq24190_set_field_val(bdi, BQ24190_REG_CCC,
1011 static int bq24190_charger_get_voltage(struct bq24190_dev_info *bdi,
1016 ret = bq24190_get_field_val(bdi, BQ24190_REG_CVC,
1027 static int bq24190_charger_get_voltage_max(struct bq24190_dev_info *bdi,
1036 static int bq24190_charger_set_voltage(struct bq24190_dev_info *bdi,
1039 return bq24190_set_field_val(bdi, BQ24190_REG_CVC,
1045 static int bq24190_charger_get_iinlimit(struct bq24190_dev_info *bdi,
1050 ret = bq24190_get_field_val(bdi, BQ24190_REG_ISC,
1062 static int bq24190_charger_set_iinlimit(struct bq24190_dev_info *bdi,
1065 return bq24190_set_field_val(bdi, BQ24190_REG_ISC,
1075 struct bq24190_dev_info *bdi = power_supply_get_drvdata(psy);
1078 dev_dbg(bdi->dev, "prop: %d\n", psp);
1080 ret = pm_runtime_resume_and_get(bdi->dev);
1086 ret = bq24190_charger_get_charge_type(bdi, val);
1089 ret = bq24190_charger_get_health(bdi, val);
1092 ret = bq24190_charger_get_online(bdi, val);
1095 ret = bq24190_charger_get_status(bdi, val);
1098 ret = bq24190_charger_get_temp_alert_max(bdi, val);
1101 ret = bq24190_charger_get_precharge(bdi, val);
1104 ret = bq24190_charger_get_charge_term(bdi, val);
1107 ret = bq24190_charger_get_current(bdi, val);
1110 ret = bq24190_charger_get_current_max(bdi, val);
1113 ret = bq24190_charger_get_voltage(bdi, val);
1116 ret = bq24190_charger_get_voltage_max(bdi, val);
1119 ret = bq24190_charger_get_iinlimit(bdi, val);
1126 val->strval = bdi->model_name;
1137 pm_runtime_mark_last_busy(bdi->dev);
1138 pm_runtime_put_autosuspend(bdi->dev);
1147 struct bq24190_dev_info *bdi = power_supply_get_drvdata(psy);
1150 dev_dbg(bdi->dev, "prop: %d\n", psp);
1152 ret = pm_runtime_resume_and_get(bdi->dev);
1158 ret = bq24190_charger_set_online(bdi, val);
1161 ret = bq24190_charger_set_temp_alert_max(bdi, val);
1164 ret = bq24190_charger_set_charge_type(bdi, val);
1167 ret = bq24190_charger_set_current(bdi, val);
1170 ret = bq24190_charger_set_voltage(bdi, val);
1173 ret = bq24190_charger_set_iinlimit(bdi, val);
1179 pm_runtime_mark_last_busy(bdi->dev);
1180 pm_runtime_put_autosuspend(bdi->dev);
1203 struct bq24190_dev_info *bdi =
1209 ret = power_supply_get_property_from_supplier(bdi->charger,
1215 bq24190_charger_set_property(bdi->charger,
1218 power_supply_changed(bdi->charger);
1224 struct bq24190_dev_info *bdi = power_supply_get_drvdata(psy);
1234 queue_delayed_work(system_wq, &bdi->input_current_limit_work,
1273 static int bq24190_battery_get_status(struct bq24190_dev_info *bdi,
1279 mutex_lock(&bdi->f_reg_lock);
1280 chrg_fault = bdi->f_reg;
1281 mutex_unlock(&bdi->f_reg_lock);
1286 ret = bq24190_read(bdi, BQ24190_REG_SS, &ss_reg);
1325 static int bq24190_battery_get_health(struct bq24190_dev_info *bdi,
1331 mutex_lock(&bdi->f_reg_lock);
1332 v = bdi->f_reg;
1333 mutex_unlock(&bdi->f_reg_lock);
1364 static int bq24190_battery_get_online(struct bq24190_dev_info *bdi,
1370 ret = bq24190_read_mask(bdi, BQ24190_REG_MOC,
1380 static int bq24190_battery_set_online(struct bq24190_dev_info *bdi,
1383 return bq24190_write_mask(bdi, BQ24190_REG_MOC,
1388 static int bq24190_battery_get_temp_alert_max(struct bq24190_dev_info *bdi,
1393 ret = bq24190_get_field_val(bdi, BQ24190_REG_ICTRC,
1405 static int bq24190_battery_set_temp_alert_max(struct bq24190_dev_info *bdi,
1408 return bq24190_set_field_val(bdi, BQ24190_REG_ICTRC,
1418 struct bq24190_dev_info *bdi = power_supply_get_drvdata(psy);
1421 dev_warn(bdi->dev, "warning: /sys/class/power_supply/bq24190-battery is deprecated\n");
1422 dev_dbg(bdi->dev, "prop: %d\n", psp);
1424 ret = pm_runtime_resume_and_get(bdi->dev);
1430 ret = bq24190_battery_get_status(bdi, val);
1433 ret = bq24190_battery_get_health(bdi, val);
1436 ret = bq24190_battery_get_online(bdi, val);
1444 ret = bq24190_battery_get_temp_alert_max(bdi, val);
1454 pm_runtime_mark_last_busy(bdi->dev);
1455 pm_runtime_put_autosuspend(bdi->dev);
1464 struct bq24190_dev_info *bdi = power_supply_get_drvdata(psy);
1467 dev_warn(bdi->dev, "warning: /sys/class/power_supply/bq24190-battery is deprecated\n");
1468 dev_dbg(bdi->dev, "prop: %d\n", psp);
1470 ret = pm_runtime_resume_and_get(bdi->dev);
1476 ret = bq24190_battery_set_online(bdi, val);
1479 ret = bq24190_battery_set_temp_alert_max(bdi, val);
1485 pm_runtime_mark_last_busy(bdi->dev);
1486 pm_runtime_put_autosuspend(bdi->dev);
1527 static int bq24190_configure_usb_otg(struct bq24190_dev_info *bdi, u8 ss_reg)
1533 ret = extcon_set_state_sync(bdi->edev, EXTCON_USB, otg_enabled);
1535 dev_err(bdi->dev, "Can't set extcon state to %d: %d\n",
1541 static void bq24190_check_status(struct bq24190_dev_info *bdi)
1550 ret = bq24190_read(bdi, BQ24190_REG_SS, &ss_reg);
1552 dev_err(bdi->dev, "Can't read SS reg: %d\n", ret);
1558 ret = bq24190_read(bdi, BQ24190_REG_F, &f_reg);
1560 dev_err(bdi->dev, "Can't read F reg: %d\n", ret);
1570 if (f_reg != bdi->f_reg) {
1571 dev_warn(bdi->dev,
1578 mutex_lock(&bdi->f_reg_lock);
1579 if ((bdi->f_reg & battery_mask_f) != (f_reg & battery_mask_f))
1581 if ((bdi->f_reg & ~battery_mask_f) != (f_reg & ~battery_mask_f))
1583 bdi->f_reg = f_reg;
1584 mutex_unlock(&bdi->f_reg_lock);
1587 if (ss_reg != bdi->ss_reg) {
1592 if ((bdi->ss_reg & BQ24190_REG_SS_PG_STAT_MASK) &&
1594 ret = bq24190_write_mask(bdi, BQ24190_REG_ISC,
1599 dev_err(bdi->dev, "Can't access ISC reg: %d\n",
1603 if ((bdi->ss_reg & battery_mask_ss) != (ss_reg & battery_mask_ss))
1605 if ((bdi->ss_reg & ~battery_mask_ss) != (ss_reg & ~battery_mask_ss))
1607 bdi->ss_reg = ss_reg;
1611 power_supply_changed(bdi->charger);
1612 bq24190_configure_usb_otg(bdi, ss_reg);
1614 if (alert_battery && bdi->battery)
1615 power_supply_changed(bdi->battery);
1617 dev_dbg(bdi->dev, "ss_reg: 0x%02x, f_reg: 0x%02x\n", ss_reg, f_reg);
1622 struct bq24190_dev_info *bdi = data;
1625 bdi->irq_event = true;
1626 error = pm_runtime_resume_and_get(bdi->dev);
1628 dev_warn(bdi->dev, "pm_runtime_get failed: %i\n", error);
1631 bq24190_check_status(bdi);
1632 pm_runtime_mark_last_busy(bdi->dev);
1633 pm_runtime_put_autosuspend(bdi->dev);
1634 bdi->irq_event = false;
1639 static int bq24190_hw_init(struct bq24190_dev_info *bdi)
1645 ret = bq24190_read_mask(bdi, BQ24190_REG_VPRS,
1658 dev_err(bdi->dev, "Error unknown model: 0x%02x\n", v);
1662 ret = bq24190_register_reset(bdi);
1666 ret = bq24190_set_config(bdi);
1670 return bq24190_read(bdi, BQ24190_REG_SS, &bdi->ss_reg);
1673 static int bq24190_get_config(struct bq24190_dev_info *bdi)
1679 if (device_property_read_u32(bdi->dev, s, &v) == 0) {
1683 bdi->sys_min = v;
1685 dev_warn(bdi->dev, "invalid value for %s: %u\n", s, v);
1688 if (bdi->dev->of_node &&
1689 !power_supply_get_battery_info(bdi->charger, &info)) {
1693 bdi->iprechg = v;
1695 dev_warn(bdi->dev, "invalid value for battery:precharge-current-microamp: %d\n",
1701 bdi->iterm = v;
1703 dev_warn(bdi->dev, "invalid value for battery:charge-term-current-microamp: %d\n",
1716 struct bq24190_dev_info *bdi;
1724 bdi = devm_kzalloc(dev, sizeof(*bdi), GFP_KERNEL);
1725 if (!bdi) {
1726 dev_err(dev, "Can't alloc bdi struct\n");
1730 bdi->client = client;
1731 bdi->dev = dev;
1732 strncpy(bdi->model_name, id->name, I2C_NAME_SIZE);
1733 mutex_init(&bdi->f_reg_lock);
1734 bdi->f_reg = 0;
1735 bdi->ss_reg = BQ24190_REG_SS_VBUS_STAT_MASK; /* impossible state */
1736 INIT_DELAYED_WORK(&bdi->input_current_limit_work,
1739 i2c_set_clientdata(client, bdi);
1746 bdi->edev = devm_extcon_dev_allocate(dev, bq24190_usb_extcon_cable);
1747 if (IS_ERR(bdi->edev))
1748 return PTR_ERR(bdi->edev);
1750 ret = devm_extcon_dev_register(dev, bdi->edev);
1768 charger_cfg.drv_data = bdi;
1772 bdi->charger = power_supply_register(dev, &bq24190_charger_desc,
1774 if (IS_ERR(bdi->charger)) {
1776 ret = PTR_ERR(bdi->charger);
1783 battery_cfg.drv_data = bdi;
1784 bdi->battery = power_supply_register(dev, &bq24190_battery_desc,
1786 if (IS_ERR(bdi->battery)) {
1788 ret = PTR_ERR(bdi->battery);
1793 ret = bq24190_get_config(bdi);
1799 ret = bq24190_hw_init(bdi);
1805 ret = bq24190_configure_usb_otg(bdi, bdi->ss_reg);
1809 bdi->initialized = true;
1814 "bq24190-charger", bdi);
1820 ret = bq24190_register_vbus_regulator(bdi);
1832 if (!IS_ERR_OR_NULL(bdi->battery))
1833 power_supply_unregister(bdi->battery);
1834 power_supply_unregister(bdi->charger);
1845 struct bq24190_dev_info *bdi = i2c_get_clientdata(client);
1848 cancel_delayed_work_sync(&bdi->input_current_limit_work);
1849 error = pm_runtime_resume_and_get(bdi->dev);
1851 dev_warn(bdi->dev, "pm_runtime_get failed: %i\n", error);
1853 bq24190_register_reset(bdi);
1854 if (bdi->battery)
1855 power_supply_unregister(bdi->battery);
1856 power_supply_unregister(bdi->charger);
1858 pm_runtime_put_sync(bdi->dev);
1859 pm_runtime_dont_use_autosuspend(bdi->dev);
1860 pm_runtime_disable(bdi->dev);
1868 struct bq24190_dev_info *bdi = i2c_get_clientdata(client);
1870 if (!bdi->initialized)
1873 dev_dbg(bdi->dev, "%s\n", __func__);
1881 struct bq24190_dev_info *bdi = i2c_get_clientdata(client);
1883 if (!bdi->initialized)
1886 if (!bdi->irq_event) {
1887 dev_dbg(bdi->dev, "checking events on possible wakeirq\n");
1888 bq24190_check_status(bdi);
1897 struct bq24190_dev_info *bdi = i2c_get_clientdata(client);
1900 error = pm_runtime_resume_and_get(bdi->dev);
1902 dev_warn(bdi->dev, "pm_runtime_get failed: %i\n", error);
1904 bq24190_register_reset(bdi);
1907 pm_runtime_mark_last_busy(bdi->dev);
1908 pm_runtime_put_autosuspend(bdi->dev);
1917 struct bq24190_dev_info *bdi = i2c_get_clientdata(client);
1920 bdi->f_reg = 0;
1921 bdi->ss_reg = BQ24190_REG_SS_VBUS_STAT_MASK; /* impossible state */
1923 error = pm_runtime_resume_and_get(bdi->dev);
1925 dev_warn(bdi->dev, "pm_runtime_get failed: %i\n", error);
1927 bq24190_register_reset(bdi);
1928 bq24190_set_config(bdi);
1929 bq24190_read(bdi, BQ24190_REG_SS, &bdi->ss_reg);
1932 pm_runtime_mark_last_busy(bdi->dev);
1933 pm_runtime_put_autosuspend(bdi->dev);
1937 power_supply_changed(bdi->charger);
1938 if (bdi->battery)
1939 power_supply_changed(bdi->battery);