|
From: <far...@us...> - 2006-10-18 17:28:15
|
Revision: 633
http://svn.sourceforge.net/hackndev/?rev=633&view=rev
Author: farcaller
Date: 2006-10-18 10:27:52 -0700 (Wed, 18 Oct 2006)
Log Message:
-----------
palmt3: battery interface now publishes status via APM (and now depends on tps65010)
Modified Paths:
--------------
linux4palm/linux/trunk/arch/arm/mach-pxa/palmt3/Kconfig
linux4palm/linux/trunk/arch/arm/mach-pxa/palmt3/palmt3_battery.c
Modified: linux4palm/linux/trunk/arch/arm/mach-pxa/palmt3/Kconfig
===================================================================
--- linux4palm/linux/trunk/arch/arm/mach-pxa/palmt3/Kconfig 2006-10-18 17:25:05 UTC (rev 632)
+++ linux4palm/linux/trunk/arch/arm/mach-pxa/palmt3/Kconfig 2006-10-18 17:27:52 UTC (rev 633)
@@ -12,7 +12,7 @@
config PALM_T3_BATTERY
tristate "Battery monitoring support"
- depends on MACH_T3XSCALE
+ depends on MACH_T3XSCALE && TPS65010
select SOC_TSC2101
help
Adds battery driver support
Modified: linux4palm/linux/trunk/arch/arm/mach-pxa/palmt3/palmt3_battery.c
===================================================================
--- linux4palm/linux/trunk/arch/arm/mach-pxa/palmt3/palmt3_battery.c 2006-10-18 17:25:05 UTC (rev 632)
+++ linux4palm/linux/trunk/arch/arm/mach-pxa/palmt3/palmt3_battery.c 2006-10-18 17:27:52 UTC (rev 633)
@@ -38,7 +38,8 @@
int palmt3_battery_get_max_voltage(struct battery *bat)
{
- return 4147; // approx. 4.21 V, 2718 as returned by TSC
+ //return 4147; // approx. 4.21 V, 2718 as returned by TSC
+ return 4156; // strange, but this is my current upper limit. so it be.
}
int palmt3_battery_get_min_voltage(struct battery *bat)
@@ -98,7 +99,52 @@
.get_max_voltage = palmt3_battery_get_max_voltage,
.get_status = palmt3_battery_get_status,
};
+/* -------------------------- APM ------------------------------------- */
+static void palmt3_apm_get_power_status(struct apm_power_info *info)
+{
+ int tps65010_get_charging(void);
+ int min, max, curr, percent;
+ curr = palmt3_battery_get_voltage(NULL);
+ min = palmt3_battery_get_min_voltage(NULL);
+ max = palmt3_battery_get_max_voltage(NULL);
+
+ curr = curr - min;
+ if (curr < 0) curr = 0;
+ max = max - min;
+
+ percent = curr*100/max;
+
+ info->battery_life = percent;
+
+ info->ac_line_status = tps65010_get_charging() ? APM_AC_ONLINE : APM_AC_OFFLINE;
+
+ if (info->ac_line_status) {
+ info->battery_status = APM_BATTERY_STATUS_CHARGING;
+ } else {
+ if (percent > 50)
+ info->battery_status = APM_BATTERY_STATUS_HIGH;
+ else if (percent < 5)
+ info->battery_status = APM_BATTERY_STATUS_CRITICAL;
+ else
+ info->battery_status = APM_BATTERY_STATUS_LOW;
+ }
+
+ /* Consider one "percent" per minute, which is shot in the sky. */
+ info->time = percent;
+ info->units = APM_UNITS_MINS;
+}
+
+typedef void (*apm_get_power_status_t)(struct apm_power_info*);
+
+int set_apm_get_power_status(apm_get_power_status_t t)
+{
+ apm_get_power_status = t;
+
+ return 0;
+}
+
+
/* -------------------------------------------------------------------- */
static int palmt3_battery_probe(struct device *dev)
@@ -122,6 +168,11 @@
return retval;
retval = battery_class_register(&palmt3_battery);
+ if (!retval) {
+#ifdef CONFIG_PM
+ set_apm_get_power_status(palmt3_apm_get_power_status);
+#endif
+ }
return retval;
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|