1 --- linux-orig/arch/arm/mach-pxa/sharpsl_battery.c 2004-02-18 23:41:57.000000000 +0300
2 +++ linux/arch/arm/mach-pxa/sharpsl_battery.c 2004-02-24 06:21:56.000000000 +0300
4 #define SHARPSL_CHECK_BATTERY_WAIT_TIME_VOLT 1 // 10msec
5 #define SHARPSL_CHECK_BATTERY_WAIT_TIME_JKVAD 1 // 10msec
6 #define SHARPSL_CORGI_FATAL_ACIN_VOLT 182 // 3.45V
7 -#define SHARPSL_CORGI_FATAL_NOACIN_VOLT 179 // 3.40V
8 +#define SHARPSL_CORGI_FATAL_NOACIN_VOLT 170 // 3.40V
9 #define SHARPSL_CORGI_WAIT_CO_TIME 15 // 15 Sec
10 //NOTICE !! you want to change this value , so you must change
11 // alarm check mirgin time ( +30 ) in the sharpsl_power.c.
13 BATTERY_THRESH *GetMainLevel( int Volt );
14 int sharpsl_get_main_battery(void);
15 int suspend_sharpsl_read_Voltage(void);
16 +int GetMainPercent(int);
17 int GetMainChargePercent(int);
18 int Get_DAC_Value(int);
19 int sharpsl_check_battery(int mode);
22 +static int sharpsl_battery_thread_main(void);
23 +int handle_scancode(int, int);
24 +int sharpsl_ac_check(void);
25 +void sharpsl_charge_err_off(void);
27 /*** extern ***********************************************************************/
28 extern u32 apm_wakeup_src_mask;
29 #if defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI)
32 /*** variables ********************************************************************/
35 #if defined(CONFIG_ARCH_PXA_POODLE)
37 BATTERY_THRESH sharpsl_main_battery_thresh_fl[] = {
39 #elif defined(CONFIG_ARCH_PXA_CORGI)
41 BATTERY_THRESH sharpsl_main_battery_thresh_fl[] = {
42 - { 194, 100, SHARPSL_BATTERY_STATUS_HIGH},
43 - { 188, 75, SHARPSL_BATTERY_STATUS_HIGH},
44 + { 999, 100, SHARPSL_BATTERY_STATUS_HIGH},
45 + { 210, 100, SHARPSL_BATTERY_STATUS_HIGH},
46 + { 194, 90, SHARPSL_BATTERY_STATUS_HIGH},
47 + { 188, 70, SHARPSL_BATTERY_STATUS_HIGH},
48 { 184, 50, SHARPSL_BATTERY_STATUS_HIGH},
49 { 180, 25, SHARPSL_BATTERY_STATUS_LOW},
50 - { 171, 5, SHARPSL_BATTERY_STATUS_VERYLOW},
51 + { 174, 10, SHARPSL_BATTERY_STATUS_LOW},
52 + { 170, 5, SHARPSL_BATTERY_STATUS_VERYLOW},
53 { 0, 0, SHARPSL_BATTERY_STATUS_CRITICAL},
56 BATTERY_THRESH sharpsl_main_battery_thresh_nofl[] = {
57 - { 194, 100, SHARPSL_BATTERY_STATUS_HIGH},
58 - { 188, 75, SHARPSL_BATTERY_STATUS_HIGH},
59 + { 999, 100, SHARPSL_BATTERY_STATUS_HIGH},
60 + { 210, 100, SHARPSL_BATTERY_STATUS_HIGH},
61 + { 194, 90, SHARPSL_BATTERY_STATUS_HIGH},
62 + { 188, 70, SHARPSL_BATTERY_STATUS_HIGH},
63 { 184, 50, SHARPSL_BATTERY_STATUS_HIGH},
64 { 180, 25, SHARPSL_BATTERY_STATUS_LOW},
65 - { 171, 5, SHARPSL_BATTERY_STATUS_VERYLOW},
66 + { 174, 10, SHARPSL_BATTERY_STATUS_LOW},
67 + { 170, 5, SHARPSL_BATTERY_STATUS_VERYLOW},
68 { 0, 0, SHARPSL_BATTERY_STATUS_CRITICAL},
72 #elif defined(CONFIG_ARCH_PXA_CORGI)
74 BATTERY_THRESH sharpsl_main_battery_thresh_charge_fl[] = {
75 - { 200, 100, SHARPSL_BATTERY_STATUS_HIGH},
76 + { 999, 100, SHARPSL_BATTERY_STATUS_HIGH},
77 + { 210, 100, SHARPSL_BATTERY_STATUS_HIGH},
78 + { 200, 95, SHARPSL_BATTERY_STATUS_HIGH},
79 { 196, 75, SHARPSL_BATTERY_STATUS_HIGH},
80 { 192, 50, SHARPSL_BATTERY_STATUS_HIGH},
81 { 187, 25, SHARPSL_BATTERY_STATUS_LOW},
82 - { 171, 5, SHARPSL_BATTERY_STATUS_VERYLOW},
83 + { 182, 10, SHARPSL_BATTERY_STATUS_LOW},
84 + { 170, 5, SHARPSL_BATTERY_STATUS_VERYLOW},
85 { 0, 0, SHARPSL_BATTERY_STATUS_CRITICAL},
88 BATTERY_THRESH sharpsl_main_battery_thresh_charge_nofl[] = {
89 - { 200, 100, SHARPSL_BATTERY_STATUS_HIGH},
90 + { 999, 100, SHARPSL_BATTERY_STATUS_HIGH},
91 + { 210, 100, SHARPSL_BATTERY_STATUS_HIGH},
92 + { 200, 95, SHARPSL_BATTERY_STATUS_HIGH},
93 { 196, 75, SHARPSL_BATTERY_STATUS_HIGH},
94 { 192, 50, SHARPSL_BATTERY_STATUS_HIGH},
95 { 187, 25, SHARPSL_BATTERY_STATUS_LOW},
96 - { 171, 5, SHARPSL_BATTERY_STATUS_VERYLOW},
97 + { 182, 10, SHARPSL_BATTERY_STATUS_LOW},
98 + { 170, 5, SHARPSL_BATTERY_STATUS_VERYLOW},
99 { 0, 0, SHARPSL_BATTERY_STATUS_CRITICAL},
104 +//#if defined(CONFIG_ARCH_PXA_CORGI)
105 +#define MAIN_BATTERY_THRES (sizeof(sharpsl_main_battery_thresh_charge_nofl) / sizeof(BATTERY_THRESH) - 1)
110 static struct file_operations sharpsl_battery_fops = {
113 int sharpsl_main_battery = SHARPSL_BATTERY_STATUS_HIGH;
114 int sharpsl_main_battery_percentage = 100;
115 int sharpsl_main_charge_battery = 100;
116 +int sharpsl_main_battery_voltage = 200;
118 int sharpsl_ac_status = APM_AC_OFFLINE;
120 static int MainCntWk = SHARPSL_MAIN_GOOD_COUNT;
122 // 2 : check battery w/ refresh battery status.
123 void sharpsl_kick_battery_check(int before_waitms,int after_waitms,int flag)
129 MainCntWk = MainCnt + 1;
138 @@ -920,13 +946,17 @@
141 voltage = sharpsl_cnv_value(voltage);
143 + sharpsl_main_battery_voltage = voltage;
145 thresh = GetMainLevel(voltage);
147 + sharpsl_main_battery = thresh->status;
148 + sharpsl_main_battery_percentage = GetMainPercent(voltage);
149 + sharpsl_main_charge_battery = GetMainChargePercent(voltage);
151 // if battery is low , backlight driver become to save power.
152 if ( ( ( thresh->status == SHARPSL_BATTERY_STATUS_VERYLOW ) ||
153 - ( thresh->status == SHARPSL_BATTERY_STATUS_CRITICAL ) ||
154 - ( thresh->status == SHARPSL_BATTERY_STATUS_LOW ) ) &&
155 + ( thresh->status == SHARPSL_BATTERY_STATUS_CRITICAL )) &&
156 ( !sharpsl_main_bk_flag ) ) {
157 SHARPSL_LIMIT_CONTRAST(SHARPSL_CAUTION_CONTRAST);
160 if ( sharpsl_main_bk_flag == 0 ) {
161 return sharpsl_main_battery;
163 - sharpsl_main_battery = thresh->status;
164 - sharpsl_main_battery_percentage = thresh->percentage;
165 - sharpsl_main_charge_battery = GetMainChargePercent(voltage);
167 - //printk("bat : main battery = %d\n",sharpsl_main_battery);
170 if ( sharpsl_debug_flag != 0 ) {
173 sharpsl_main_battery = sharpsl_debug_flag;
174 for (i = 0; sharpsl_main_battery_thresh_nofl[i].voltage > 0; i++) {
175 if ( sharpsl_debug_flag == sharpsl_main_battery_thresh_nofl[i].status ) {
176 - sharpsl_main_battery_percentage = sharpsl_main_battery_thresh_nofl[i].percentage;
177 + //sharpsl_main_battery_percentage = sharpsl_main_battery_thresh_nofl[i].percentage;
178 + sharpsl_main_battery_percentage = GetMainPercent(voltage);
183 sharpsl_main_battery_percentage = sharpsl_main_percent_bk;
186 - DPRINTK2("charge percent = %d ( at %d ) \n",sharpsl_main_charge_battery,(int)jiffies);
187 + //DPRINTK2("charge percent = %d ( at %d ) \n",sharpsl_main_charge_battery,(int)jiffies);
188 DPRINTK(" get Main battery status %d\n",sharpsl_main_battery);
191 @@ -975,40 +1002,79 @@
192 return sharpsl_main_battery;
195 -int GetMainChargePercent( int Volt )
196 +int GetLevelIndex(BATTERY_THRESH *thresh, int Volt)
198 + int i = MAIN_BATTERY_THRES;
200 + DPRINTK("volt = %d \n", Volt);
201 + while (i > 0 && (Volt > thresh[i].voltage))
207 +int GetPercent(BATTERY_THRESH *thresh, int Volt)
209 + int i = GetLevelIndex(thresh, Volt);
211 + /* i is now between 0 and MAIN_BATTERY_THRES. That means
212 + * we can safely access main_batt_thres[i] and
213 + * main_batt_thres[i+1] */
216 +// long percentage = thresh[i].percentage;
218 + long deltav = thresh[i].voltage - thresh[i + 1].voltage;
219 + long deltap = thresh[i].percentage - thresh[i + 1].percentage;
222 + thresh[i + 1].percentage +
223 + deltap * (Volt - thresh[i + 1].voltage) /
226 + DPRINTK("percentage = %d \n", percentage);
230 + return thresh[i].percentage;
233 +int GetMainPercent( int Volt )
236 BATTERY_THRESH *thresh;
238 - DPRINTK(" volt = %d \n",Volt);
239 + if (counter_step_contrast)
240 + thresh = sharpsl_main_battery_thresh_fl;
242 + thresh = sharpsl_main_battery_thresh_nofl;
244 + return GetPercent(thresh, Volt);
247 +int GetMainChargePercent( int Volt )
249 + BATTERY_THRESH *thresh;
251 if (counter_step_contrast)
252 - thresh = sharpsl_main_battery_thresh_charge_fl;
253 + thresh = sharpsl_main_battery_thresh_charge_fl;
255 - thresh = sharpsl_main_battery_thresh_charge_nofl;
256 - for (i = 0; thresh[i].voltage > 0; i++) {
257 - if (Volt >= thresh[i].voltage)
258 - return thresh[i].percentage;
260 - return thresh[i].percentage;
261 + thresh = sharpsl_main_battery_thresh_charge_nofl;
263 + return GetPercent(thresh, Volt);
266 BATTERY_THRESH *GetMainLevel( int Volt )
269 BATTERY_THRESH *thresh;
271 DPRINTK(" volt = %d \n",Volt);
273 if (counter_step_contrast)
274 - thresh = sharpsl_main_battery_thresh_fl;
275 + thresh = sharpsl_main_battery_thresh_fl;
277 - thresh = sharpsl_main_battery_thresh_nofl;
278 - for (i = 0; thresh[i].voltage > 0; i++) {
279 - if (Volt >= thresh[i].voltage)
283 + thresh = sharpsl_main_battery_thresh_nofl;
285 + return &thresh[GetLevelIndex(thresh, Volt)];
289 @@ -1018,7 +1084,7 @@
290 int Get_DAC_Value(int channel)
293 - unsigned int dummy;
294 + unsigned int dummy;
297 #if defined(CONFIG_ARCH_PXA_POODLE)
298 @@ -1263,7 +1329,7 @@
300 int sharpsl_ac_check(void)
303 + int temp, i; //, volt;
306 if ( in_interrupt() ) {
307 @@ -1835,14 +1901,18 @@
312 unsigned short low_ino;
313 } sharpsl_battery_entry_t;
315 static sharpsl_battery_entry_t sharpsl_battery_params[] = {
316 /* { addr, def_value, name, description }*/
317 - { &msglevel, 0, "msglevel", "debug message output level" },
318 - { &sharpsl_debug_flag , 0 , "dflag", "debug flag" },
319 - { &sharpsl_change_battery_status , 0 , "chg_status", "Change status" }
320 + { &msglevel, 0, "msglevel", "debug message output level", 0 },
321 + { &sharpsl_debug_flag , 0 , "dflag", "debug flag", 0 },
322 + { &sharpsl_change_battery_status , 0 , "chg_status", "Change status", 1 },
323 + { &sharpsl_main_battery_percentage , 0 , "charge_percentage", "Charge percentage", 1 },
324 + { &sharpsl_main_battery_voltage , 0 , "main_voltage", "Main voltage", 1 }, // alias
325 + { &sharpsl_main_battery_voltage , 0 , "charge_voltage", "Charge voltage", 1 }
327 #define NUM_OF_BATTERY_ENTRY (sizeof(sharpsl_battery_params)/sizeof(sharpsl_battery_entry_t))
329 @@ -1866,7 +1936,7 @@
330 if (current_param==NULL) {
333 - count = sprintf(outputbuf, "0x%08X\n",
334 + count = sprintf(outputbuf, "%04i\n",
335 *((volatile Word *) current_param->addr));
337 if (count>nbytes) /* Assume output can be read at one time */
338 @@ -1891,7 +1961,7 @@
342 - if (current_param==NULL) {
343 + if (current_param==NULL || current_param->readonly) {