summaryrefslogtreecommitdiff
path: root/firmware/target/arm/sandisk
diff options
context:
space:
mode:
authorMichael Sevakis <jethead71@rockbox.org>2009-01-11 10:07:22 +0000
committerMichael Sevakis <jethead71@rockbox.org>2009-01-11 10:07:22 +0000
commit7d7969114da36a99afc4d80576ff9b089cb09e50 (patch)
tree48c3c574e382d80454c28a6b77de64a64f3cedcd /firmware/target/arm/sandisk
parentb84fe020a5bc497cee9b88eb782c2d4a9b7be711 (diff)
downloadrockbox-7d7969114da36a99afc4d80576ff9b089cb09e50.tar.gz
rockbox-7d7969114da36a99afc4d80576ff9b089cb09e50.zip
c200v1/e200v1: Add battery charging. This should be usable on v2 players but those should be evaluated for current, endpoint voltage and whether or not accurate battery readings may always be obtained (which determines algorithm setup and behavior).
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@19748 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/target/arm/sandisk')
-rw-r--r--firmware/target/arm/sandisk/powermgmt-target.h59
-rw-r--r--firmware/target/arm/sandisk/sansa-c200/powermgmt-c200.c13
-rw-r--r--firmware/target/arm/sandisk/sansa-e200/powermgmt-e200.c11
3 files changed, 60 insertions, 23 deletions
diff --git a/firmware/target/arm/sandisk/powermgmt-target.h b/firmware/target/arm/sandisk/powermgmt-target.h
new file mode 100644
index 0000000000..aa6a0e0e3d
--- /dev/null
+++ b/firmware/target/arm/sandisk/powermgmt-target.h
@@ -0,0 +1,59 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id$
9 *
10 * Copyright (C) 2009 by Michael Sevakis
11 * Copyright (C) 2008 by Bertrik Sikken
12 *
13 * This program is free software; you can redistribute it and/or
14 * modify it under the terms of the GNU General Public License
15 * as published by the Free Software Foundation; either version 2
16 * of the License, or (at your option) any later version.
17 *
18 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
19 * KIND, either express or implied.
20 *
21 ****************************************************************************/
22#ifndef POWERMGMT_TARGET_H
23#define POWERMGMT_TARGET_H
24
25#if defined(SANSA_C200)
26/* This configuration triggers a single charge cycle upon plugging and stops.
27 * The true voltage cannot be read accurately and so monitoring isn't really
28 * possible. The battery filter is still synced to have a proper reading
29 * when disconnecting. */
30#define BATT_FULL_VOLTAGE 5121 /* Won't read this high - force start */
31#define BATT_VAUTO_RECHARGE 0 /* Won't read this low - force one cycle */
32#define BATT_CHG_V CHG_V_4_20V
33#define BATT_CHG_I CHG_I_300MA
34#define CHARGER_TOTAL_TIMER (4*3600*2) /* 4 hours enough? */
35#define ADC_BATTERY ADC_BVDD
36#elif defined(SANSA_E200)
37/* PREFERRED - Check if topped-off and monitor voltage while plugged. */
38#define BATT_FULL_VOLTAGE 4160
39#define BATT_VAUTO_RECHARGE 4100
40#define BATT_CHG_V CHG_V_4_20V
41#define BATT_CHG_I CHG_I_300MA
42#define CHARGER_TOTAL_TIMER (4*3600*2) /* 4 hours enough? */
43/* On e200 ADC_RTCSUP seems to represent battery voltage better than
44 * ADC_BVDD during charging (ADC_BVDD is way too high) and appears the
45 * same in normal use.
46 */
47#define ADC_BATTERY ADC_RTCSUP
48#endif
49
50void powermgmt_init_target(void);
51void charging_algorithm_step(void);
52void charging_algorithm_close(void);
53
54/* We want to be able to reset the averaging filter */
55#define HAVE_RESET_BATTERY_FILTER
56
57#define BATT_AVE_SAMPLES 32
58
59#endif /* POWERMGMT_TARGET_H */
diff --git a/firmware/target/arm/sandisk/sansa-c200/powermgmt-c200.c b/firmware/target/arm/sandisk/sansa-c200/powermgmt-c200.c
index 963e7218de..9d7a0e2965 100644
--- a/firmware/target/arm/sandisk/sansa-c200/powermgmt-c200.c
+++ b/firmware/target/arm/sandisk/sansa-c200/powermgmt-c200.c
@@ -38,8 +38,8 @@ const unsigned short battery_level_shutoff[BATTERY_TYPES_COUNT] =
38const unsigned short percent_to_volt_discharge[BATTERY_TYPES_COUNT][11] = 38const unsigned short percent_to_volt_discharge[BATTERY_TYPES_COUNT][11] =
39{ 39{
40 40
41 /* NOTE: why is the top voltage 4237? That's just too high. */
41 { 3286, 3679, 3734, 3764, 3788, 3824, 3886, 3950, 4014, 4098, 4237 }, 42 { 3286, 3679, 3734, 3764, 3788, 3824, 3886, 3950, 4014, 4098, 4237 },
42
43}; 43};
44 44
45/* voltages (millivolt) of 0%, 10%, ... 100% when charging enabled */ 45/* voltages (millivolt) of 0%, 10%, ... 100% when charging enabled */
@@ -48,14 +48,3 @@ const unsigned short percent_to_volt_charge[11] =
48 /* Sansa c200 has a 530 mAh LiPo battery */ 48 /* Sansa c200 has a 530 mAh LiPo battery */
49 3300, 3390, 3480, 3570, 3660, 3750, 3840, 3930, 4020, 4110, 4200 49 3300, 3390, 3480, 3570, 3660, 3750, 3840, 3930, 4020, 4110, 4200
50}; 50};
51
52/* ADC should read 0x3ff=5.12V */
53#define BATTERY_SCALE_FACTOR 5125
54/* full-scale ADC readout (2^10) in millivolt */
55
56/* Returns battery voltage from ADC [millivolts] */
57unsigned int battery_adc_voltage(void)
58{
59 return (adc_read(ADC_UNREG_POWER) * BATTERY_SCALE_FACTOR) >> 10;
60}
61
diff --git a/firmware/target/arm/sandisk/sansa-e200/powermgmt-e200.c b/firmware/target/arm/sandisk/sansa-e200/powermgmt-e200.c
index 43f37463f8..144ca37ebf 100644
--- a/firmware/target/arm/sandisk/sansa-e200/powermgmt-e200.c
+++ b/firmware/target/arm/sandisk/sansa-e200/powermgmt-e200.c
@@ -47,14 +47,3 @@ const unsigned short percent_to_volt_charge[11] =
47 /* Sansa Li Ion 750mAH FIXME */ 47 /* Sansa Li Ion 750mAH FIXME */
48 3300, 3680, 3740, 3760, 3780, 3810, 3870, 3930, 3970, 4070, 4160 48 3300, 3680, 3740, 3760, 3780, 3810, 3870, 3930, 3970, 4070, 4160
49}; 49};
50
51/* ADC should read 0x3ff=5.12V */
52#define BATTERY_SCALE_FACTOR 5125
53/* full-scale ADC readout (2^10) in millivolt */
54
55/* Returns battery voltage from ADC [millivolts] */
56unsigned int battery_adc_voltage(void)
57{
58 return (adc_read(ADC_UNREG_POWER) * BATTERY_SCALE_FACTOR) >> 10;
59}
60