Lines Matching refs:bq2515x

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