Lines Matching refs:info

138 static int fuel_gauge_reg_readb(struct axp288_fg_info *info, int reg)
144 ret = regmap_read(info->regmap, reg, &val);
152 dev_err(&info->pdev->dev, "Error reading reg 0x%02x err: %d\n", reg, ret);
159 static int fuel_gauge_reg_writeb(struct axp288_fg_info *info, int reg, u8 val)
163 ret = regmap_write(info->regmap, reg, (unsigned int)val);
166 dev_err(&info->pdev->dev, "Error writing reg 0x%02x err: %d\n", reg, ret);
171 static int fuel_gauge_read_15bit_word(struct axp288_fg_info *info, int reg)
176 ret = regmap_bulk_read(info->regmap, reg, buf, 2);
178 dev_err(&info->pdev->dev, "Error reading reg 0x%02x err: %d\n",
185 dev_err(&info->pdev->dev, "Error reg 0x%02x contents not valid\n",
193 static int fuel_gauge_read_12bit_word(struct axp288_fg_info *info, int reg)
198 ret = regmap_bulk_read(info->regmap, reg, buf, 2);
200 dev_err(&info->pdev->dev, "Error reading reg 0x%02x err: %d\n",
212 struct axp288_fg_info *info = s->private;
217 fuel_gauge_reg_readb(info, AXP20X_PWR_INPUT_STATUS));
220 fuel_gauge_reg_readb(info, AXP20X_PWR_OP_MODE));
223 fuel_gauge_reg_readb(info, AXP20X_CHRG_CTRL1));
226 fuel_gauge_reg_readb(info, AXP20X_V_LTF_DISCHRG));
229 fuel_gauge_reg_readb(info, AXP20X_V_HTF_DISCHRG));
232 fuel_gauge_reg_readb(info, AXP20X_CC_CTRL));
235 fuel_gauge_reg_readb(info, AXP20X_FG_RES));
238 fuel_gauge_reg_readb(info, AXP288_FG_RDC1_REG));
241 fuel_gauge_reg_readb(info, AXP288_FG_RDC0_REG));
244 fuel_gauge_read_12bit_word(info, AXP288_FG_OCVH_REG));
247 fuel_gauge_read_15bit_word(info, AXP288_FG_DES_CAP1_REG));
250 fuel_gauge_read_15bit_word(info, AXP288_FG_CC_MTR1_REG));
253 fuel_gauge_reg_readb(info, AXP288_FG_OCV_CAP_REG));
256 fuel_gauge_reg_readb(info, AXP288_FG_CC_CAP_REG));
259 fuel_gauge_reg_readb(info, AXP288_FG_LOW_CAP_REG));
262 fuel_gauge_reg_readb(info, AXP288_FG_TUNE0));
265 fuel_gauge_reg_readb(info, AXP288_FG_TUNE1));
268 fuel_gauge_reg_readb(info, AXP288_FG_TUNE2));
271 fuel_gauge_reg_readb(info, AXP288_FG_TUNE3));
274 fuel_gauge_reg_readb(info, AXP288_FG_TUNE4));
277 fuel_gauge_reg_readb(info, AXP288_FG_TUNE5));
279 ret = iio_read_channel_raw(info->iio_channel[BAT_TEMP], &raw_val);
282 ret = iio_read_channel_raw(info->iio_channel[PMIC_TEMP], &raw_val);
285 ret = iio_read_channel_raw(info->iio_channel[SYSTEM_TEMP], &raw_val);
288 ret = iio_read_channel_raw(info->iio_channel[BAT_CHRG_CURR], &raw_val);
291 ret = iio_read_channel_raw(info->iio_channel[BAT_D_CURR], &raw_val);
294 ret = iio_read_channel_raw(info->iio_channel[BAT_VOLT], &raw_val);
303 static void fuel_gauge_create_debugfs(struct axp288_fg_info *info)
305 info->debug_file = debugfs_create_file("fuelgauge", 0666, NULL,
306 info, &fuel_gauge_debug_fops);
309 static void fuel_gauge_remove_debugfs(struct axp288_fg_info *info)
311 debugfs_remove(info->debug_file);
314 static inline void fuel_gauge_create_debugfs(struct axp288_fg_info *info)
317 static inline void fuel_gauge_remove_debugfs(struct axp288_fg_info *info)
322 static void fuel_gauge_get_status(struct axp288_fg_info *info)
326 pwr_stat = fuel_gauge_reg_readb(info, AXP20X_PWR_INPUT_STATUS);
328 dev_err(&info->pdev->dev,
337 fg_res = fuel_gauge_reg_readb(info, AXP20X_FG_RES);
339 dev_err(&info->pdev->dev, "FG RES read failed: %d\n", fg_res);
347 info->status = POWER_SUPPLY_STATUS_FULL;
359 ret = iio_read_channel_raw(info->iio_channel[BAT_D_CURR], &curr);
361 dev_err(&info->pdev->dev, "FG get current failed: %d\n", ret);
365 info->status = POWER_SUPPLY_STATUS_FULL;
371 info->status = POWER_SUPPLY_STATUS_CHARGING;
373 info->status = POWER_SUPPLY_STATUS_DISCHARGING;
376 static int fuel_gauge_get_vbatt(struct axp288_fg_info *info, int *vbatt)
380 ret = iio_read_channel_raw(info->iio_channel[BAT_VOLT], &raw_val);
389 static int fuel_gauge_get_current(struct axp288_fg_info *info, int *cur)
394 ret = iio_read_channel_raw(info->iio_channel[BAT_D_CURR], &discharge);
403 return iio_read_channel_raw(info->iio_channel[BAT_CHRG_CURR], cur);
406 static int fuel_gauge_get_vocv(struct axp288_fg_info *info, int *vocv)
410 ret = fuel_gauge_read_12bit_word(info, AXP288_FG_OCVH_REG);
417 static int fuel_gauge_battery_health(struct axp288_fg_info *info)
421 ret = fuel_gauge_get_vocv(info, &vocv);
425 if (vocv > info->max_volt)
438 struct axp288_fg_info *info = power_supply_get_drvdata(ps);
441 mutex_lock(&info->lock);
444 fuel_gauge_get_status(info);
445 val->intval = info->status;
448 val->intval = fuel_gauge_battery_health(info);
451 ret = fuel_gauge_get_vbatt(info, &value);
457 ret = fuel_gauge_get_vocv(info, &value);
463 ret = fuel_gauge_get_current(info, &value);
469 ret = fuel_gauge_reg_readb(info, AXP20X_PWR_OP_MODE);
479 ret = fuel_gauge_reg_readb(info, AXP20X_FG_RES);
484 dev_err(&info->pdev->dev,
489 ret = fuel_gauge_reg_readb(info, AXP288_FG_LOW_CAP_REG);
498 ret = fuel_gauge_read_15bit_word(info, AXP288_FG_CC_MTR1_REG);
505 ret = fuel_gauge_read_15bit_word(info, AXP288_FG_DES_CAP1_REG);
512 val->intval = PROP_VOLT(info->max_volt);
515 mutex_unlock(&info->lock);
519 mutex_unlock(&info->lock);
523 mutex_unlock(&info->lock);
531 struct axp288_fg_info *info = power_supply_get_drvdata(ps);
534 mutex_lock(&info->lock);
541 ret = fuel_gauge_reg_readb(info, AXP288_FG_LOW_CAP_REG);
546 ret = fuel_gauge_reg_writeb(info, AXP288_FG_LOW_CAP_REG, ret);
553 mutex_unlock(&info->lock);
575 struct axp288_fg_info *info = dev;
579 if (info->irq[i] == irq)
584 dev_warn(&info->pdev->dev, "spurious interrupt!!\n");
590 dev_info(&info->pdev->dev,
594 dev_info(&info->pdev->dev,
598 dev_info(&info->pdev->dev,
602 dev_info(&info->pdev->dev,
606 dev_info(&info->pdev->dev, "Low Batt Warning(2) INTR\n");
609 dev_info(&info->pdev->dev, "Low Batt Warning(1) INTR\n");
612 dev_warn(&info->pdev->dev, "Spurious Interrupt!!!\n");
615 power_supply_changed(info->bat);
621 struct axp288_fg_info *info = power_supply_get_drvdata(psy);
623 power_supply_changed(info->bat);
637 static void fuel_gauge_init_irq(struct axp288_fg_info *info)
642 pirq = platform_get_irq(info->pdev, i);
643 info->irq[i] = regmap_irq_get_virq(info->regmap_irqc, pirq);
644 if (info->irq[i] < 0) {
645 dev_warn(&info->pdev->dev,
647 pirq, info->irq[i]);
648 info->irq[i] = -1;
651 ret = request_threaded_irq(info->irq[i],
653 IRQF_ONESHOT, DEV_NAME, info);
655 dev_warn(&info->pdev->dev,
657 pirq, info->irq[i]);
658 info->irq[i] = -1;
661 dev_info(&info->pdev->dev, "HW IRQ %d -> VIRQ %d\n",
662 pirq, info->irq[i]);
669 free_irq(info->irq[i - 1], info);
670 info->irq[i - 1] = -1;
748 struct axp288_fg_info *info;
774 info = devm_kzalloc(&pdev->dev, sizeof(*info), GFP_KERNEL);
775 if (!info)
778 info->pdev = pdev;
779 info->regmap = axp20x->regmap;
780 info->regmap_irqc = axp20x->regmap_irqc;
781 info->status = POWER_SUPPLY_STATUS_UNKNOWN;
783 platform_set_drvdata(pdev, info);
785 mutex_init(&info->lock);
793 info->iio_channel[i] =
795 if (IS_ERR(info->iio_channel[i])) {
796 ret = PTR_ERR(info->iio_channel[i]);
807 ret = fuel_gauge_reg_readb(info, AXP288_FG_DES_CAP1_REG);
817 ret = fuel_gauge_reg_readb(info, AXP20X_CHRG_CTRL1);
822 info->max_volt = 4100;
825 info->max_volt = 4150;
828 info->max_volt = 4200;
831 info->max_volt = 4350;
835 psy_cfg.drv_data = info;
836 info->bat = power_supply_register(&pdev->dev, &fuel_gauge_desc, &psy_cfg);
837 if (IS_ERR(info->bat)) {
838 ret = PTR_ERR(info->bat);
843 fuel_gauge_create_debugfs(info);
844 fuel_gauge_init_irq(info);
850 if (!IS_ERR_OR_NULL(info->iio_channel[i]))
851 iio_channel_release(info->iio_channel[i]);
864 struct axp288_fg_info *info = platform_get_drvdata(pdev);
867 power_supply_unregister(info->bat);
868 fuel_gauge_remove_debugfs(info);
871 if (info->irq[i] >= 0)
872 free_irq(info->irq[i], info);
875 iio_channel_release(info->iio_channel[i]);