diff mbox series

[7/7] ARM: dts: s5pv210: Add charger support in Aries

Message ID CY4PR04MB05671BD0A7FF349E8B04EE84CB189@CY4PR04MB0567.namprd04.prod.outlook.com (mailing list archive)
State Superseded
Headers show
Series [1/7] ARM: dts: s5pv210: Split memory nodes to match spec | expand

Commit Message

Jonathan Bakker March 23, 2022, 3:03 p.m. UTC
Add charger-manager support to Aries boards to allow safe
charging of the battery without the need for userspace control.

Signed-off-by: Jonathan Bakker <xc-racer2@live.ca>
---
 arch/arm/boot/dts/s5pv210-fascinate4g.dts | 162 ++++++++++++++++++++++
 arch/arm/boot/dts/s5pv210-galaxys.dts     | 144 +++++++++++++++++++
 2 files changed, 306 insertions(+)

Comments

Krzysztof Kozlowski March 23, 2022, 3:31 p.m. UTC | #1
On 23/03/2022 16:03, Jonathan Bakker wrote:
> Add charger-manager support to Aries boards to allow safe
> charging of the battery without the need for userspace control.
> 
> Signed-off-by: Jonathan Bakker <xc-racer2@live.ca>
> ---
>  arch/arm/boot/dts/s5pv210-fascinate4g.dts | 162 ++++++++++++++++++++++
>  arch/arm/boot/dts/s5pv210-galaxys.dts     | 144 +++++++++++++++++++
>  2 files changed, 306 insertions(+)
> 
> diff --git a/arch/arm/boot/dts/s5pv210-fascinate4g.dts b/arch/arm/boot/dts/s5pv210-fascinate4g.dts
> index 7427c84f1126..9530231b7a70 100644
> --- a/arch/arm/boot/dts/s5pv210-fascinate4g.dts
> +++ b/arch/arm/boot/dts/s5pv210-fascinate4g.dts
> @@ -57,6 +57,168 @@
>  		pinctrl-0 = <&main_micbias_ena>;
>  	};
>  
> +	thermal-zones {
> +		batt_thermal: batt-thermal {
> +			polling-delay-passive = <60000>; /* 60 seconds */

There is no passive cooling device, so why do you need it?

> +			polling-delay = <600000>; /* 600 seconds */
> +
> +			thermal-sensors = <&batt_thermistor>;
> +		};
> +	};
> +
> +	batt_thermistor: thermal-sensor-0 {
> +		compatible = "generic-adc-thermal";
> +		#thermal-sensor-cells = <0>;
> +		io-channels = <&adc 6>;
> +		io-channel-names = "sensor-channel";
> +
> +		temperature-lookup-table = <
> +			(-20000) 1859
> +			(-19000) 1846
> +			(-18000) 1832
> +			(-17000) 1818
> +			(-16000) 1804
> +			(-15000) 1790
> +			(-14000) 1773
> +			(-13000) 1756
> +			(-12000) 1739
> +			(-11000) 1722
> +			(-10000) 1705
> +			(-9000) 1691
> +			(-8000) 1677
> +			(-7000) 1663
> +			(-6000) 1649
> +			(-5000) 1635
> +			(-4000) 1550
> +			(-3000) 1510
> +			(-2000) 1500
> +			(-1000) 1490
> +			0 1480
> +			1000 1470
> +			2000 1460
> +			3000 1450
> +			4000 1430
> +			5000 1420
> +			6000 1406
> +			7000 1386
> +			8000 1366
> +			9000 1346
> +			10000 1326
> +			11000 1302
> +			12000 1278
> +			13000 1254
> +			14000 1230
> +			15000 1206
> +			16000 1182
> +			17000 1158
> +			18000 1134
> +			19000 1110
> +			20000 1086
> +			21000 1059
> +			22000 1035
> +			23000 1011
> +			24000 987
> +			25000 963
> +			26000 937
> +			27000 913
> +			28000 889
> +			29000 865
> +			30000 841
> +			31000 816
> +			32000 794
> +			33000 772
> +			34000 750
> +			35000 728
> +			36000 708
> +			37000 690
> +			38000 672
> +			39000 654
> +			40000 636
> +			41000 616
> +			42000 599
> +			43000 580
> +			44000 565
> +			45000 548
> +			46000 529
> +			47000 512
> +			48000 495
> +			49000 478
> +			50000 461
> +			51000 440
> +			52000 431
> +			53000 416
> +			54000 405
> +			55000 396
> +			56000 375
> +			57000 360
> +			58000 347
> +			59000 334
> +			60000 325
> +			61000 311
> +			62000 303
> +			63000 296
> +			64000 290
> +			65000 279
> +			66000 265
> +			67000 254
> +			68000 240
> +			69000 220
> +			70000 206>;
> +	};
> +
> +	charger_manager: charger-manager-0 {
> +		compatible = "charger-manager";

Sorry, this is not a hardware. It's a hack to configure kernel charging
driver via DT which was made deprecated.

Best regards,
Krzysztof
Jonathan Bakker March 23, 2022, 5:20 p.m. UTC | #2
On 2022-03-23 8:31 a.m., krzk@kernel.org wrote:
> On 23/03/2022 16:03, Jonathan Bakker wrote:
>> Add charger-manager support to Aries boards to allow safe
>> charging of the battery without the need for userspace control.
>>
>> Signed-off-by: Jonathan Bakker <xc-racer2@live.ca>
>> ---
>>  arch/arm/boot/dts/s5pv210-fascinate4g.dts | 162 ++++++++++++++++++++++
>>  arch/arm/boot/dts/s5pv210-galaxys.dts     | 144 +++++++++++++++++++
>>  2 files changed, 306 insertions(+)
>>
>> diff --git a/arch/arm/boot/dts/s5pv210-fascinate4g.dts b/arch/arm/boot/dts/s5pv210-fascinate4g.dts
>> index 7427c84f1126..9530231b7a70 100644
>> --- a/arch/arm/boot/dts/s5pv210-fascinate4g.dts
>> +++ b/arch/arm/boot/dts/s5pv210-fascinate4g.dts
>> @@ -57,6 +57,168 @@
>>  		pinctrl-0 = <&main_micbias_ena>;
>>  	};
>>  
>> +	thermal-zones {
>> +		batt_thermal: batt-thermal {
>> +			polling-delay-passive = <60000>; /* 60 seconds */
> 
> There is no passive cooling device, so why do you need it?
> 

The charger manager code needs a passive cooling device, so that's
why this is present here.

>> +			polling-delay = <600000>; /* 600 seconds */
>> +
>> +			thermal-sensors = <&batt_thermistor>;
>> +		};
>> +	};
>> +
>> +	batt_thermistor: thermal-sensor-0 {
>> +		compatible = "generic-adc-thermal";
>> +		#thermal-sensor-cells = <0>;
>> +		io-channels = <&adc 6>;
>> +		io-channel-names = "sensor-channel";
>> +
>> +		temperature-lookup-table = <
>> +			(-20000) 1859
>> +			(-19000) 1846
>> +			(-18000) 1832
>> +			(-17000) 1818
>> +			(-16000) 1804
>> +			(-15000) 1790
>> +			(-14000) 1773
>> +			(-13000) 1756
>> +			(-12000) 1739
>> +			(-11000) 1722
>> +			(-10000) 1705
>> +			(-9000) 1691
>> +			(-8000) 1677
>> +			(-7000) 1663
>> +			(-6000) 1649
>> +			(-5000) 1635
>> +			(-4000) 1550
>> +			(-3000) 1510
>> +			(-2000) 1500
>> +			(-1000) 1490
>> +			0 1480
>> +			1000 1470
>> +			2000 1460
>> +			3000 1450
>> +			4000 1430
>> +			5000 1420
>> +			6000 1406
>> +			7000 1386
>> +			8000 1366
>> +			9000 1346
>> +			10000 1326
>> +			11000 1302
>> +			12000 1278
>> +			13000 1254
>> +			14000 1230
>> +			15000 1206
>> +			16000 1182
>> +			17000 1158
>> +			18000 1134
>> +			19000 1110
>> +			20000 1086
>> +			21000 1059
>> +			22000 1035
>> +			23000 1011
>> +			24000 987
>> +			25000 963
>> +			26000 937
>> +			27000 913
>> +			28000 889
>> +			29000 865
>> +			30000 841
>> +			31000 816
>> +			32000 794
>> +			33000 772
>> +			34000 750
>> +			35000 728
>> +			36000 708
>> +			37000 690
>> +			38000 672
>> +			39000 654
>> +			40000 636
>> +			41000 616
>> +			42000 599
>> +			43000 580
>> +			44000 565
>> +			45000 548
>> +			46000 529
>> +			47000 512
>> +			48000 495
>> +			49000 478
>> +			50000 461
>> +			51000 440
>> +			52000 431
>> +			53000 416
>> +			54000 405
>> +			55000 396
>> +			56000 375
>> +			57000 360
>> +			58000 347
>> +			59000 334
>> +			60000 325
>> +			61000 311
>> +			62000 303
>> +			63000 296
>> +			64000 290
>> +			65000 279
>> +			66000 265
>> +			67000 254
>> +			68000 240
>> +			69000 220
>> +			70000 206>;
>> +	};
>> +
>> +	charger_manager: charger-manager-0 {
>> +		compatible = "charger-manager";
> 
> Sorry, this is not a hardware. It's a hack to configure kernel charging
> driver via DT which was made deprecated.

Thanks, I missed the deprecation notice in the binding file.

What would be the better way of creating a functional charging system?
A new device-specific driver?  Userspace monitoring of temperature/connected
device and extensions to the max8998 driver for enabling/disabling/configuring
charging via the power supply subsystem instead of the regulator subsystem?
Something else?

The way I understand the charging system, there is

- The fuelgauge (max17042)
- The max8998 charger portion, including the ability to vary the current
- The thermistor for checking battery temperature
- The FSA9480 to determine what sort of cable is connected

Thanks,
Jonathan

> 
> Best regards,
> Krzysztof
>
Krzysztof Kozlowski March 24, 2022, 11:47 a.m. UTC | #3
On 23/03/2022 18:20, Jonathan Bakker wrote:
> 
> 
> On 2022-03-23 8:31 a.m., krzk@kernel.org wrote:
>> On 23/03/2022 16:03, Jonathan Bakker wrote:
>>> Add charger-manager support to Aries boards to allow safe
>>> charging of the battery without the need for userspace control.
>>>
>>> Signed-off-by: Jonathan Bakker <xc-racer2@live.ca>
>>> ---
>>>  arch/arm/boot/dts/s5pv210-fascinate4g.dts | 162 ++++++++++++++++++++++
>>>  arch/arm/boot/dts/s5pv210-galaxys.dts     | 144 +++++++++++++++++++
>>>  2 files changed, 306 insertions(+)
>>>
>>> diff --git a/arch/arm/boot/dts/s5pv210-fascinate4g.dts b/arch/arm/boot/dts/s5pv210-fascinate4g.dts
>>> index 7427c84f1126..9530231b7a70 100644
>>> --- a/arch/arm/boot/dts/s5pv210-fascinate4g.dts
>>> +++ b/arch/arm/boot/dts/s5pv210-fascinate4g.dts
>>> @@ -57,6 +57,168 @@
>>>  		pinctrl-0 = <&main_micbias_ena>;
>>>  	};
>>>  
>>> +	thermal-zones {
>>> +		batt_thermal: batt-thermal {
>>> +			polling-delay-passive = <60000>; /* 60 seconds */
>>
>> There is no passive cooling device, so why do you need it?
>>
> 
> The charger manager code needs a passive cooling device, so that's
> why this is present here.
> 
>>> +			polling-delay = <600000>; /* 600 seconds */
>>> +
>>> +			thermal-sensors = <&batt_thermistor>;
>>> +		};
>>> +	};
>>> +
>>> +	batt_thermistor: thermal-sensor-0 {
>>> +		compatible = "generic-adc-thermal";
>>> +		#thermal-sensor-cells = <0>;
>>> +		io-channels = <&adc 6>;
>>> +		io-channel-names = "sensor-channel";
>>> +
>>> +		temperature-lookup-table = <
>>> +			(-20000) 1859
>>> +			(-19000) 1846
>>> +			(-18000) 1832
>>> +			(-17000) 1818
>>> +			(-16000) 1804
>>> +			(-15000) 1790
>>> +			(-14000) 1773
>>> +			(-13000) 1756
>>> +			(-12000) 1739
>>> +			(-11000) 1722
>>> +			(-10000) 1705
>>> +			(-9000) 1691
>>> +			(-8000) 1677
>>> +			(-7000) 1663
>>> +			(-6000) 1649
>>> +			(-5000) 1635
>>> +			(-4000) 1550
>>> +			(-3000) 1510
>>> +			(-2000) 1500
>>> +			(-1000) 1490
>>> +			0 1480
>>> +			1000 1470
>>> +			2000 1460
>>> +			3000 1450
>>> +			4000 1430
>>> +			5000 1420
>>> +			6000 1406
>>> +			7000 1386
>>> +			8000 1366
>>> +			9000 1346
>>> +			10000 1326
>>> +			11000 1302
>>> +			12000 1278
>>> +			13000 1254
>>> +			14000 1230
>>> +			15000 1206
>>> +			16000 1182
>>> +			17000 1158
>>> +			18000 1134
>>> +			19000 1110
>>> +			20000 1086
>>> +			21000 1059
>>> +			22000 1035
>>> +			23000 1011
>>> +			24000 987
>>> +			25000 963
>>> +			26000 937
>>> +			27000 913
>>> +			28000 889
>>> +			29000 865
>>> +			30000 841
>>> +			31000 816
>>> +			32000 794
>>> +			33000 772
>>> +			34000 750
>>> +			35000 728
>>> +			36000 708
>>> +			37000 690
>>> +			38000 672
>>> +			39000 654
>>> +			40000 636
>>> +			41000 616
>>> +			42000 599
>>> +			43000 580
>>> +			44000 565
>>> +			45000 548
>>> +			46000 529
>>> +			47000 512
>>> +			48000 495
>>> +			49000 478
>>> +			50000 461
>>> +			51000 440
>>> +			52000 431
>>> +			53000 416
>>> +			54000 405
>>> +			55000 396
>>> +			56000 375
>>> +			57000 360
>>> +			58000 347
>>> +			59000 334
>>> +			60000 325
>>> +			61000 311
>>> +			62000 303
>>> +			63000 296
>>> +			64000 290
>>> +			65000 279
>>> +			66000 265
>>> +			67000 254
>>> +			68000 240
>>> +			69000 220
>>> +			70000 206>;
>>> +	};
>>> +
>>> +	charger_manager: charger-manager-0 {
>>> +		compatible = "charger-manager";
>>
>> Sorry, this is not a hardware. It's a hack to configure kernel charging
>> driver via DT which was made deprecated.
> 
> Thanks, I missed the deprecation notice in the binding file.
> 
> What would be the better way of creating a functional charging system?
> A new device-specific driver?

I am not sure, but maybe you could use charger-manager, just configure
it from user-space (or add such features). Better ask power supply
maintainer. But anyway charger-manager is mostly abandoned. I don't
think anyone develops it.

>  Userspace monitoring of temperature/connected
> device and extensions to the max8998 driver for enabling/disabling/configuring
> charging via the power supply subsystem instead of the regulator subsystem?
> Something else?

Enabling charging via regulators was done only for some drivers, I think
for charger-manager. I don't think it is the recommended way now.

Everything should be controlled rather via power supply from user-space.

How postmarketos or lineageos are doing it?

> 
> The way I understand the charging system, there is
> 
> - The fuelgauge (max17042)
> - The max8998 charger portion, including the ability to vary the current
> - The thermistor for checking battery temperature
> - The FSA9480 to determine what sort of cable is connected
> 

Best regards,
Krzysztof
Jonathan Bakker March 25, 2022, 2:23 a.m. UTC | #4
Hi Krzysztof,

On 2022-03-24 4:47 a.m., Krzysztof Kozlowski wrote:
> On 23/03/2022 18:20, Jonathan Bakker wrote:
>>
>>
>> On 2022-03-23 8:31 a.m., krzk@kernel.org wrote:
>>> On 23/03/2022 16:03, Jonathan Bakker wrote:
>>>> Add charger-manager support to Aries boards to allow safe
>>>> charging of the battery without the need for userspace control.
>>>>
>>>> Signed-off-by: Jonathan Bakker <xc-racer2@live.ca>
>>>> ---
>>>>  arch/arm/boot/dts/s5pv210-fascinate4g.dts | 162 ++++++++++++++++++++++
>>>>  arch/arm/boot/dts/s5pv210-galaxys.dts     | 144 +++++++++++++++++++
>>>>  2 files changed, 306 insertions(+)
>>>>
>>>> diff --git a/arch/arm/boot/dts/s5pv210-fascinate4g.dts b/arch/arm/boot/dts/s5pv210-fascinate4g.dts
>>>> index 7427c84f1126..9530231b7a70 100644
>>>> --- a/arch/arm/boot/dts/s5pv210-fascinate4g.dts
>>>> +++ b/arch/arm/boot/dts/s5pv210-fascinate4g.dts
>>>> @@ -57,6 +57,168 @@
>>>>  		pinctrl-0 = <&main_micbias_ena>;
>>>>  	};
>>>>  
>>>> +	thermal-zones {
>>>> +		batt_thermal: batt-thermal {
>>>> +			polling-delay-passive = <60000>; /* 60 seconds */
>>>
>>> There is no passive cooling device, so why do you need it?
>>>
>>
>> The charger manager code needs a passive cooling device, so that's
>> why this is present here.
>>
>>>> +			polling-delay = <600000>; /* 600 seconds */
>>>> +
>>>> +			thermal-sensors = <&batt_thermistor>;
>>>> +		};
>>>> +	};
>>>> +
>>>> +	batt_thermistor: thermal-sensor-0 {
>>>> +		compatible = "generic-adc-thermal";
>>>> +		#thermal-sensor-cells = <0>;
>>>> +		io-channels = <&adc 6>;
>>>> +		io-channel-names = "sensor-channel";
>>>> +
>>>> +		temperature-lookup-table = <
>>>> +			(-20000) 1859
>>>> +			(-19000) 1846
>>>> +			(-18000) 1832
>>>> +			(-17000) 1818
>>>> +			(-16000) 1804
>>>> +			(-15000) 1790
>>>> +			(-14000) 1773
>>>> +			(-13000) 1756
>>>> +			(-12000) 1739
>>>> +			(-11000) 1722
>>>> +			(-10000) 1705
>>>> +			(-9000) 1691
>>>> +			(-8000) 1677
>>>> +			(-7000) 1663
>>>> +			(-6000) 1649
>>>> +			(-5000) 1635
>>>> +			(-4000) 1550
>>>> +			(-3000) 1510
>>>> +			(-2000) 1500
>>>> +			(-1000) 1490
>>>> +			0 1480
>>>> +			1000 1470
>>>> +			2000 1460
>>>> +			3000 1450
>>>> +			4000 1430
>>>> +			5000 1420
>>>> +			6000 1406
>>>> +			7000 1386
>>>> +			8000 1366
>>>> +			9000 1346
>>>> +			10000 1326
>>>> +			11000 1302
>>>> +			12000 1278
>>>> +			13000 1254
>>>> +			14000 1230
>>>> +			15000 1206
>>>> +			16000 1182
>>>> +			17000 1158
>>>> +			18000 1134
>>>> +			19000 1110
>>>> +			20000 1086
>>>> +			21000 1059
>>>> +			22000 1035
>>>> +			23000 1011
>>>> +			24000 987
>>>> +			25000 963
>>>> +			26000 937
>>>> +			27000 913
>>>> +			28000 889
>>>> +			29000 865
>>>> +			30000 841
>>>> +			31000 816
>>>> +			32000 794
>>>> +			33000 772
>>>> +			34000 750
>>>> +			35000 728
>>>> +			36000 708
>>>> +			37000 690
>>>> +			38000 672
>>>> +			39000 654
>>>> +			40000 636
>>>> +			41000 616
>>>> +			42000 599
>>>> +			43000 580
>>>> +			44000 565
>>>> +			45000 548
>>>> +			46000 529
>>>> +			47000 512
>>>> +			48000 495
>>>> +			49000 478
>>>> +			50000 461
>>>> +			51000 440
>>>> +			52000 431
>>>> +			53000 416
>>>> +			54000 405
>>>> +			55000 396
>>>> +			56000 375
>>>> +			57000 360
>>>> +			58000 347
>>>> +			59000 334
>>>> +			60000 325
>>>> +			61000 311
>>>> +			62000 303
>>>> +			63000 296
>>>> +			64000 290
>>>> +			65000 279
>>>> +			66000 265
>>>> +			67000 254
>>>> +			68000 240
>>>> +			69000 220
>>>> +			70000 206>;
>>>> +	};
>>>> +
>>>> +	charger_manager: charger-manager-0 {
>>>> +		compatible = "charger-manager";
>>>
>>> Sorry, this is not a hardware. It's a hack to configure kernel charging
>>> driver via DT which was made deprecated.
>>
>> Thanks, I missed the deprecation notice in the binding file.
>>
>> What would be the better way of creating a functional charging system?
>> A new device-specific driver?
> 
> I am not sure, but maybe you could use charger-manager, just configure
> it from user-space (or add such features). Better ask power supply
> maintainer. But anyway charger-manager is mostly abandoned. I don't
> think anyone develops it.
> 

Yeah, I made it so that it could be probed a year and a half ago, but
there's been very little use of it - there's no in-tree users of it that
I can tell.

>>  Userspace monitoring of temperature/connected
>> device and extensions to the max8998 driver for enabling/disabling/configuring
>> charging via the power supply subsystem instead of the regulator subsystem?
>> Something else?
> 
> Enabling charging via regulators was done only for some drivers, I think
> for charger-manager. I don't think it is the recommended way now.
> 
> Everything should be controlled rather via power supply from user-space.
> 
> How postmarketos or lineageos are doing it?
> 

It's quite varied, but I can't find any examples of a userspace
daemon watching temperature/connection type, although it should be
fairly simple to implement.  A few examples:

- Maemo Leste uses a plugin to their MCE daemon to shutdown on low battery
- postmarketOS uses whatever is in kernel and whatever the DE provides to shutdown
on low battery
 - It also has a power stats collecting software, IIRC, although this might be DE
specific
- LineageOS/Android has healthd, but this appears to be more for gathering stats

In terms of in-tree examples, there's quite the variety:

- The AB8500 driver (used in some STE phones) is fairly similar situation,
with separate fuelgauge, charger and temperature drivers bound together by
an "algorithm" driver that checks temperatures and what is connected (very
similar to charger-manager, but specific to that HW).
- Nokia N900 has temperature reading integrated, but no shutoff
- Pinephone/Pinetab appears to have separate USB/AC charger drivers and
a battery driver, but no temperature monitoring.

So it rather looks like there's no consensus.  I guess I'll do some more research
and drop this patch for now.

Thanks,
Jonathan

>>
>> The way I understand the charging system, there is
>>
>> - The fuelgauge (max17042)
>> - The max8998 charger portion, including the ability to vary the current
>> - The thermistor for checking battery temperature
>> - The FSA9480 to determine what sort of cable is connected
>>
> 
> Best regards,
> Krzysztof
>
diff mbox series

Patch

diff --git a/arch/arm/boot/dts/s5pv210-fascinate4g.dts b/arch/arm/boot/dts/s5pv210-fascinate4g.dts
index 7427c84f1126..9530231b7a70 100644
--- a/arch/arm/boot/dts/s5pv210-fascinate4g.dts
+++ b/arch/arm/boot/dts/s5pv210-fascinate4g.dts
@@ -57,6 +57,168 @@ 
 		pinctrl-0 = <&main_micbias_ena>;
 	};
 
