[RESEND 3/4 v7] power: supply: Add charger driver for Rockchip RK817
kernel test robot
lkp at intel.com
Sun Jul 24 07:58:00 PDT 2022
Hi Chris,
Thank you for the patch! Perhaps something to improve:
[auto build test WARNING on lee-mfd/for-mfd-next]
[also build test WARNING on sre-power-supply/for-next rockchip/for-next linus/master v5.19-rc7 next-20220722]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Chris-Morgan/power-supply-Add-Support-for-RK817-Charger/20220722-002431
base: https://git.kernel.org/pub/scm/linux/kernel/git/lee/mfd.git for-mfd-next
config: parisc-allmodconfig (https://download.01.org/0day-ci/archive/20220724/202207242227.mttUkfTB-lkp@intel.com/config)
compiler: hppa-linux-gcc (GCC) 12.1.0
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# https://github.com/intel-lab-lkp/linux/commit/008e6f0d590e275cbb56d4506b5638156506dd40
git remote add linux-review https://github.com/intel-lab-lkp/linux
git fetch --no-tags linux-review Chris-Morgan/power-supply-Add-Support-for-RK817-Charger/20220722-002431
git checkout 008e6f0d590e275cbb56d4506b5638156506dd40
# save the config file
mkdir build_dir && cp config build_dir/.config
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=parisc SHELL=/bin/bash drivers/power/supply/
If you fix the issue, kindly add following tag where applicable
Reported-by: kernel test robot <lkp at intel.com>
All warnings (new ones prefixed by >>):
drivers/power/supply/rk817_charger.c: In function 'rk817_read_or_set_full_charge_on_boot':
>> drivers/power/supply/rk817_charger.c:701:33: warning: variable 'soc_tmp3' set but not used [-Wunused-but-set-variable]
701 | int soc_tmp1, soc_tmp2, soc_tmp3;
| ^~~~~~~~
>> drivers/power/supply/rk817_charger.c:701:23: warning: variable 'soc_tmp2' set but not used [-Wunused-but-set-variable]
701 | int soc_tmp1, soc_tmp2, soc_tmp3;
| ^~~~~~~~
>> drivers/power/supply/rk817_charger.c:701:13: warning: variable 'soc_tmp1' set but not used [-Wunused-but-set-variable]
701 | int soc_tmp1, soc_tmp2, soc_tmp3;
| ^~~~~~~~
vim +/soc_tmp3 +701 drivers/power/supply/rk817_charger.c
692
693 static int
694 rk817_read_or_set_full_charge_on_boot(struct rk817_charger *charger,
695 struct power_supply_battery_info *bat_info)
696 {
697 struct rk808 *rk808 = charger->rk808;
698 u8 bulk_reg[4];
699 u32 boot_voltage, boot_charge_mah, tmp;
700 int ret, reg, off_time;
> 701 int soc_tmp1, soc_tmp2, soc_tmp3;
702 bool first_boot;
703
704 /* Check if the battery is uninitalized. If it is, the columb counter
705 * needs to be set up.
706 */
707 ret = regmap_read(rk808->regmap, RK817_GAS_GAUGE_GG_STS, ®);
708 if (ret < 0)
709 return ret;
710 first_boot = reg & RK817_BAT_CON;
711 /* If the battery is uninitialized, use the poweron voltage and an ocv
712 * lookup to guess our charge. The number won't be very accurate until
713 * we hit either our minimum voltage (0%) or full charge (100%).
714 */
715 if (first_boot) {
716 regmap_bulk_read(rk808->regmap, RK817_GAS_GAUGE_PWRON_VOL_H,
717 bulk_reg, 2);
718 tmp = get_unaligned_be16(bulk_reg);
719 boot_voltage = (charger->voltage_k * tmp) +
720 1000 * charger->voltage_b;
721 /* Since only implementation has no working thermistor, assume
722 * 20C for OCV lookup. If lookup fails, report error with OCV
723 * table.
724 */
725 charger->soc = power_supply_batinfo_ocv2cap(bat_info,
726 boot_voltage,
727 20) * 1000;
728 if (charger->soc < 0)
729 charger->soc = 0;
730
731 /* Guess that full charge capacity is the design capacity */
732 charger->fcc_mah = charger->bat_charge_full_design_uah / 1000;
733 /* Set battery as "set up". BSP driver uses this value even
734 * though datasheet claims it's a read-only value.
735 */
736 regmap_write_bits(rk808->regmap, RK817_GAS_GAUGE_GG_STS,
737 RK817_BAT_CON, 0);
738 /* Save nvram values */
739 ret = rk817_record_battery_nvram_values(charger);
740 if (ret < 0)
741 return ret;
742 } else {
743 ret = rk817_read_battery_nvram_values(charger);
744 if (ret < 0)
745 return ret;
746
747 regmap_bulk_read(rk808->regmap, RK817_GAS_GAUGE_Q_PRES_H3,
748 bulk_reg, 4);
749 tmp = get_unaligned_be32(bulk_reg);
750 if (tmp < 0)
751 tmp = 0;
752 boot_charge_mah = ADC_TO_CHARGE_UAH(tmp,
753 charger->res_div) / 1000;
754 /* Check if the columb counter has been off for more than 300
755 * minutes as it tends to drift downward. If so, re-init soc
756 * with the boot voltage instead. Note the unit values for the
757 * OFF_CNT register appear to be in decaminutes and stops
758 * counting at 2550 (0xFF) minutes. BSP kernel used OCV, but
759 * for me occasionally that would show invalid values. Boot
760 * voltage is only accurate for me on first poweron (not
761 * reboots), but we shouldn't ever encounter an OFF_CNT more
762 * than 0 on a reboot anyway.
763 */
764 regmap_read(rk808->regmap, RK817_GAS_GAUGE_OFF_CNT, &off_time);
765 if (off_time >= 30) {
766 regmap_bulk_read(rk808->regmap,
767 RK817_GAS_GAUGE_PWRON_VOL_H,
768 bulk_reg, 2);
769 tmp = get_unaligned_be16(bulk_reg);
770 boot_voltage = (charger->voltage_k * tmp) +
771 1000 * charger->voltage_b;
772 charger->soc =
773 power_supply_batinfo_ocv2cap(bat_info,
774 boot_voltage,
775 20) * 1000;
776 } else {
777 charger->soc = (boot_charge_mah * 1000 * 100 /
778 charger->fcc_mah);
779 }
780 }
781
782 regmap_bulk_read(rk808->regmap, RK817_GAS_GAUGE_PWRON_VOL_H,
783 bulk_reg, 2);
784 tmp = get_unaligned_be16(bulk_reg);
785 boot_voltage = (charger->voltage_k * tmp) + 1000 * charger->voltage_b;
786 soc_tmp1 = power_supply_batinfo_ocv2cap(bat_info,
787 boot_voltage, 20) * 1000;
788 regmap_bulk_read(rk808->regmap, RK817_GAS_GAUGE_Q_PRES_H3,
789 bulk_reg, 4);
790 tmp = get_unaligned_be32(bulk_reg);
791 if (tmp < 0)
792 tmp = 0;
793 boot_charge_mah = ADC_TO_CHARGE_UAH(tmp, charger->res_div) / 1000;
794 soc_tmp2 = (boot_charge_mah * 1000 * 100 / charger->fcc_mah);
795 regmap_bulk_read(rk808->regmap, RK817_GAS_GAUGE_OCV_VOL_H,
796 bulk_reg, 2);
797 tmp = get_unaligned_be16(bulk_reg);
798 boot_voltage = (charger->voltage_k * tmp) + 1000 * charger->voltage_b;
799 soc_tmp3 = power_supply_batinfo_ocv2cap(bat_info,
800 boot_voltage, 20) * 1000;
801
802 /* Now we have our full charge capacity and soc, init the columb
803 * counter.
804 */
805 boot_charge_mah = charger->soc * charger->fcc_mah / 100 / 1000;
806 if (boot_charge_mah > charger->fcc_mah)
807 boot_charge_mah = charger->fcc_mah;
808 tmp = CHARGE_TO_ADC(boot_charge_mah, charger->res_div);
809 put_unaligned_be32(tmp, bulk_reg);
810 ret = regmap_bulk_write(rk808->regmap, RK817_GAS_GAUGE_Q_INIT_H3,
811 bulk_reg, 4);
812 if (ret < 0)
813 return ret;
814
815 /* Set QMAX value to max design capacity. */
816 tmp = CHARGE_TO_ADC((charger->bat_charge_full_design_uah / 1000),
817 charger->res_div);
818 put_unaligned_be32(tmp, bulk_reg);
819 ret = regmap_bulk_write(rk808->regmap, RK817_GAS_GAUGE_Q_MAX_H3,
820 bulk_reg, 4);
821 if (ret < 0)
822 return ret;
823
824 return 0;
825 }
826
--
0-DAY CI Kernel Test Service
https://01.org/lkp
More information about the Linux-rockchip
mailing list