power: supply: Add Support for RK817 Charger
v7 cover power: supply: Add Support for RK817 Charger
From: Chris Morgan <[email protected]>
Resending as remaining prerequisite patches are now mainlined.
This series is to add support for the Rockchip rk817 battery charger which is present in all Rockchip RK817 PMICs. The driver was written as a joint effort by Maya Matuszczyk <[email protected]> and myself Chris Morgan <[email protected]>.
The driver requires some basic parameters be described about the battery in the devicetree such as the maximum capacity, the minimum and maximum voltage for the battery, the maximum charge current, the maximum charge voltage, and the value of sample resistors and sleep currents.
The hardware itself contains an ADC capable of measuring the voltage, current, and temperature of the battery (though my implementation of an Odroid Go Advance lacks a thermistor for temperature). It also contains a columb counter, registers for tracking the measured voltage and current at boot, and a few bytes of nvram for storing data.
Changes from V6:
- Updated devicetree binding patch to reference the required prerequisite patch in the correct manner (relocated it below the --- and pointed it to lore.kernel.org).
Changes from V5:
- Renamed mfd-cell from "battery" to "charger".
- Added note for devicetree binding documentation that it requires application of an additional pending patch (to convert documentation to yaml).
Changes from V4:
- Massively redesigned the battery driver to improve measurement accuracy and reliability. Driver now checks values every 8 seconds (mimicking BSP driver behavior), or whenever a plug event is detected.
- Removed OCV, boot voltage, and boot current as values were found to be unreliable.
- Updated first-boot behavior to perform a "best guess" at capacity.
- Added ability to calibrate columb counter to full state of charge when charger reports full, and added ability calibrate full charge capacity when battery discharges from full charge to minimum voltage.
- Expose state of charge as capacity (in percents).
- Updated storing of values to nvram to preserve compatibility with BSP kernel.
Changes from V3:
- Corrected issues in device tree documentation.
- Added additional logic to battery to correct for columb counter drift when the device stays plugged in at a full charge state.
Changes from V2:
- Updated devicetree bindings to use common property units.
- Removed unneeded includes.
- Updated rk817_chg_cur_to_reg to make more legible.
- Simplified formula for displaying calibrated voltage.
- Updated power supply type to POWER_SUPPLY_TYPE_USB.
- Implemented get/put_unaligned macros for bulk reads and writes.
- Changed numerous dev_err() to dev_err_probe().
- Call power_supply_put_battery_info() at end of probe function.
- Removed unneeded whitespace.
Changes from V1:
- Fixed a CLANG warning regarding an uninitalized variable.
- Fixed a CLANG warning regarding a pointer as a bool value always returning as true.
- Added Maya Matuszczyk to the Signed-off-by.
Chris Morgan (4):
dt-bindings: Add Rockchip rk817 battery charger support
mfd: Add Rockchip rk817 battery charger support
power: supply: Add charger driver for Rockchip RK817
arm64: dts: rockchip: add rk817 chg to Odroid Go Advance
.../bindings/mfd/rockchip,rk817.yaml | 48 + .../boot/dts/rockchip/rk3326-odroid-go2.dts | 26 + drivers/mfd/rk808.c | 16 +- drivers/power/supply/Kconfig | 6 + drivers/power/supply/Makefile | 1 + drivers/power/supply/rk817_charger.c | 1157 +++++++++++++++++ include/linux/mfd/rk808.h | 91 ++ 7 files changed, 1344 insertions(+), 1 deletion(-) create mode 100644 drivers/power/supply/rk817_charger.c
Signature · 7 lines
2.25.1 _______________________________________________ Linux-rockchip mailing list [email protected] http://lists.infradead.org/mailman/listinfo/linux-rockchip
PATCH RESEND v7 1/4 dt-bindings: Add Rockchip rk817 battery charger support
From: Chris Morgan <[email protected]>
Create dt-binding documentation to document rk817 battery and charger usage. New device-tree properties have been added.
- rockchip,resistor-sense-micro-ohms: The value in microohms of the sample resistor.
- rockchip,sleep-enter-current-microamp: The value in microamps of the sleep enter current.
- rockchip,sleep-filter-current: The value in microamps of the sleep filter current.
---
Note that this patch requires the following commit (still pending):
https://lore.kernel.org/linux-rockchip/[email protected]/
.../bindings/mfd/rockchip,rk817.yaml | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+)
Documentation/devicetree/bindings/mfd/rockchip,rk817.yaml +48 -0
@@ -117,6 +117,47 @@ properties: description: Describes if the microphone uses differential mode. + charger: + description: | + The child node for the charger to hold additional properties. If a + battery is not in use, this node can be omitted. + type: object + properties: + monitored-battery: + description: | + A phandle to a monitored battery node that contains a valid + value for: + charge-full-design-microamp-hours, + charge-term-current-microamp, + constant-charge-current-max-microamp, + constant-charge-voltage-max-microvolt, + voltage-max-design-microvolt, + voltage-min-design-microvolt, + and a valid ocv-capacity table. + + rockchip,resistor-sense-micro-ohms: + description: | + Value in microohms of the battery sense resistor. This value is + used by the driver to set the correct divisor value to translate + ADC readings into the proper units of measure. + enum: [10000, 20000] + + rockchip,sleep-enter-current-microamp: + description: | + Value in microamps of the sleep enter current for the charger. + Value is used by the driver to calibrate the relax threshold. + + rockchip,sleep-filter-current-microamp: + description: + Value in microamps of the sleep filter current for the charger. + Value is used by the driver to derive the sleep sample current. + + required: + - monitored-battery + - rockchip,resistor-sense-micro-ohms + - rockchip,sleep-enter-current-microamp + - rockchip,sleep-filter-current-microamp + allOf: - if: properties:
@@ -323,6 +364,13 @@ examples: }; }; + rk817_charger: charger { + monitored-battery = <&battery>; + rockchip,resistor-sense-micro-ohms = <10000>; + rockchip,sleep-enter-current-microamp = <300000>; + rockchip,sleep-filter-current-microamp = <100000>; + }; + rk817_codec: codec { rockchip,mic-in-differential; };
Signature · 7 lines
2.25.1 _______________________________________________ Linux-rockchip mailing list [email protected] http://lists.infradead.org/mailman/listinfo/linux-rockchip
PATCH RESEND v7 2/4 mfd: Add Rockchip rk817 battery charger support
In reply to Chris MorganFrom: Chris Morgan <[email protected]>
Add rk817 charger support cell to rk808 mfd driver.
--- drivers/mfd/rk808.c | 16 ++++++- include/linux/mfd/rk808.h | 91 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 106 insertions(+), 1 deletion(-)
drivers/mfd/rk808.c +15 -1
@@ -67,6 +67,10 @@ static bool rk817_is_volatile_reg(struct device *dev, unsigned int reg) case RK817_SECONDS_REG ... RK817_WEEKS_REG:case RK817_RTC_STATUS_REG :case RK817_CODEC_DTOP_LPT_SRST : + case RK817_GAS_GAUGE_ADC_CONFIG0 ... RK817_GAS_GAUGE_CUR_ADC_K0: +case RK817_PMIC_CHRG_STS : +case RK817_PMIC_CHRG_OUT : +case RK817_PMIC_CHRG_IN :case RK817_INT_STS_REG0 :case RK817_INT_STS_REG1 :case RK817_INT_STS_REG2 :
@@ -74,7 +78,7 @@ static bool rk817_is_volatile_reg(struct device *dev, unsigned int reg)return true; } -return true; +return false; }static const struct regmap_config rk818_regmap_config = {
@@ -127,6 +131,11 @@ static const struct resource rk817_pwrkey_resources[] = { DEFINE_RES_IRQ(RK817_IRQ_PWRON_FALL), }; +static const struct resource rk817_charger_resources[] = { +DEFINE_RES_IRQ (RK817_IRQ_PLUG_IN ), +DEFINE_RES_IRQ (RK817_IRQ_PLUG_OUT ), +}; +static const struct mfd_cell rk805s[] = { { .name ="rk808-clkout" , }, { .name ="rk808-regulator" , },
@@ -166,6 +175,11 @@ static const struct mfd_cell rk817s[] = { .resources = &rk817_rtc_resources[0], }, { .name = "rk817-codec",}, + { + .name = "rk817-charger", + .num_resources = ARRAY_SIZE(rk817_charger_resources), + .resources = &rk817_charger_resources[0], + }, }; static const struct mfd_cell rk818s[] = {
include/linux/mfd/rk808.h +91 -0
107 lines not on this page · raw message
Signature · 7 lines
2.25.1 _______________________________________________ Linux-rockchip mailing list [email protected] http://lists.infradead.org/mailman/listinfo/linux-rockchip
PATCH RESEND v7 3/4 power: supply: Add charger driver for Rockchip RK817
In reply to Chris MorganFrom: Chris Morgan <[email protected]>
Add support for the Rockchip rk817 battery charger integrated into the rk817 PMIC.
--- drivers/power/supply/Kconfig | 6 + drivers/power/supply/Makefile | 1 + drivers/power/supply/rk817_charger.c | 1157 ++++++++++++++++++++++++++ 3 files changed, 1164 insertions(+) create mode 100644 drivers/power/supply/rk817_charger.c
drivers/power/supply/Kconfig +6 -0
@@ -708,6 +708,12 @@ config CHARGER_BQ256XX charge management and system power path management devices for single cell Li-ion and Li-polymer batteries. +config CHARGER_RK817 + tristate "Rockchip RK817 PMIC Battery Charger" + depends on MFD_RK808 + help + Say Y to include support for Rockchip RK817 Battery Charger. + config CHARGER_SMB347 tristate "Summit Microelectronics SMB3XX Battery Charger" depends on I2C
drivers/power/supply/Makefile +1 -0
@@ -91,6 +91,7 @@ obj-$(CONFIG_CHARGER_BQ2515X) += bq2515x_charger.o obj-$(CONFIG_CHARGER_BQ25890) += bq25890_charger.o obj-$(CONFIG_CHARGER_BQ25980) += bq25980_charger.o obj-$(CONFIG_CHARGER_BQ256XX) += bq256xx_charger.o +obj-$(CONFIG_CHARGER_RK817) += rk817_charger.o obj-$(CONFIG_CHARGER_SMB347) += smb347-charger.o obj-$(CONFIG_CHARGER_TPS65090) += tps65090-charger.o obj-$(CONFIG_CHARGER_TPS65217) += tps65217_charger.o
drivers/power/supply/rk817_charger.c new file +1157 -0
1,157 lines not on this page · raw message
Signature · 7 lines
2.25.1 _______________________________________________ Linux-rockchip mailing list [email protected] http://lists.infradead.org/mailman/listinfo/linux-rockchip
kernel test robot
build botRe: [RESEND 3/4 v7] power: supply: Add charger driver for Rockchip RK817
Thank you for the patch! Perhaps something to improve:
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/[email protected]/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
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
Signature · 2 lines
0-DAY CI Kernel Test Service https://01.org/lkp
Re: [RESEND 3/4 v7] power: supply: Add charger driver for Rockchip RK817
Quoted 3 lines · kernel test robot
Hi Chris,
Thank you for the patch! Perhaps something to improve:
I'm afraid I'm not sure the best way to fix this. The only thing I can think of is for now the driver should only be for systems with a Rockchip RK817 PMIC (to my knowledge only ARM based systems from Rockchip), but it looks like the arch was set as parisc. Even still, as long as some of the functions ahead of it don't error out each of those variables should be used. Is there a way to confirm these warnings?
Thank you.
Quoted 180 lines
[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(a)intel.com/config) compiler: hppa-linux-gcc (GCC) 12.1.0reproduce (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 checkout008e6f0d590e275cbb56d4506b5638156506dd40
# save the config file
mkdirbuild_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/bashdrivers/power/supply/If you fix the issue, kindly add following tag where applicable
Reported-by kernel test robot <[email protected]>All warnings (new ones prefixed by >>):
drivers/power/supply/rk817_charger.c: In function 'rk817_read_or_set_full_charge_on_boot':Quoted 1 line
Quoted 1 line
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; | ^~~~~~~~Quoted 1 line
Quoted 1 line
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; | ^~~~~~~~Quoted 1 line
Quoted 1 line
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.c692 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;Quoted 1 line
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 } 826Signature · 2 lines
0-DAY CI Kernel Test Service https://01.org/lkp
Re: [RESEND 3/4 v7] power: supply: Add charger driver for Rockchip RK817
Quoted 9 lines · Chris Morgan
Quoted 3 lines · kernel test robot
Hi Chris,
Thank you for the patch! Perhaps something to improve:
I'm afraid I'm not sure the best way to fix this. The only thing I can think of is for now the driver should only be for systems with a Rockchip RK817 PMIC (to my knowledge only ARM based systems from Rockchip),
Why? We want to compile test everything everywhere,
Quoted 1 line
but it looks like the arch was set as parisc.
The arch itself does not matter unless the actual warning is specific to it.
Quoted 4 lines
Even still,
as long as some of the functions ahead of it don't error out each of those variables should be used. Is there a way to confirm these warnings?
Just compile and see by yourself. The error should be visible on multiple archs. If not, then use parisc. Ubuntu provides most of cross compilers so it's extra easy to use. The ones not provided by Ubuntu are also here:
https://mirrors.edge.kernel.org/pub/tools/crosstool/
Best regards,
Krzysztof
PATCH RESEND v7 4/4 arm64: dts: rockchip: add rk817 chg to Odroid Go Advance
In reply to Chris MorganFrom: Chris Morgan <[email protected]>
Add the new rk817 charger driver to the Odroid Go Advance. Create a monitored battery node as well for the charger to use. All values from monitored battery are gathered from the BSP kernel for the Odroid Go Advance provided by HardKernel.
--- .../boot/dts/rockchip/rk3326-odroid-go2.dts | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+)
arch/arm64/boot/dts/rockchip/rk3326-odroid-go2.dts +26 -0
@@ -52,6 +52,25 @@ backlight: backlight { pwms = <&pwm1 0 25000 0>; }; + battery: battery { + compatible = "simple-battery"; + charge-full-design-microamp-hours = <3000000>; + charge-term-current-microamp = <300000>; + constant-charge-current-max-microamp = <2000000>; + constant-charge-voltage-max-microvolt = <4200000>; + factory-internal-resistance-micro-ohms = <180000>; + voltage-max-design-microvolt = <4100000>; + voltage-min-design-microvolt = <3500000>; + + ocv-capacity-celsius = <20>; + ocv-capacity-table-0 = <4046950 100>, <4001920 95>, <3967900 90>, <3919950 85>, + <3888450 80>, <3861850 75>, <3831540 70>, <3799130 65>, + <3768190 60>, <3745650 55>, <3726610 50>, <3711630 45>, + <3696720 40>, <3685660 35>, <3674950 30>, <3663050 25>, + <3649470 20>, <3635260 15>, <3616920 10>, <3592440 5>, + <3574170 0>; + }; + gpio-keys { compatible = "gpio-keys"; pinctrl-names = "default";
@@ -472,6 +491,13 @@ usb_midu: BOOST { }; }; + rk817_charger: charger { + monitored-battery = <&battery>; + rockchip,resistor-sense-micro-ohms = <10000>; + rockchip,sleep-enter-current-microamp = <300000>; + rockchip,sleep-filter-current-microamp = <100000>; + }; + rk817_codec: codec { rockchip,mic-in-differential; };
Signature · 7 lines
2.25.1 _______________________________________________ Linux-rockchip mailing list [email protected] http://lists.infradead.org/mailman/listinfo/linux-rockchip