+	thermal-zones {
+		batt_thermal: batt-thermal {
+			polling-delay-passive = <60000>; /* 60 seconds */
+			polling-delay = <600000>; /* 600 seconds */
+
+			thermal-sensors = <&batt_thermistor>;
+		};
+	};
+
+	batt_thermistor: thermal-sensor-0 {
+		compatible = "generic-adc-thermal";
+		#thermal-sensor-cells = <0>;
+		io-channels = <&adc 6>;
+		io-channel-names = "sensor-channel";
+
+		temperature-lookup-table = <
+			(-20000) 1859
+			(-19000) 1846
+			(-18000) 1832
+			(-17000) 1818
+			(-16000) 1804
+			(-15000) 1790
+			(-14000) 1773
+			(-13000) 1756
+			(-12000) 1739
+			(-11000) 1722
+			(-10000) 1705
+			(-9000) 1691
+			(-8000) 1677
+			(-7000) 1663
+			(-6000) 1649
+			(-5000) 1635
+			(-4000) 1550
+			(-3000) 1510
+			(-2000) 1500
+			(-1000) 1490
+			0 1480
+			1000 1470
+			2000 1460
+			3000 1450
+			4000 1430
+			5000 1420
+			6000 1406
+			7000 1386
+			8000 1366
+			9000 1346
+			10000 1326
+			11000 1302
+			12000 1278
+			13000 1254
+			14000 1230
+			15000 1206
+			16000 1182
+			17000 1158
+			18000 1134
+			19000 1110
+			20000 1086
+			21000 1059
+			22000 1035
+			23000 1011
+			24000 987
+			25000 963
+			26000 937
+			27000 913
+			28000 889
+			29000 865
+			30000 841
+			31000 816
+			32000 794
+			33000 772
+			34000 750
+			35000 728
+			36000 708
+			37000 690
+			38000 672
+			39000 654
+			40000 636
+			41000 616
+			42000 599
+			43000 580
+			44000 565
+			45000 548
+			46000 529
+			47000 512
+			48000 495
+			49000 478
+			50000 461
+			51000 440
+			52000 431
+			53000 416
+			54000 405
+			55000 396
+			56000 375
+			57000 360
+			58000 347
+			59000 334
+			60000 325
+			61000 311
+			62000 303
+			63000 296
+			64000 290
+			65000 279
+			66000 265
+			67000 254
+			68000 240
+			69000 220
+			70000 206>;
+	};
+
+	charger_manager: charger-manager-0 {
+		compatible = "charger-manager";
+
+		cm-name = "cm-battery";
+
+		chg-reg-supply = <&charger_reg>;
+
+		/* poll when externally connected */
+		cm-poll-mode = <2>;
+		cm-poll-interval = <30>;
+
+		/* read supply status for status */
+		cm-battery-stat = <0>;
+
+		cm-battery-temp-diff = <5>;
+		cm-battery-hot = <5000>;
+		cm-battery-cold = <400>;
+		cm-battery-cold-in-minus;
+
+		/* 6hr max charging time */
+		cm-charging-max = <21600000>;
+		/* 1.5hr max discharging time */
+		cm-discharging-max = <5400000>;
+
+		cm-fuel-gauge = "battery";
+
+		cm-fullbatt-voltage = <4176000>;
+		cm-fullbatt-vchkdrop-ms = <30000>;
+		cm-fullbatt-vchkdrop-volt = <176000>;
+		cm-fullbatt-soc = <92>;
+
+		cm-num-chargers = <1>;
+		cm-chargers = "max8998_pmic";
+
+		cm-thermal-zone = "batt-thermal";
+
+		regulator-0 {
+			cm-regulator-name = "chg-reg";
+			cable-0 {
+				cm-cable-name = "USB";
+				cm-cable-extcon = "7-0025";
+				cm-cable-min = <475000>;
+				cm-cable-max = <500000>;
+			};
+			cable-1 {
+				cm-cable-name = "SDP";
+				cm-cable-extcon = "7-0025";
+				cm-cable-min = <380000>;
+				cm-cable-max = <600000>;
+			};
+		};
+	};
+
 	sound {
 		compatible = "samsung,fascinate4g-wm8994";
 
diff --git a/arch/arm/boot/dts/s5pv210-galaxys.dts b/arch/arm/boot/dts/s5pv210-galaxys.dts
index eeec2bdece11..240cd0a5c9cb 100644
--- a/arch/arm/boot/dts/s5pv210-galaxys.dts
+++ b/arch/arm/boot/dts/s5pv210-galaxys.dts
@@ -74,6 +74,150 @@ 
 		};
 	};
 
