power: supply: Add Support for RK817 Charger
v3 cover power: supply: Add Support for RK817 Charger
From: Chris Morgan <[email protected]>
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 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 charger to Odroid Go Advance
.../devicetree/bindings/mfd/rk808.txt | 36 +- .../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 | 922 ++++++++++++++++++ include/linux/mfd/rk808.h | 87 ++ 7 files changed, 1092 insertions(+), 2 deletions(-) create mode 100644 drivers/power/supply/rk817_charger.c
Signature · 1 line
2.25.1
PATCH v3 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.
--- .../devicetree/bindings/mfd/rk808.txt | 36 ++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-)
Documentation/devicetree/bindings/mfd/rk808.txt +35 -1
@@ -70,13 +70,40 @@ Optional RK817 properties: - vcc8-supply: The input supply for BOOST - vcc9-supply: The input supply for OTG_SWITCH + - codec: The child node for the codec to hold additional properties. If no additional properties are required for the codec, this node can be omitted. - - rockchip,mic-in-differential: Telling if the microphone uses differential mode. Should be under the codec child node. +- battery: The child node for the charger to hold additional properties. + If a battery is not in use, this node can be omitted. If a + battery node is used, the following values are required: + rockchip,resistor-sense, rockchip,sleep-enter-current, + rockchip,sleep-filter-current, and 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: Value in microohms of the battery sense + resistor. The PMIC only supports values + of either 10000 or 20000. This value is + used by the driver to set the correct + divisor value to translate ADC readings + into the proper units of measure. +- rockchip,sleep-enter-current-microamp: 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: Value in microamps of the sleep + filter current for the charger. + Value is used by the driver to derive + the sleep sample current. + Optional RK818 properties: - vcc1-supply: The input supply for DCDC_REG1 - vcc2-supply: The input supply for DCDC_REG2
@@ -459,6 +486,13 @@ Example: }; }; + rk817_battery: battery { + monitored-battery = <&battery_cell>; + 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 · 1 line
2.25.1
Rob Herring
maintainerRe: [PATCH v3 1/4] dt-bindings: Add Rockchip rk817 battery charger support
Quoted 12 lines · Chris Morgan
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.
Quoted 5 lines
Signed-off-by Chris Morgan <[email protected]>Signed-off-by Maya Matuszczyk <[email protected]>--- .../devicetree/bindings/mfd/rk808.txt | 36 ++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-)
Kind of a big change without converting this binding to DT schema first.
Quoted 6 lines
Documentation/devicetree/bindings/mfd/rk808.txt +0
-0
Documentation/devicetree/bindings/mfd/rk808.txt Optional RK817 properties: · line 76
Quoted 8 lines
Documentation/devicetree/bindings/mfd/rk808.txt +1
-1@@ -70,13 +70,40 @@ Optional RK817 properties: - vcc8-supply: The input supply for BOOST - vcc9-supply: The input supply for OTG_SWITCH + - codec: The child node for the codec to hold additional properties. If no additional properties are required for the codec, this node can be omitted. -
Unrelated whitespace changes.
Documentation/devicetree/bindings/mfd/rk808.txt Optional RK817 properties: · line 84
Quoted 8 lines
Documentation/devicetree/bindings/mfd/rk808.txt +5
-0- rockchip,mic-in-differential: Telling if the microphone uses differential mode. Should be under the codec child node. +- battery: The child node for the charger to hold additional properties. + If a battery is not in use, this node can be omitted. If a + battery node is used, the following values are required: + rockchip,resistor-sense, rockchip,sleep-enter-current, + rockchip,sleep-filter-current, and a phandle to a
Property names are out of date...
Documentation/devicetree/bindings/mfd/rk808.txt Optional RK817 properties: · line 91
Quoted 7 lines
Documentation/devicetree/bindings/mfd/rk808.txt +7
-0+ 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.
Please list these 1 per line and make it clearer this is the list of properties for the battery node.
Quoted 36 lines
Documentation/devicetree/bindings/mfd/rk808.txt +22
-0+- rockchip,resistor-sense-micro-ohms: Value in microohms of the battery sense + resistor. The PMIC only supports values + of either 10000 or 20000. This value is + used by the driver to set the correct + divisor value to translate ADC readings + into the proper units of measure. +- rockchip,sleep-enter-current-microamp: 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: Value in microamps of the sleep + filter current for the charger. + Value is used by the driver to derive + the sleep sample current. + Optional RK818 properties: - vcc1-supply: The input supply for DCDC_REG1 - vcc2-supply: The input supply for DCDC_REG2@@ -459,6 +486,13 @@ Example: }; }; + rk817_battery: battery { + monitored-battery = <&battery_cell>; + 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 · 1 line
2.25.1
Re: [PATCH v3 1/4] dt-bindings: Add Rockchip rk817 battery charger support
Quoted 13 lines · Rob Herring
Quoted 12 lines · Chris Morgan
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.
Quoted 7 lines
Quoted 5 lines
Signed-off-by Chris Morgan <[email protected]>Signed-off-by Maya Matuszczyk <[email protected]>--- .../devicetree/bindings/mfd/rk808.txt | 36 ++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-)Kind of a big change without converting this binding to DT schema first.
I can try to convert the bindings to yaml, but I might need some help. It’s a pretty big file and there’s lots of rules for each of the different compatibles. Do you know of a good example where I can find one with compatible specific rules? All of the mfd ones I looked at don’t seem to have much (and my attempt is triggering yamllint about duplicate if/then keys).
Thank you.
Quoted 8 lines
Quoted 8 lines
Documentation/devicetree/bindings/mfd/rk808.txt +0
-0@@ -70,13 +70,40 @@ Optional RK817 properties:
Quoted 9 lines
Documentation/devicetree/bindings/mfd/rk808.txt Optional RK817 properties: · line 76
Quoted 7 lines
Documentation/devicetree/bindings/mfd/rk808.txt +1
-1- vcc8-supply: The input supply for BOOST - vcc9-supply: The input supply for OTG_SWITCH + - codec: The child node for the codec to hold additional properties. If no additional properties are required for the codec, this node can be omitted. -Unrelated whitespace changes.
I thought the whitespace helped seperate the supplies from the codec, and did the same thing with whitespace to seperate the battery from the codec. I can change it back if need be.
Quoted 4 lines
Quoted 4 lines
Documentation/devicetree/bindings/mfd/rk808.txt +0
-0- rockchip,mic-in-differential: Telling if the microphone uses differential mode. Should be under the codec child node.
Quoted 8 lines
Documentation/devicetree/bindings/mfd/rk808.txt Optional RK817 properties: · line 84
Quoted 5 lines
Documentation/devicetree/bindings/mfd/rk808.txt +5
-0+- battery: The child node for the charger to hold additional properties. + If a battery is not in use, this node can be omitted. If a + battery node is used, the following values are required: + rockchip,resistor-sense, rockchip,sleep-enter-current, + rockchip,sleep-filter-current, and a phandle to aProperty names are out of date...
Good catch, sorry about that.
Quoted 10 lines
Documentation/devicetree/bindings/mfd/rk808.txt Optional RK817 properties: · line 91
Quoted 7 lines
Documentation/devicetree/bindings/mfd/rk808.txt +7
-0+ 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.Please list these 1 per line and make it clearer this is the list of properties for the battery node.
Will do, thank you.
Quoted 23 lines
Quoted 23 lines
Documentation/devicetree/bindings/mfd/rk808.txt +15
-0+- rockchip,resistor-sense-micro-ohms: Value in microohms of the battery sense + resistor. The PMIC only supports values + of either 10000 or 20000. This value is + used by the driver to set the correct + divisor value to translate ADC readings + into the proper units of measure. +- rockchip,sleep-enter-current-microamp: 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: Value in microamps of the sleep + filter current for the charger. + Value is used by the driver to derive + the sleep sample current. + Optional RK818 properties: - vcc1-supply: The input supply for DCDC_REG1 - vcc2-supply: The input supply for DCDC_REG2@@ -459,6 +486,13 @@ Example: }; };
Quoted 14 lines
Quoted 14 lines
Documentation/devicetree/bindings/mfd/rk808.txt +7
-0+ rk817_battery: battery { + monitored-battery = <&battery_cell>; + 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 · 1 line
2.25.1
_______________________________________________
Linux-rockchip mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/linux-rockchip
PATCH v3 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 | 87 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 102 insertions(+), 1 deletion(-)
drivers/mfd/rk808.c +15 -1
@@ -66,6 +66,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 :
@@ -73,7 +77,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 = {
@@ -126,6 +130,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" , },
@@ -165,6 +174,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 +87 -0
103 lines not on this page · raw message
Signature · 1 line
2.25.1
PATCH v3 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 | 922 +++++++++++++++++++++++++++ 3 files changed, 929 insertions(+) create mode 100644 drivers/power/supply/rk817_charger.c
drivers/power/supply/Kconfig +6 -0
@@ -666,6 +666,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
@@ -87,6 +87,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 +922 -0
922 lines not on this page · raw message
Signature · 1 line
2.25.1
PATCH v3 4/4 arm64: dts: rockchip: add rk817 charger 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_cell: battery-cell { + 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 = <4106000 100>, <4071000 95>, <4018000 90>, <3975000 85>, + <3946000 80>, <3908000 75>, <3877000 70>, <3853000 65>, + <3834000 60>, <3816000 55>, <3802000 50>, <3788000 45>, + <3774000 40>, <3760000 35>, <3748000 30>, <3735000 25>, + <3718000 20>, <3697000 15>, <3685000 10>, <3625000 5>, + <3500000 0>; + }; + gpio-keys { compatible = "gpio-keys"; pinctrl-names = "default";
@@ -462,6 +481,13 @@ regulator-state-mem { }; }; + rk817_battery: battery { + monitored-battery = <&battery_cell>; + 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 · 1 line
2.25.1