Lines Matching refs:bdi
226 static int bq24190_read(struct bq24190_dev_info *bdi, u8 reg, u8 *data) in bq24190_read() argument
230 ret = i2c_smbus_read_byte_data(bdi->client, reg); in bq24190_read()
238 static int bq24190_write(struct bq24190_dev_info *bdi, u8 reg, u8 data) in bq24190_write() argument
240 return i2c_smbus_write_byte_data(bdi->client, reg, data); in bq24190_write()
243 static int bq24190_read_mask(struct bq24190_dev_info *bdi, u8 reg, in bq24190_read_mask() argument
249 ret = bq24190_read(bdi, reg, &v); in bq24190_read_mask()
260 static int bq24190_write_mask(struct bq24190_dev_info *bdi, u8 reg, in bq24190_write_mask() argument
266 ret = bq24190_read(bdi, reg, &v); in bq24190_write_mask()
273 return bq24190_write(bdi, reg, v); in bq24190_write_mask()
276 static int bq24190_get_field_val(struct bq24190_dev_info *bdi, in bq24190_get_field_val() argument
284 ret = bq24190_read_mask(bdi, reg, mask, shift, &v); in bq24190_get_field_val()
294 static int bq24190_set_field_val(struct bq24190_dev_info *bdi, in bq24190_set_field_val() argument
303 return bq24190_write_mask(bdi, reg, mask, shift, idx); in bq24190_set_field_val()
426 struct bq24190_dev_info *bdi = power_supply_get_drvdata(psy); in bq24190_sysfs_show() local
435 ret = bq24190_read_mask(bdi, info->reg, info->mask, info->shift, &v); in bq24190_sysfs_show()
446 struct bq24190_dev_info *bdi = power_supply_get_drvdata(psy); in bq24190_sysfs_store() local
459 ret = bq24190_write_mask(bdi, info->reg, info->mask, info->shift, v); in bq24190_sysfs_store()
466 static int bq24190_sysfs_create_group(struct bq24190_dev_info *bdi) in bq24190_sysfs_create_group() argument
470 return sysfs_create_group(&bdi->charger->dev.kobj, in bq24190_sysfs_create_group()
474 static void bq24190_sysfs_remove_group(struct bq24190_dev_info *bdi) in bq24190_sysfs_remove_group() argument
476 sysfs_remove_group(&bdi->charger->dev.kobj, &bq24190_sysfs_attr_group); in bq24190_sysfs_remove_group()
479 static int bq24190_sysfs_create_group(struct bq24190_dev_info *bdi) in bq24190_sysfs_create_group() argument
484 static inline void bq24190_sysfs_remove_group(struct bq24190_dev_info *bdi) {} in bq24190_sysfs_remove_group() argument
495 static int bq24190_set_mode_host(struct bq24190_dev_info *bdi) in bq24190_set_mode_host() argument
500 ret = bq24190_read(bdi, BQ24190_REG_CTTC, &v); in bq24190_set_mode_host()
504 bdi->watchdog = ((v & BQ24190_REG_CTTC_WATCHDOG_MASK) >> in bq24190_set_mode_host()
508 return bq24190_write(bdi, BQ24190_REG_CTTC, v); in bq24190_set_mode_host()
511 static int bq24190_register_reset(struct bq24190_dev_info *bdi) in bq24190_register_reset() argument
517 ret = bq24190_write_mask(bdi, BQ24190_REG_POC, in bq24190_register_reset()
526 ret = bq24190_read_mask(bdi, BQ24190_REG_POC, in bq24190_register_reset()
547 static int bq24190_charger_get_charge_type(struct bq24190_dev_info *bdi, in bq24190_charger_get_charge_type() argument
553 ret = bq24190_read_mask(bdi, BQ24190_REG_POC, in bq24190_charger_get_charge_type()
564 ret = bq24190_read_mask(bdi, BQ24190_REG_CCC, in bq24190_charger_get_charge_type()
580 static int bq24190_charger_set_charge_type(struct bq24190_dev_info *bdi, in bq24190_charger_set_charge_type() argument
615 ret = bq24190_write_mask(bdi, BQ24190_REG_CCC, in bq24190_charger_set_charge_type()
622 ret = bq24190_write_mask(bdi, BQ24190_REG_CTTC, in bq24190_charger_set_charge_type()
630 return bq24190_write_mask(bdi, BQ24190_REG_POC, in bq24190_charger_set_charge_type()
635 static int bq24190_charger_get_health(struct bq24190_dev_info *bdi, in bq24190_charger_get_health() argument
641 mutex_lock(&bdi->f_reg_lock); in bq24190_charger_get_health()
643 if (bdi->charger_health_valid) { in bq24190_charger_get_health()
644 v = bdi->f_reg; in bq24190_charger_get_health()
645 bdi->charger_health_valid = false; in bq24190_charger_get_health()
646 mutex_unlock(&bdi->f_reg_lock); in bq24190_charger_get_health()
648 mutex_unlock(&bdi->f_reg_lock); in bq24190_charger_get_health()
650 ret = bq24190_read(bdi, BQ24190_REG_F, &v); in bq24190_charger_get_health()
697 static int bq24190_charger_get_online(struct bq24190_dev_info *bdi, in bq24190_charger_get_online() argument
703 ret = bq24190_read_mask(bdi, BQ24190_REG_SS, in bq24190_charger_get_online()
713 static int bq24190_charger_get_current(struct bq24190_dev_info *bdi, in bq24190_charger_get_current() argument
719 ret = bq24190_get_field_val(bdi, BQ24190_REG_CCC, in bq24190_charger_get_current()
726 ret = bq24190_read_mask(bdi, BQ24190_REG_CCC, in bq24190_charger_get_current()
740 static int bq24190_charger_get_current_max(struct bq24190_dev_info *bdi, in bq24190_charger_get_current_max() argument
749 static int bq24190_charger_set_current(struct bq24190_dev_info *bdi, in bq24190_charger_set_current() argument
755 ret = bq24190_read_mask(bdi, BQ24190_REG_CCC, in bq24190_charger_set_current()
765 return bq24190_set_field_val(bdi, BQ24190_REG_CCC, in bq24190_charger_set_current()
771 static int bq24190_charger_get_voltage(struct bq24190_dev_info *bdi, in bq24190_charger_get_voltage() argument
776 ret = bq24190_get_field_val(bdi, BQ24190_REG_CVC, in bq24190_charger_get_voltage()
787 static int bq24190_charger_get_voltage_max(struct bq24190_dev_info *bdi, in bq24190_charger_get_voltage_max() argument
796 static int bq24190_charger_set_voltage(struct bq24190_dev_info *bdi, in bq24190_charger_set_voltage() argument
799 return bq24190_set_field_val(bdi, BQ24190_REG_CVC, in bq24190_charger_set_voltage()
808 struct bq24190_dev_info *bdi = power_supply_get_drvdata(psy); in bq24190_charger_get_property() local
811 dev_dbg(bdi->dev, "prop: %d\n", psp); in bq24190_charger_get_property()
813 pm_runtime_get_sync(bdi->dev); in bq24190_charger_get_property()
817 ret = bq24190_charger_get_charge_type(bdi, val); in bq24190_charger_get_property()
820 ret = bq24190_charger_get_health(bdi, val); in bq24190_charger_get_property()
823 ret = bq24190_charger_get_online(bdi, val); in bq24190_charger_get_property()
826 ret = bq24190_charger_get_current(bdi, val); in bq24190_charger_get_property()
829 ret = bq24190_charger_get_current_max(bdi, val); in bq24190_charger_get_property()
832 ret = bq24190_charger_get_voltage(bdi, val); in bq24190_charger_get_property()
835 ret = bq24190_charger_get_voltage_max(bdi, val); in bq24190_charger_get_property()
842 val->strval = bdi->model_name; in bq24190_charger_get_property()
853 pm_runtime_put_sync(bdi->dev); in bq24190_charger_get_property()
861 struct bq24190_dev_info *bdi = power_supply_get_drvdata(psy); in bq24190_charger_set_property() local
864 dev_dbg(bdi->dev, "prop: %d\n", psp); in bq24190_charger_set_property()
866 pm_runtime_get_sync(bdi->dev); in bq24190_charger_set_property()
870 ret = bq24190_charger_set_charge_type(bdi, val); in bq24190_charger_set_property()
873 ret = bq24190_charger_set_current(bdi, val); in bq24190_charger_set_property()
876 ret = bq24190_charger_set_voltage(bdi, val); in bq24190_charger_set_property()
882 pm_runtime_put_sync(bdi->dev); in bq24190_charger_set_property()
933 static int bq24190_battery_get_status(struct bq24190_dev_info *bdi, in bq24190_battery_get_status() argument
939 mutex_lock(&bdi->f_reg_lock); in bq24190_battery_get_status()
941 if (bdi->battery_status_valid) { in bq24190_battery_get_status()
942 chrg_fault = bdi->f_reg; in bq24190_battery_get_status()
943 bdi->battery_status_valid = false; in bq24190_battery_get_status()
944 mutex_unlock(&bdi->f_reg_lock); in bq24190_battery_get_status()
946 mutex_unlock(&bdi->f_reg_lock); in bq24190_battery_get_status()
948 ret = bq24190_read(bdi, BQ24190_REG_F, &chrg_fault); in bq24190_battery_get_status()
956 ret = bq24190_read(bdi, BQ24190_REG_SS, &ss_reg); in bq24190_battery_get_status()
995 static int bq24190_battery_get_health(struct bq24190_dev_info *bdi, in bq24190_battery_get_health() argument
1001 mutex_lock(&bdi->f_reg_lock); in bq24190_battery_get_health()
1003 if (bdi->battery_health_valid) { in bq24190_battery_get_health()
1004 v = bdi->f_reg; in bq24190_battery_get_health()
1005 bdi->battery_health_valid = false; in bq24190_battery_get_health()
1006 mutex_unlock(&bdi->f_reg_lock); in bq24190_battery_get_health()
1008 mutex_unlock(&bdi->f_reg_lock); in bq24190_battery_get_health()
1010 ret = bq24190_read(bdi, BQ24190_REG_F, &v); in bq24190_battery_get_health()
1044 static int bq24190_battery_get_online(struct bq24190_dev_info *bdi, in bq24190_battery_get_online() argument
1050 ret = bq24190_read_mask(bdi, BQ24190_REG_MOC, in bq24190_battery_get_online()
1060 static int bq24190_battery_set_online(struct bq24190_dev_info *bdi, in bq24190_battery_set_online() argument
1063 return bq24190_write_mask(bdi, BQ24190_REG_MOC, in bq24190_battery_set_online()
1068 static int bq24190_battery_get_temp_alert_max(struct bq24190_dev_info *bdi, in bq24190_battery_get_temp_alert_max() argument
1073 ret = bq24190_get_field_val(bdi, BQ24190_REG_ICTRC, in bq24190_battery_get_temp_alert_max()
1085 static int bq24190_battery_set_temp_alert_max(struct bq24190_dev_info *bdi, in bq24190_battery_set_temp_alert_max() argument
1088 return bq24190_set_field_val(bdi, BQ24190_REG_ICTRC, in bq24190_battery_set_temp_alert_max()
1098 struct bq24190_dev_info *bdi = power_supply_get_drvdata(psy); in bq24190_battery_get_property() local
1101 dev_dbg(bdi->dev, "prop: %d\n", psp); in bq24190_battery_get_property()
1103 pm_runtime_get_sync(bdi->dev); in bq24190_battery_get_property()
1107 ret = bq24190_battery_get_status(bdi, val); in bq24190_battery_get_property()
1110 ret = bq24190_battery_get_health(bdi, val); in bq24190_battery_get_property()
1113 ret = bq24190_battery_get_online(bdi, val); in bq24190_battery_get_property()
1121 ret = bq24190_battery_get_temp_alert_max(bdi, val); in bq24190_battery_get_property()
1131 pm_runtime_put_sync(bdi->dev); in bq24190_battery_get_property()
1139 struct bq24190_dev_info *bdi = power_supply_get_drvdata(psy); in bq24190_battery_set_property() local
1142 dev_dbg(bdi->dev, "prop: %d\n", psp); in bq24190_battery_set_property()
1144 pm_runtime_put_sync(bdi->dev); in bq24190_battery_set_property()
1148 ret = bq24190_battery_set_online(bdi, val); in bq24190_battery_set_property()
1151 ret = bq24190_battery_set_temp_alert_max(bdi, val); in bq24190_battery_set_property()
1157 pm_runtime_put_sync(bdi->dev); in bq24190_battery_set_property()
1199 struct bq24190_dev_info *bdi = data; in bq24190_irq_handler_thread() local
1204 pm_runtime_get_sync(bdi->dev); in bq24190_irq_handler_thread()
1206 ret = bq24190_read(bdi, BQ24190_REG_SS, &ss_reg); in bq24190_irq_handler_thread()
1208 dev_err(bdi->dev, "Can't read SS reg: %d\n", ret); in bq24190_irq_handler_thread()
1212 if (ss_reg != bdi->ss_reg) { in bq24190_irq_handler_thread()
1217 if ((bdi->ss_reg & BQ24190_REG_SS_PG_STAT_MASK) && in bq24190_irq_handler_thread()
1219 ret = bq24190_write_mask(bdi, BQ24190_REG_ISC, in bq24190_irq_handler_thread()
1224 dev_err(bdi->dev, "Can't access ISC reg: %d\n", in bq24190_irq_handler_thread()
1228 bdi->ss_reg = ss_reg; in bq24190_irq_handler_thread()
1232 mutex_lock(&bdi->f_reg_lock); in bq24190_irq_handler_thread()
1234 ret = bq24190_read(bdi, BQ24190_REG_F, &f_reg); in bq24190_irq_handler_thread()
1236 mutex_unlock(&bdi->f_reg_lock); in bq24190_irq_handler_thread()
1237 dev_err(bdi->dev, "Can't read F reg: %d\n", ret); in bq24190_irq_handler_thread()
1241 if (f_reg != bdi->f_reg) { in bq24190_irq_handler_thread()
1242 bdi->f_reg = f_reg; in bq24190_irq_handler_thread()
1243 bdi->charger_health_valid = true; in bq24190_irq_handler_thread()
1244 bdi->battery_health_valid = true; in bq24190_irq_handler_thread()
1245 bdi->battery_status_valid = true; in bq24190_irq_handler_thread()
1250 mutex_unlock(&bdi->f_reg_lock); in bq24190_irq_handler_thread()
1262 if (!bdi->first_time) { in bq24190_irq_handler_thread()
1263 power_supply_changed(bdi->charger); in bq24190_irq_handler_thread()
1264 power_supply_changed(bdi->battery); in bq24190_irq_handler_thread()
1266 bdi->first_time = false; in bq24190_irq_handler_thread()
1271 pm_runtime_put_sync(bdi->dev); in bq24190_irq_handler_thread()
1273 dev_dbg(bdi->dev, "ss_reg: 0x%02x, f_reg: 0x%02x\n", ss_reg, f_reg); in bq24190_irq_handler_thread()
1278 static int bq24190_hw_init(struct bq24190_dev_info *bdi) in bq24190_hw_init() argument
1283 pm_runtime_get_sync(bdi->dev); in bq24190_hw_init()
1286 ret = bq24190_read_mask(bdi, BQ24190_REG_VPRS, in bq24190_hw_init()
1293 if (v != bdi->model) { in bq24190_hw_init()
1298 ret = bq24190_register_reset(bdi); in bq24190_hw_init()
1302 ret = bq24190_set_mode_host(bdi); in bq24190_hw_init()
1304 pm_runtime_put_sync(bdi->dev); in bq24190_hw_init()
1309 static int bq24190_setup_dt(struct bq24190_dev_info *bdi) in bq24190_setup_dt() argument
1311 bdi->irq = irq_of_parse_and_map(bdi->dev->of_node, 0); in bq24190_setup_dt()
1312 if (bdi->irq <= 0) in bq24190_setup_dt()
1318 static int bq24190_setup_dt(struct bq24190_dev_info *bdi) in bq24190_setup_dt() argument
1324 static int bq24190_setup_pdata(struct bq24190_dev_info *bdi, in bq24190_setup_pdata() argument
1332 ret = gpio_request(pdata->gpio_int, dev_name(bdi->dev)); in bq24190_setup_pdata()
1340 bdi->irq = gpio_to_irq(pdata->gpio_int); in bq24190_setup_pdata()
1341 if (!bdi->irq) in bq24190_setup_pdata()
1344 bdi->gpio_int = pdata->gpio_int; in bq24190_setup_pdata()
1359 struct bq24190_dev_info *bdi; in bq24190_probe() local
1367 bdi = devm_kzalloc(dev, sizeof(*bdi), GFP_KERNEL); in bq24190_probe()
1368 if (!bdi) { in bq24190_probe()
1373 bdi->client = client; in bq24190_probe()
1374 bdi->dev = dev; in bq24190_probe()
1375 bdi->model = id->driver_data; in bq24190_probe()
1376 strncpy(bdi->model_name, id->name, I2C_NAME_SIZE); in bq24190_probe()
1377 mutex_init(&bdi->f_reg_lock); in bq24190_probe()
1378 bdi->first_time = true; in bq24190_probe()
1379 bdi->charger_health_valid = false; in bq24190_probe()
1380 bdi->battery_health_valid = false; in bq24190_probe()
1381 bdi->battery_status_valid = false; in bq24190_probe()
1383 i2c_set_clientdata(client, bdi); in bq24190_probe()
1386 ret = bq24190_setup_dt(bdi); in bq24190_probe()
1388 ret = bq24190_setup_pdata(bdi, pdata); in bq24190_probe()
1395 ret = devm_request_threaded_irq(dev, bdi->irq, NULL, in bq24190_probe()
1398 "bq24190-charger", bdi); in bq24190_probe()
1407 ret = bq24190_hw_init(bdi); in bq24190_probe()
1413 charger_cfg.drv_data = bdi; in bq24190_probe()
1416 bdi->charger = power_supply_register(dev, &bq24190_charger_desc, in bq24190_probe()
1418 if (IS_ERR(bdi->charger)) { in bq24190_probe()
1420 ret = PTR_ERR(bdi->charger); in bq24190_probe()
1424 battery_cfg.drv_data = bdi; in bq24190_probe()
1425 bdi->battery = power_supply_register(dev, &bq24190_battery_desc, in bq24190_probe()
1427 if (IS_ERR(bdi->battery)) { in bq24190_probe()
1429 ret = PTR_ERR(bdi->battery); in bq24190_probe()
1433 ret = bq24190_sysfs_create_group(bdi); in bq24190_probe()
1442 power_supply_unregister(bdi->battery); in bq24190_probe()
1444 power_supply_unregister(bdi->charger); in bq24190_probe()
1448 if (bdi->gpio_int) in bq24190_probe()
1449 gpio_free(bdi->gpio_int); in bq24190_probe()
1456 struct bq24190_dev_info *bdi = i2c_get_clientdata(client); in bq24190_remove() local
1458 pm_runtime_get_sync(bdi->dev); in bq24190_remove()
1459 bq24190_register_reset(bdi); in bq24190_remove()
1460 pm_runtime_put_sync(bdi->dev); in bq24190_remove()
1462 bq24190_sysfs_remove_group(bdi); in bq24190_remove()
1463 power_supply_unregister(bdi->battery); in bq24190_remove()
1464 power_supply_unregister(bdi->charger); in bq24190_remove()
1465 pm_runtime_disable(bdi->dev); in bq24190_remove()
1467 if (bdi->gpio_int) in bq24190_remove()
1468 gpio_free(bdi->gpio_int); in bq24190_remove()
1477 struct bq24190_dev_info *bdi = i2c_get_clientdata(client); in bq24190_pm_suspend() local
1479 pm_runtime_get_sync(bdi->dev); in bq24190_pm_suspend()
1480 bq24190_register_reset(bdi); in bq24190_pm_suspend()
1481 pm_runtime_put_sync(bdi->dev); in bq24190_pm_suspend()
1489 struct bq24190_dev_info *bdi = i2c_get_clientdata(client); in bq24190_pm_resume() local
1491 bdi->charger_health_valid = false; in bq24190_pm_resume()
1492 bdi->battery_health_valid = false; in bq24190_pm_resume()
1493 bdi->battery_status_valid = false; in bq24190_pm_resume()
1495 pm_runtime_get_sync(bdi->dev); in bq24190_pm_resume()
1496 bq24190_register_reset(bdi); in bq24190_pm_resume()
1497 pm_runtime_put_sync(bdi->dev); in bq24190_pm_resume()
1500 power_supply_changed(bdi->charger); in bq24190_pm_resume()
1501 power_supply_changed(bdi->battery); in bq24190_pm_resume()