diff options
Diffstat (limited to 'firmware/target/arm/sandisk')
-rw-r--r-- | firmware/target/arm/sandisk/powermgmt-target.h | 59 | ||||
-rw-r--r-- | firmware/target/arm/sandisk/sansa-c200/powermgmt-c200.c | 13 | ||||
-rw-r--r-- | firmware/target/arm/sandisk/sansa-e200/powermgmt-e200.c | 11 |
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 | |||
50 | void powermgmt_init_target(void); | ||
51 | void charging_algorithm_step(void); | ||
52 | void 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] = | |||
38 | const unsigned short percent_to_volt_discharge[BATTERY_TYPES_COUNT][11] = | 38 | const 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] */ | ||
57 | unsigned 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] */ | ||
56 | unsigned int battery_adc_voltage(void) | ||
57 | { | ||
58 | return (adc_read(ADC_UNREG_POWER) * BATTERY_SCALE_FACTOR) >> 10; | ||
59 | } | ||
60 | |||