+	thermal-zones {
+		batt_thermal: batt-thermal {
+			polling-delay-passive = <60000>; /* 60 seconds */
+			polling-delay = <600000>; /* 600 seconds */
+
+			thermal-sensors = <&batt_thermistor>;
+		};
+	};
+
+	batt_thermistor: thermal-sensor-0 {
+		compatible = "generic-adc-thermal";
+		#thermal-sensor-cells = <0>;
+		io-channels = <&adc 6>;
+		io-channel-names = "sensor-channel";
+
+		temperature-lookup-table = <
+			(-7000) 1667
+			(-6000) 1658
+			(-5000) 1632
+			(-4000) 1619
+			(-3000) 1614
+			(-2000) 1596
+			(-1000) 1577
+			0 1559
+			1000 1536
+			2000 1513
+			3000 1491
+			4000 1468
+			5000 1445
+			6000 1421
+			7000 1396
+			8000 1372
+			9000 1348
+			10000 1324
+			11000 1299
+			12000 1275
+			13000 1251
+			14000 1226
+			15000 1202
+			16000 1178
+			17000 1155
+			18000 1131
+			19000 1108
+			20000 1084
+			21000 1060
+			22000 1037
+			23000 1013
+			24000 990
+			25000 966
+			26000 943
+			27000 920
+			28000 898
+			29000 875
+			30000 852
+			31000 829
+			32000 806
+			33000 784
+			34000 761
+			35000 738
+			36000 718
+			37000 697
+			38000 677
+			39000 656
+			40000 636
+			41000 615
+			42000 595
+			43000 574
+			44000 554
+			45000 533
+			46000 518
+			47000 503
+			48000 487
+			49000 472
+			50000 457
+			51000 442
+			52000 427
+			53000 411
+			54000 396
+			55000 381
+			56000 368
+			57000 354
+			58000 341
+			59000 324
+			60000 306
+			61000 299
+			62000 293
+			63000 286
+			64000 275
+			65000 264>;
+	};
+
+	charger_manager: charger-manager-0 {
+		compatible = "charger-manager";
+
+		cm-name = "cm-battery";
+
+		chg-reg-supply = <&charger_reg>;
+
+		/* poll when externally connected */
+		cm-poll-mode = <2>;
+		cm-poll-interval = <30>;
+
+		/* read supply status for status */
+		cm-battery-stat = <0>;
+
+		cm-battery-temp-diff = <5>;
+		cm-battery-hot = <6300>;
+		cm-battery-cold = <400>;
+		cm-battery-cold-in-minus;
+
+		/* 6hr max charging time */
+		cm-charging-max = <21600000>;
+		/* 1.5hr max discharging time */
+		cm-discharging-max = <5400000>;
+
+		cm-fuel-gauge = "battery";
+
+		cm-fullbatt-voltage = <4176000>;
+		cm-fullbatt-vchkdrop-ms = <30000>;
+		cm-fullbatt-vchkdrop-volt = <176000>;
+		cm-fullbatt-soc = <92>;
+
+		cm-num-chargers = <1>;
+		cm-chargers = "max8998_pmic";
+
+		cm-thermal-zone = "batt-thermal";
+
+		regulator-0 {
+			cm-regulator-name = "chg-reg";
+			cable-0 {
+				cm-cable-name = "USB";
+				cm-cable-extcon = "7-0025";
+				cm-cable-min = <475000>;
+				cm-cable-max = <500000>;
+			};
+			cable-1 {
+				cm-cable-name = "SDP";
+				cm-cable-extcon = "7-0025";
+				cm-cable-min = <380000>;
+				cm-cable-max = <600000>;
+			};
+		};
+	};
+
 	micbias_reg: regulator-fixed-3 {
 		compatible = "regulator-fixed";
 		regulator-name = "MICBIAS";