sharpsl_battery.patch:
[vuplus_openembedded] / linux / openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107 / sharpsl_battery.patch
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
3 @@ -197,7 +197,7 @@
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.
12 @@ -245,10 +245,17 @@
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);
20  
21 +// remove warnings
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);
26 +
27  /*** extern ***********************************************************************/
28  extern u32 apm_wakeup_src_mask;
29  #if defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI)
30 @@ -269,7 +276,6 @@
31  
32  /*** variables ********************************************************************/
33  
34 -
35  #if defined(CONFIG_ARCH_PXA_POODLE)
36  
37  BATTERY_THRESH  sharpsl_main_battery_thresh_fl[] = {
38 @@ -293,20 +299,26 @@
39  #elif defined(CONFIG_ARCH_PXA_CORGI)
40  
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},
54  };
55  
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},
69  };
70  #endif
71 @@ -332,25 +344,36 @@
72  #elif defined(CONFIG_ARCH_PXA_CORGI)
73  
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},
86  };
87  
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},
100  };
101  
102  #endif
103  
104 +//#if defined(CONFIG_ARCH_PXA_CORGI)
105 +#define MAIN_BATTERY_THRES (sizeof(sharpsl_main_battery_thresh_charge_nofl) / sizeof(BATTERY_THRESH) - 1)
106 +//#endif
107 +
108 +
109  #if 1
110  static struct file_operations sharpsl_battery_fops = {
111  };
112 @@ -389,6 +412,8 @@
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;
117 +
118  int sharpsl_ac_status = APM_AC_OFFLINE;
119  
120  static int MainCntWk = SHARPSL_MAIN_GOOD_COUNT;
121 @@ -498,7 +523,7 @@
122  //          2 : check battery w/  refresh battery status.
123  void sharpsl_kick_battery_check(int before_waitms,int after_waitms,int flag)
124  {
125 -  int start;
126 +  //int start;
127  
128  
129    MainCntWk = MainCnt + 1;
130 @@ -604,6 +629,7 @@
131    }
132  #endif
133  
134 +    return 0;
135  }
136  
137  
138 @@ -920,13 +946,17 @@
139  #endif
140  
141                 voltage = sharpsl_cnv_value(voltage);
142 -
143 +               sharpsl_main_battery_voltage = voltage;
144 +       
145                 thresh = GetMainLevel(voltage);
146  
147 +               sharpsl_main_battery = thresh->status;
148 +               sharpsl_main_battery_percentage = GetMainPercent(voltage);
149 +               sharpsl_main_charge_battery = GetMainChargePercent(voltage);
150 +
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);
158                 }
159 @@ -934,11 +964,7 @@
160                 if ( sharpsl_main_bk_flag == 0 ) {
161                   return sharpsl_main_battery;
162                 }
163 -               sharpsl_main_battery = thresh->status;
164 -               sharpsl_main_battery_percentage = thresh->percentage;
165 -               sharpsl_main_charge_battery = GetMainChargePercent(voltage);
166 -
167 -               //printk("bat : main battery = %d\n",sharpsl_main_battery);
168 +               
169  
170                 if ( sharpsl_debug_flag != 0 ) {
171                   int i;
172 @@ -946,7 +972,8 @@
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);
179                       break;
180                     }
181                   }
182 @@ -965,7 +992,7 @@
183                   sharpsl_main_battery_percentage = sharpsl_main_percent_bk;
184                 }
185  
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);
189  
190         } else {
191 @@ -975,40 +1002,79 @@
192         return sharpsl_main_battery;
193  }
194  
195 -int GetMainChargePercent( int Volt )
196 +int GetLevelIndex(BATTERY_THRESH *thresh, int Volt)
197 +{
198 +    int i = MAIN_BATTERY_THRES;
199 +
200 +    DPRINTK("volt = %d \n", Volt);
201 +       while (i > 0 && (Volt > thresh[i].voltage))
202 +               i--;
203 +               
204 +       return i;
205 +}
206 +
207 +int GetPercent(BATTERY_THRESH *thresh, int Volt)
208 +{
209 +    int i = GetLevelIndex(thresh, Volt);
210 +    
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] */
214 +       
215 +       {
216 +//         long percentage = thresh[i].percentage;
217 +           
218 +        long deltav = thresh[i].voltage - thresh[i + 1].voltage;
219 +        long deltap = thresh[i].percentage - thresh[i + 1].percentage;
220 +    
221 +       long percentage = 
222 +                  thresh[i + 1].percentage + 
223 +                  deltap * (Volt - thresh[i + 1].voltage) /
224 +                  deltav; 
225 +
226 +        DPRINTK("percentage = %d \n", percentage);
227 +        return percentage;
228 +       }
229 +       
230 +    return thresh[i].percentage;
231 +}
232 +
233 +int GetMainPercent( int Volt )
234  {
235 -    int i;
236      BATTERY_THRESH *thresh;
237  
238 -    DPRINTK("  volt = %d  \n",Volt);
239 +    if (counter_step_contrast)
240 +           thresh = sharpsl_main_battery_thresh_fl;
241 +    else
242 +           thresh = sharpsl_main_battery_thresh_nofl;
243 +
244 +    return GetPercent(thresh, Volt);
245 +}
246 +
247 +int GetMainChargePercent( int Volt )
248 +{
249 +    BATTERY_THRESH *thresh;
250  
251      if (counter_step_contrast)
252 -       thresh = sharpsl_main_battery_thresh_charge_fl;
253 +           thresh = sharpsl_main_battery_thresh_charge_fl;
254      else
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;
259 -    }
260 -    return thresh[i].percentage;
261 +           thresh = sharpsl_main_battery_thresh_charge_nofl;
262 +
263 +    return GetPercent(thresh, Volt);
264  }
265  
266  BATTERY_THRESH *GetMainLevel( int Volt )
267  {
268 -    int i;
269      BATTERY_THRESH *thresh;
270  
271      DPRINTK("  volt = %d  \n",Volt);
272  
273      if (counter_step_contrast)
274 -       thresh = sharpsl_main_battery_thresh_fl;
275 +           thresh = sharpsl_main_battery_thresh_fl;
276      else
277 -       thresh = sharpsl_main_battery_thresh_nofl;
278 -    for (i = 0; thresh[i].voltage > 0; i++) {
279 -       if (Volt >= thresh[i].voltage)
280 -           return &thresh[i];
281 -    }
282 -    return &thresh[i];
283 +           thresh = sharpsl_main_battery_thresh_nofl;
284 +           
285 +    return &thresh[GetLevelIndex(thresh, Volt)];
286  }
287  
288  
289 @@ -1018,7 +1084,7 @@
290  int Get_DAC_Value(int channel)
291  {
292         unsigned long cmd;
293 -       unsigned int dummy;
294 +       unsigned int dummy;
295         int voltage;
296  
297  #if defined(CONFIG_ARCH_PXA_POODLE)
298 @@ -1263,7 +1329,7 @@
299  //        0: OK
300  int sharpsl_ac_check(void)
301  {
302 -       int temp, i, volt;
303 +       int temp, i; //, volt;
304         int buff[5];
305  
306         if ( in_interrupt() ) {
307 @@ -1835,14 +1901,18 @@
308         int             def_value;
309         char*           name;
310         char*           description;
311 +       char            readonly;       
312         unsigned short  low_ino;
313  } sharpsl_battery_entry_t;
314  
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 }
326  };
327  #define NUM_OF_BATTERY_ENTRY   (sizeof(sharpsl_battery_params)/sizeof(sharpsl_battery_entry_t))
328  
329 @@ -1866,7 +1936,7 @@
330         if (current_param==NULL) {
331                 return -EINVAL;
332         }
333 -       count = sprintf(outputbuf, "0x%08X\n",
334 +       count = sprintf(outputbuf, "%04i\n",
335                         *((volatile Word *) current_param->addr));
336         *ppos += count;
337         if (count>nbytes)       /* Assume output can be read at one time */
338 @@ -1891,7 +1961,7 @@
339                         break;
340                 }
341         }
342 -       if (current_param==NULL) {
343 +       if (current_param==NULL || current_param->readonly) {
344                 return -EINVAL;
345         }
346