Lines Matching defs:ip5xxx
22 struct ip5xxx {
168 static int ip5xxx_read(struct ip5xxx *ip5xxx, struct regmap_field *field,
178 ip5xxx->initialized = false;
183 static int ip5xxx_write(struct ip5xxx *ip5xxx, struct regmap_field *field,
193 ip5xxx->initialized = false;
200 struct ip5xxx *ip5xxx = power_supply_get_drvdata(psy);
203 if (ip5xxx->initialized)
210 if (ip5xxx->regs.boost.light_load_shutdown.enable) {
211 ret = ip5xxx_write(ip5xxx, ip5xxx->regs.boost.light_load_shutdown.enable, 0);
215 ret = ip5xxx_write(ip5xxx, ip5xxx->regs.boost.load_powerup_en, 1);
222 ret = ip5xxx_write(ip5xxx, ip5xxx->regs.btn.shdn_enable, 1);
229 ret = ip5xxx_write(ip5xxx, ip5xxx->regs.boost.vin_pullout_en, 1);
237 if (ip5xxx->regs.battery.ntc_dis) {
238 ret = ip5xxx_write(ip5xxx, ip5xxx->regs.battery.ntc_dis, 0);
242 ret = ip5xxx_write(ip5xxx, ip5xxx->regs.btn.wled_mode, 1);
245 ret = ip5xxx_write(ip5xxx, ip5xxx->regs.btn.shdn_mode, 1);
249 ip5xxx->initialized = true;
269 static int ip5xxx_battery_get_status(struct ip5xxx *ip5xxx, int *val)
274 if (!ip5xxx->regs.charger.status) {
276 ret = ip5xxx_read(ip5xxx, ip5xxx->regs.charger.chg_end, &rval);
280 if (rval == ip5xxx->chg_end_inverted)
287 ret = ip5xxx_read(ip5xxx, ip5xxx->regs.charger.status, &rval);
314 static int ip5xxx_battery_get_charge_type(struct ip5xxx *ip5xxx, int *val)
319 ret = ip5xxx_read(ip5xxx, ip5xxx->regs.charger.status, &rval);
344 static int ip5xxx_battery_get_health(struct ip5xxx *ip5xxx, int *val)
349 ret = ip5xxx_read(ip5xxx, ip5xxx->regs.charger.timeout, &rval);
361 static int ip5xxx_battery_get_voltage_max(struct ip5xxx *ip5xxx, int *val)
366 ret = ip5xxx_read(ip5xxx, ip5xxx->regs.battery.type, &rval);
394 static int ip5xxx_battery_read_adc(struct ip5xxx *ip5xxx,
400 ret = ip5xxx_read(ip5xxx, regs->low, &lo);
404 ret = ip5xxx_read(ip5xxx, regs->high, &hi);
417 struct ip5xxx *ip5xxx = power_supply_get_drvdata(psy);
427 return ip5xxx_battery_get_status(ip5xxx, &val->intval);
430 return ip5xxx_battery_get_charge_type(ip5xxx, &val->intval);
433 return ip5xxx_battery_get_health(ip5xxx, &val->intval);
436 return ip5xxx_battery_get_voltage_max(ip5xxx, &val->intval);
439 ret = ip5xxx_battery_read_adc(ip5xxx, &ip5xxx->regs.battery.adc.volt, &raw);
447 ret = ip5xxx_battery_read_adc(ip5xxx, &ip5xxx->regs.battery.adc.open_volt, &raw);
455 ret = ip5xxx_battery_read_adc(ip5xxx, &ip5xxx->regs.battery.adc.curr, &raw);
463 ret = ip5xxx_read(ip5xxx, ip5xxx->regs.charger.const_curr_sel, &rval);
467 val->intval = ip5xxx->const_curr.setpoint + 100000 * rval;
475 ret = ip5xxx_battery_get_voltage_max(ip5xxx, &vmax);
479 ret = ip5xxx_read(ip5xxx, ip5xxx->regs.charger.const_volt_sel, &rval);
487 ret = ip5xxx_battery_get_voltage_max(ip5xxx, &vmax);
499 static int ip5xxx_battery_set_voltage_max(struct ip5xxx *ip5xxx, int val)
504 if (val > ip5xxx->vbat_max)
524 ret = ip5xxx_write(ip5xxx, ip5xxx->regs.battery.type, rval);
529 if (ip5xxx->regs.battery.vset_en) {
530 ret = ip5xxx_write(ip5xxx, ip5xxx->regs.battery.vset_en, 1);
542 struct ip5xxx *ip5xxx = power_supply_get_drvdata(psy);
563 return ip5xxx_write(ip5xxx, ip5xxx->regs.charger.enable, rval);
566 return ip5xxx_battery_set_voltage_max(ip5xxx, val->intval);
569 rval = (val->intval - ip5xxx->const_curr.setpoint) / 100000;
570 return ip5xxx_write(ip5xxx, ip5xxx->regs.charger.const_curr_sel, rval);
573 ret = ip5xxx_battery_get_voltage_max(ip5xxx, &vmax);
578 return ip5xxx_write(ip5xxx, ip5xxx->regs.charger.const_volt_sel, rval);
595 .name = "ip5xxx-battery",
613 struct ip5xxx *ip5xxx = power_supply_get_drvdata(psy);
623 ret = ip5xxx_read(ip5xxx, ip5xxx->regs.boost.enable, &rval);
631 ret = ip5xxx_read(ip5xxx, ip5xxx->regs.boost.undervolt_limit, &rval);
635 val->intval = ip5xxx->boost_undervolt.setpoint +
636 ip5xxx->boost_undervolt.microvolts_per_bit * rval;
648 struct ip5xxx *ip5xxx = power_supply_get_drvdata(psy);
658 return ip5xxx_write(ip5xxx, ip5xxx->regs.boost.enable, !!val->intval);
661 rval = (val->intval - ip5xxx->boost_undervolt.setpoint) /
662 ip5xxx->boost_undervolt.microvolts_per_bit;
663 return ip5xxx_write(ip5xxx, ip5xxx->regs.boost.undervolt_limit, rval);
677 .name = "ip5xxx-boost",
779 ip5xxx->regmap, cfg->_field); \
781 ip5xxx->regs._reg = _tmp; \
785 static void ip5xxx_setup_regs(struct device *dev, struct ip5xxx *ip5xxx,
822 ip5xxx->vbat_max = cfg->vbat_max;
823 ip5xxx->boost_undervolt.setpoint = cfg->boost_undervolt_setpoint;
824 ip5xxx->boost_undervolt.microvolts_per_bit = cfg->boost_undervolt_uv_per_bit;
825 ip5xxx->const_curr.setpoint = cfg->const_curr_setpoint;
826 ip5xxx->chg_end_inverted = cfg->chg_end_inverted;
836 struct ip5xxx *ip5xxx;
838 ip5xxx = devm_kzalloc(dev, sizeof(*ip5xxx), GFP_KERNEL);
839 if (!ip5xxx)
842 ip5xxx->regmap = devm_regmap_init_i2c(client, &ip5xxx_regmap_config);
843 if (IS_ERR(ip5xxx->regmap))
844 return PTR_ERR(ip5xxx->regmap);
849 ip5xxx_setup_regs(dev, ip5xxx, fields);
852 psy_cfg.drv_data = ip5xxx;
878 .name = "ip5xxx-power",