Lines Matching defs:bq
210 static int bq24257_field_read(struct bq24257_device *bq,
216 ret = regmap_field_read(bq->rmap_fields[field_id], &val);
223 static int bq24257_field_write(struct bq24257_device *bq,
226 return regmap_field_write(bq->rmap_fields[field_id], val);
261 static int bq24257_get_input_current_limit(struct bq24257_device *bq,
266 ret = bq24257_field_read(bq, F_IILIMIT);
285 static int bq24257_set_input_current_limit(struct bq24257_device *bq,
293 if (bq->iilimit_autoset_enable)
294 cancel_delayed_work_sync(&bq->iilimit_setup_work);
296 return bq24257_field_write(bq, F_IILIMIT,
306 struct bq24257_device *bq = power_supply_get_drvdata(psy);
309 mutex_lock(&bq->lock);
310 state = bq->state;
311 mutex_unlock(&bq->lock);
332 val->strval = bq2425x_chip_name[bq->chip];
367 val->intval = bq24257_ichg_map[bq->init_data.ichg];
375 val->intval = bq24257_vbat_map[bq->init_data.vbat];
383 val->intval = bq24257_iterm_map[bq->init_data.iterm];
387 return bq24257_get_input_current_limit(bq, val);
400 struct bq24257_device *bq = power_supply_get_drvdata(psy);
404 return bq24257_set_input_current_limit(bq, val);
421 static int bq24257_get_chip_state(struct bq24257_device *bq,
426 ret = bq24257_field_read(bq, F_STAT);
432 ret = bq24257_field_read(bq, F_FAULT);
438 if (bq->pg)
439 state->power_good = !gpiod_get_value_cansleep(bq->pg);
462 static bool bq24257_state_changed(struct bq24257_device *bq,
467 mutex_lock(&bq->lock);
468 ret = (bq->state.status != new_state->status ||
469 bq->state.fault != new_state->fault ||
470 bq->state.power_good != new_state->power_good);
471 mutex_unlock(&bq->lock);
530 static int bq24257_iilimit_autoset(struct bq24257_device *bq)
543 ret = bq24257_field_read(bq, F_LOOP_STATUS);
549 ret = bq24257_field_read(bq, F_IILIMIT);
563 ret = bq24257_field_read(bq, F_USB_DET);
569 ret = bq24257_field_write(bq, F_IILIMIT, new_iilimit[port_type]);
573 ret = bq24257_field_write(bq, F_TMR, SAFETY_TIMER_360);
577 ret = bq24257_field_write(bq, F_CLR_VDP, 1);
581 dev_dbg(bq->dev, "port/loop = %d/%d -> iilimit = %d\n",
587 dev_err(bq->dev, "%s: Error communicating with the chip.\n", __func__);
593 struct bq24257_device *bq = container_of(work, struct bq24257_device,
596 bq24257_iilimit_autoset(bq);
599 static void bq24257_handle_state_change(struct bq24257_device *bq,
605 mutex_lock(&bq->lock);
606 old_state = bq->state;
607 mutex_unlock(&bq->lock);
614 dev_dbg(bq->dev, "Power removed\n");
615 if (bq->iilimit_autoset_enable) {
616 cancel_delayed_work_sync(&bq->iilimit_setup_work);
619 ret = bq24257_field_write(bq, F_DPDM_EN, 1);
627 ret = bq24257_field_write(bq, F_IILIMIT, bq->init_data.iilimit);
631 dev_dbg(bq->dev, "Power inserted\n");
633 if (bq->iilimit_autoset_enable)
635 schedule_delayed_work(&bq->iilimit_setup_work,
638 dev_warn(bq->dev, "Battery removed\n");
640 dev_err(bq->dev, "Safety timer expired! Battery dead?\n");
646 dev_err(bq->dev, "%s: Error communicating with the chip.\n", __func__);
652 struct bq24257_device *bq = private;
655 ret = bq24257_get_chip_state(bq, &state);
659 if (!bq24257_state_changed(bq, &state))
662 dev_dbg(bq->dev, "irq(state changed): status/fault/pg = %d/%d/%d\n",
665 bq24257_handle_state_change(bq, &state);
667 mutex_lock(&bq->lock);
668 bq->state = state;
669 mutex_unlock(&bq->lock);
671 power_supply_changed(bq->charger);
676 static int bq24257_hw_init(struct bq24257_device *bq)
686 {F_ICHG, bq->init_data.ichg},
687 {F_VBAT, bq->init_data.vbat},
688 {F_ITERM, bq->init_data.iterm},
689 {F_VOVP, bq->init_data.vovp},
690 {F_VINDPM, bq->init_data.vindpm},
697 ret = bq24257_field_write(bq, F_WD_EN, 0);
703 ret = bq24257_field_write(bq, init_data[i].field,
709 ret = bq24257_get_chip_state(bq, &state);
713 mutex_lock(&bq->lock);
714 bq->state = state;
715 mutex_unlock(&bq->lock);
717 if (!bq->iilimit_autoset_enable) {
718 dev_dbg(bq->dev, "manually setting iilimit = %u\n",
719 bq->init_data.iilimit);
722 ret = bq24257_field_write(bq, F_IILIMIT,
723 bq->init_data.iilimit);
728 ret = bq24257_field_write(bq, F_DPDM_EN, 1);
730 ret = bq24257_iilimit_autoset(bq);
768 struct bq24257_device *bq = power_supply_get_drvdata(psy);
770 return sysfs_emit(buf, "%u\n", bq24257_vovp_map[bq->init_data.vovp]);
778 struct bq24257_device *bq = power_supply_get_drvdata(psy);
780 return sysfs_emit(buf, "%u\n", bq24257_vindpm_map[bq->init_data.vindpm]);
788 struct bq24257_device *bq = power_supply_get_drvdata(psy);
792 ret = bq24257_field_read(bq, F_HZ_MODE);
794 ret = bq24257_field_read(bq, F_SYSOFF);
810 struct bq24257_device *bq = power_supply_get_drvdata(psy);
818 ret = bq24257_field_write(bq, F_HZ_MODE, (bool)val);
820 ret = bq24257_field_write(bq, F_SYSOFF, (bool)val);
847 static int bq24257_power_supply_init(struct bq24257_device *bq)
849 struct power_supply_config psy_cfg = { .drv_data = bq, };
855 bq->charger = devm_power_supply_register(bq->dev,
859 return PTR_ERR_OR_ZERO(bq->charger);
862 static void bq24257_pg_gpio_probe(struct bq24257_device *bq)
864 bq->pg = devm_gpiod_get_optional(bq->dev, BQ24257_PG_GPIO, GPIOD_IN);
866 if (PTR_ERR(bq->pg) == -EPROBE_DEFER) {
867 dev_info(bq->dev, "probe retry requested for PG pin\n");
869 } else if (IS_ERR(bq->pg)) {
870 dev_err(bq->dev, "error probing PG pin\n");
871 bq->pg = NULL;
875 if (bq->pg)
876 dev_dbg(bq->dev, "probed PG pin = %d\n", desc_to_gpio(bq->pg));
879 static int bq24257_fw_probe(struct bq24257_device *bq)
885 ret = device_property_read_u32(bq->dev, "ti,charge-current", &property);
889 bq->init_data.ichg = bq24257_find_idx(property, bq24257_ichg_map,
892 ret = device_property_read_u32(bq->dev, "ti,battery-regulation-voltage",
897 bq->init_data.vbat = bq24257_find_idx(property, bq24257_vbat_map,
900 ret = device_property_read_u32(bq->dev, "ti,termination-current",
905 bq->init_data.iterm = bq24257_find_idx(property, bq24257_iterm_map,
909 ret = device_property_read_u32(bq->dev, "ti,current-limit",
912 bq->iilimit_autoset_enable = true;
919 bq->init_data.iilimit = IILIMIT_500;
921 bq->init_data.iilimit =
926 ret = device_property_read_u32(bq->dev, "ti,ovp-voltage",
929 bq->init_data.vovp = VOVP_6500;
931 bq->init_data.vovp = bq24257_find_idx(property,
935 ret = device_property_read_u32(bq->dev, "ti,in-dpm-voltage",
938 bq->init_data.vindpm = VINDPM_4360;
940 bq->init_data.vindpm =
954 struct bq24257_device *bq;
963 bq = devm_kzalloc(dev, sizeof(*bq), GFP_KERNEL);
964 if (!bq)
967 bq->client = client;
968 bq->dev = dev;
977 bq->chip = (enum bq2425x_chip)acpi_id->driver_data;
979 bq->chip = (enum bq2425x_chip)id->driver_data;
982 mutex_init(&bq->lock);
984 bq->rmap = devm_regmap_init_i2c(client, &bq24257_regmap_config);
985 if (IS_ERR(bq->rmap)) {
987 return PTR_ERR(bq->rmap);
993 bq->rmap_fields[i] = devm_regmap_field_alloc(dev, bq->rmap,
995 if (IS_ERR(bq->rmap_fields[i])) {
997 return PTR_ERR(bq->rmap_fields[i]);
1001 i2c_set_clientdata(client, bq);
1004 ret = bq24257_fw_probe(bq);
1018 if (bq->chip == BQ24250)
1019 bq->iilimit_autoset_enable = false;
1021 if (bq->iilimit_autoset_enable)
1022 INIT_DELAYED_WORK(&bq->iilimit_setup_work,
1031 if (bq->chip != BQ24250)
1032 bq24257_pg_gpio_probe(bq);
1034 if (PTR_ERR(bq->pg) == -EPROBE_DEFER)
1035 return PTR_ERR(bq->pg);
1036 else if (!bq->pg)
1037 dev_info(bq->dev, "using SW-based power-good detection\n");
1040 ret = bq24257_field_write(bq, F_RESET, 1);
1049 ret = bq24257_field_write(bq, F_RESET, 0);
1053 ret = bq24257_hw_init(bq);
1059 ret = bq24257_power_supply_init(bq);
1069 bq2425x_chip_name[bq->chip], bq);
1080 struct bq24257_device *bq = i2c_get_clientdata(client);
1082 if (bq->iilimit_autoset_enable)
1083 cancel_delayed_work_sync(&bq->iilimit_setup_work);
1085 bq24257_field_write(bq, F_RESET, 1); /* reset to defaults */
1091 struct bq24257_device *bq = dev_get_drvdata(dev);
1094 if (bq->iilimit_autoset_enable)
1095 cancel_delayed_work_sync(&bq->iilimit_setup_work);
1098 ret = bq24257_field_write(bq, F_RESET, 1);
1100 dev_err(bq->dev, "Cannot reset chip to standalone mode.\n");
1108 struct bq24257_device *bq = dev_get_drvdata(dev);
1110 ret = regcache_drop_region(bq->rmap, BQ24257_REG_1, BQ24257_REG_7);
1114 ret = bq24257_field_write(bq, F_RESET, 0);
1118 ret = bq24257_hw_init(bq);
1120 dev_err(bq->dev, "Cannot init chip after resume.\n");
1125 power_supply_changed(bq->charger);