Lines Matching defs:bq2515x
269 static int bq2515x_wake_up(struct bq2515x_device *bq2515x)
278 ret = regmap_read(bq2515x->regmap, BQ2515X_STAT0, &val);
286 gpiod_set_value_cansleep(bq2515x->powerdown_gpio, 0);
288 gpiod_set_value_cansleep(bq2515x->reset_gpio, 0);
290 gpiod_set_value_cansleep(bq2515x->reset_gpio, 1);
292 return regmap_write(bq2515x->regmap, BQ2515X_ADC_READ_EN,
296 static int bq2515x_update_ps_status(struct bq2515x_device *bq2515x)
302 if (bq2515x->ac_detect_gpio)
303 val = gpiod_get_value_cansleep(bq2515x->ac_detect_gpio);
305 ret = regmap_read(bq2515x->regmap, BQ2515X_STAT0, &val);
312 ret = bq2515x->mains_online != dc;
314 bq2515x->mains_online = dc;
319 static int bq2515x_disable_watchdog_timers(struct bq2515x_device *bq2515x)
323 ret = regmap_update_bits(bq2515x->regmap, BQ2515X_CHARGERCTRL0,
328 return regmap_update_bits(bq2515x->regmap, BQ2515X_ICCTRL2,
332 static int bq2515x_get_battery_voltage_now(struct bq2515x_device *bq2515x)
339 if (!bq2515x->mains_online)
340 bq2515x_wake_up(bq2515x);
342 ret = regmap_read(bq2515x->regmap, BQ2515X_ADC_VBAT_M, &vbat_msb);
346 ret = regmap_read(bq2515x->regmap, BQ2515X_ADC_VBAT_L, &vbat_lsb);
356 static int bq2515x_get_battery_current_now(struct bq2515x_device *bq2515x)
367 if (!bq2515x->mains_online)
370 ret = regmap_read(bq2515x->regmap, BQ2515X_ADC_ICHG_M, &ichg_msb);
374 ret = regmap_read(bq2515x->regmap, BQ2515X_ADC_ICHG_L, &ichg_lsb);
380 ret = regmap_read(bq2515x->regmap, BQ2515X_BUVLO, &buvlo);
389 if (bq2515x_get_battery_voltage_now(bq2515x) < vlowv) {
390 ret = regmap_read(bq2515x->regmap, BQ2515X_PCHRGCTRL,
397 ret = regmap_read(bq2515x->regmap, BQ2515X_ICHG_CTRL,
405 ret = regmap_read(bq2515x->regmap, BQ2515X_PCHRGCTRL, &pchrgctrl);
418 static bool bq2515x_get_charge_disable(struct bq2515x_device *bq2515x)
425 ce_pin = gpiod_get_value_cansleep(bq2515x->ce_gpio);
427 ret = regmap_read(bq2515x->regmap, BQ2515X_ICCTRL2, &icctrl2);
439 static int bq2515x_set_charge_disable(struct bq2515x_device *bq2515x, int val)
441 gpiod_set_value_cansleep(bq2515x->ce_gpio, val);
443 return regmap_update_bits(bq2515x->regmap, BQ2515X_ICCTRL2,
447 static int bq2515x_get_const_charge_current(struct bq2515x_device *bq2515x)
455 ret = regmap_read(bq2515x->regmap, BQ2515X_ICHG_CTRL, &ichg_reg_code);
459 ret = regmap_read(bq2515x->regmap, BQ2515X_PCHRGCTRL, &pchrgctrl);
471 static int bq2515x_set_const_charge_current(struct bq2515x_device *bq2515x,
487 bq2515x_set_charge_disable(bq2515x, 1);
489 ret = regmap_update_bits(bq2515x->regmap, BQ2515X_PCHRGCTRL,
496 ret = regmap_write(bq2515x->regmap, BQ2515X_ICHG_CTRL, ichg_reg_code);
500 return bq2515x_set_charge_disable(bq2515x, 0);
503 static int bq2515x_get_precharge_current(struct bq2515x_device *bq2515x)
511 ret = regmap_read(bq2515x->regmap, BQ2515X_PCHRGCTRL, &pchrgctrl);
525 static int bq2515x_set_precharge_current(struct bq2515x_device *bq2515x,
535 ret = regmap_read(bq2515x->regmap, BQ2515X_PCHRGCTRL, &pchrgctrl);
553 ret = bq2515x_set_charge_disable(bq2515x, 1);
557 ret = regmap_update_bits(bq2515x->regmap, BQ2515X_PCHRGCTRL,
562 return bq2515x_set_charge_disable(bq2515x, 0);
565 static int bq2515x_charging_status(struct bq2515x_device *bq2515x,
575 if (!bq2515x->mains_online) {
580 ret = regmap_read(bq2515x->regmap, BQ2515X_STAT0, &status);
601 ret = regmap_read(bq2515x->regmap, BQ2515X_STAT1, &status);
613 ce_status = (!bq2515x_get_charge_disable(bq2515x));
631 static int bq2515x_get_batt_reg(struct bq2515x_device *bq2515x)
636 ret = regmap_read(bq2515x->regmap, BQ2515X_VBAT_CTRL, &vbat_reg_code);
643 static int bq2515x_set_batt_reg(struct bq2515x_device *bq2515x, int val)
652 return regmap_write(bq2515x->regmap, BQ2515X_VBAT_CTRL, vbat_reg_code);
655 static int bq2515x_get_ilim_lvl(struct bq2515x_device *bq2515x)
660 ret = regmap_read(bq2515x->regmap, BQ2515X_ILIMCTRL, &ilimctrl);
667 static int bq2515x_set_ilim_lvl(struct bq2515x_device *bq2515x, int val)
676 return regmap_write(bq2515x->regmap, BQ2515X_ILIMCTRL, i);
693 static int bq2515x_charger_get_health(struct bq2515x_device *bq2515x,
701 if (!bq2515x->mains_online)
702 bq2515x_wake_up(bq2515x);
704 ret = regmap_read(bq2515x->regmap, BQ2515X_FLAG3, &flag3);
708 ret = regmap_read(bq2515x->regmap, BQ2515X_STAT1, &stat1);
746 struct bq2515x_device *bq2515x = power_supply_get_drvdata(psy);
751 ret = bq2515x_set_batt_reg(bq2515x, val->intval);
755 ret = bq2515x_set_const_charge_current(bq2515x, val->intval);
759 ret = bq2515x_set_ilim_lvl(bq2515x, val->intval);
763 ret = bq2515x_set_precharge_current(bq2515x, val->intval);
777 struct bq2515x_device *bq2515x = power_supply_get_drvdata(psy);
783 ret = bq2515x_get_const_charge_current(bq2515x);
791 ret = bq2515x_get_batt_reg(bq2515x);
798 ret = bq2515x_get_precharge_current(bq2515x);
805 val->intval = bq2515x->mains_online;
809 ret = bq2515x_charger_get_health(bq2515x, val);
815 ret = bq2515x_get_ilim_lvl(bq2515x);
822 val->strval = bq2515x->model_name;
830 ret = bq2515x_charging_status(bq2515x, val);
846 struct bq2515x_device *bq2515x = power_supply_get_drvdata(psy);
849 ret = bq2515x_update_ps_status(bq2515x);
856 ret = bq2515x->init_data.vbatreg;
863 ret = bq2515x->init_data.ichg;
870 ret = bq2515x_get_battery_voltage_now(bq2515x);
877 ret = bq2515x_get_battery_current_now(bq2515x);
909 .name = "bq2515x-mains",
919 .name = "bq2515x-battery",
927 static int bq2515x_power_supply_register(struct bq2515x_device *bq2515x,
930 bq2515x->mains = devm_power_supply_register(bq2515x->dev,
933 if (IS_ERR(bq2515x->mains))
936 bq2515x->battery = devm_power_supply_register(bq2515x->dev,
939 if (IS_ERR(bq2515x->battery))
945 static int bq2515x_hw_init(struct bq2515x_device *bq2515x)
950 ret = bq2515x_disable_watchdog_timers(bq2515x);
954 if (bq2515x->init_data.ilim) {
955 ret = bq2515x_set_ilim_lvl(bq2515x, bq2515x->init_data.ilim);
960 ret = power_supply_get_battery_info(bq2515x->mains, &bat_info);
962 dev_warn(bq2515x->dev, "battery info missing, default values will be applied\n");
964 bq2515x->init_data.ichg = BQ2515X_DEFAULT_ICHG_UA;
966 bq2515x->init_data.vbatreg = BQ2515X_DEFAULT_VBAT_REG_UV;
968 bq2515x->init_data.iprechg = BQ2515X_DEFAULT_IPRECHARGE_UA;
971 bq2515x->init_data.ichg =
974 bq2515x->init_data.vbatreg =
977 bq2515x->init_data.iprechg =
981 ret = bq2515x_set_const_charge_current(bq2515x,
982 bq2515x->init_data.ichg);
986 ret = bq2515x_set_batt_reg(bq2515x, bq2515x->init_data.vbatreg);
990 return bq2515x_set_precharge_current(bq2515x,
991 bq2515x->init_data.iprechg);
994 static int bq2515x_read_properties(struct bq2515x_device *bq2515x)
998 ret = device_property_read_u32(bq2515x->dev,
1000 &bq2515x->init_data.ilim);
1002 switch (bq2515x->device_id) {
1004 bq2515x->init_data.ilim = BQ25150_DEFAULT_ILIM_UA;
1007 bq2515x->init_data.ilim = BQ25155_DEFAULT_ILIM_UA;
1012 bq2515x->ac_detect_gpio = devm_gpiod_get_optional(bq2515x->dev,
1014 if (IS_ERR(bq2515x->ac_detect_gpio)) {
1015 ret = PTR_ERR(bq2515x->ac_detect_gpio);
1016 dev_err(bq2515x->dev, "Failed to get ac detect");
1020 bq2515x->reset_gpio = devm_gpiod_get_optional(bq2515x->dev,
1022 if (IS_ERR(bq2515x->reset_gpio)) {
1023 ret = PTR_ERR(bq2515x->reset_gpio);
1024 dev_err(bq2515x->dev, "Failed to get reset");
1028 bq2515x->powerdown_gpio = devm_gpiod_get_optional(bq2515x->dev,
1030 if (IS_ERR(bq2515x->powerdown_gpio)) {
1031 ret = PTR_ERR(bq2515x->powerdown_gpio);
1032 dev_err(bq2515x->dev, "Failed to get powerdown");
1036 bq2515x->ce_gpio = devm_gpiod_get_optional(bq2515x->dev,
1039 if (IS_ERR(bq2515x->ce_gpio)) {
1040 ret = PTR_ERR(bq2515x->ce_gpio);
1041 dev_err(bq2515x->dev, "Failed to get ce");
1085 struct bq2515x_device *bq2515x;
1089 bq2515x = devm_kzalloc(dev, sizeof(*bq2515x), GFP_KERNEL);
1090 if (!bq2515x)
1093 bq2515x->dev = dev;
1095 strncpy(bq2515x->model_name, id->name, I2C_NAME_SIZE);
1097 bq2515x->device_id = id->driver_data;
1099 switch (bq2515x->device_id) {
1101 bq2515x->regmap = devm_regmap_init_i2c(client,
1105 bq2515x->regmap = devm_regmap_init_i2c(client,
1110 if (IS_ERR(bq2515x->regmap)) {
1112 return PTR_ERR(bq2515x->regmap);
1115 i2c_set_clientdata(client, bq2515x);
1117 charger_cfg.drv_data = bq2515x;
1120 ret = bq2515x_read_properties(bq2515x);
1127 ret = bq2515x_power_supply_register(bq2515x, dev, charger_cfg);
1133 ret = bq2515x_hw_init(bq2515x);
1158 .name = "bq2515x-charger",