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. |