diff options
Diffstat (limited to 'drivers/acpi/battery.c')
-rw-r--r-- | drivers/acpi/battery.c | 400 |
1 files changed, 183 insertions, 217 deletions
diff --git a/drivers/acpi/battery.c b/drivers/acpi/battery.c index c55feca9b7d5..702e857e98c5 100644 --- a/drivers/acpi/battery.c +++ b/drivers/acpi/battery.c | |||
@@ -34,7 +34,6 @@ | |||
34 | #include <acpi/acpi_bus.h> | 34 | #include <acpi/acpi_bus.h> |
35 | #include <acpi/acpi_drivers.h> | 35 | #include <acpi/acpi_drivers.h> |
36 | 36 | ||
37 | |||
38 | #define ACPI_BATTERY_VALUE_UNKNOWN 0xFFFFFFFF | 37 | #define ACPI_BATTERY_VALUE_UNKNOWN 0xFFFFFFFF |
39 | 38 | ||
40 | #define ACPI_BATTERY_FORMAT_BIF "NNNNNNNNNSSSS" | 39 | #define ACPI_BATTERY_FORMAT_BIF "NNNNNNNNNSSSS" |
@@ -53,87 +52,85 @@ | |||
53 | #define ACPI_BATTERY_UNITS_WATTS "mW" | 52 | #define ACPI_BATTERY_UNITS_WATTS "mW" |
54 | #define ACPI_BATTERY_UNITS_AMPS "mA" | 53 | #define ACPI_BATTERY_UNITS_AMPS "mA" |
55 | 54 | ||
56 | |||
57 | #define _COMPONENT ACPI_BATTERY_COMPONENT | 55 | #define _COMPONENT ACPI_BATTERY_COMPONENT |
58 | ACPI_MODULE_NAME ("acpi_battery") | 56 | ACPI_MODULE_NAME("acpi_battery") |
59 | 57 | ||
60 | MODULE_AUTHOR("Paul Diefenbaugh"); | 58 | MODULE_AUTHOR("Paul Diefenbaugh"); |
61 | MODULE_DESCRIPTION(ACPI_BATTERY_DRIVER_NAME); | 59 | MODULE_DESCRIPTION(ACPI_BATTERY_DRIVER_NAME); |
62 | MODULE_LICENSE("GPL"); | 60 | MODULE_LICENSE("GPL"); |
63 | 61 | ||
64 | static int acpi_battery_add (struct acpi_device *device); | 62 | static int acpi_battery_add(struct acpi_device *device); |
65 | static int acpi_battery_remove (struct acpi_device *device, int type); | 63 | static int acpi_battery_remove(struct acpi_device *device, int type); |
66 | 64 | ||
67 | static struct acpi_driver acpi_battery_driver = { | 65 | static struct acpi_driver acpi_battery_driver = { |
68 | .name = ACPI_BATTERY_DRIVER_NAME, | 66 | .name = ACPI_BATTERY_DRIVER_NAME, |
69 | .class = ACPI_BATTERY_CLASS, | 67 | .class = ACPI_BATTERY_CLASS, |
70 | .ids = ACPI_BATTERY_HID, | 68 | .ids = ACPI_BATTERY_HID, |
71 | .ops = { | 69 | .ops = { |
72 | .add = acpi_battery_add, | 70 | .add = acpi_battery_add, |
73 | .remove = acpi_battery_remove, | 71 | .remove = acpi_battery_remove, |
74 | }, | 72 | }, |
75 | }; | 73 | }; |
76 | 74 | ||
77 | struct acpi_battery_status { | 75 | struct acpi_battery_status { |
78 | acpi_integer state; | 76 | acpi_integer state; |
79 | acpi_integer present_rate; | 77 | acpi_integer present_rate; |
80 | acpi_integer remaining_capacity; | 78 | acpi_integer remaining_capacity; |
81 | acpi_integer present_voltage; | 79 | acpi_integer present_voltage; |
82 | }; | 80 | }; |
83 | 81 | ||
84 | struct acpi_battery_info { | 82 | struct acpi_battery_info { |
85 | acpi_integer power_unit; | 83 | acpi_integer power_unit; |
86 | acpi_integer design_capacity; | 84 | acpi_integer design_capacity; |
87 | acpi_integer last_full_capacity; | 85 | acpi_integer last_full_capacity; |
88 | acpi_integer battery_technology; | 86 | acpi_integer battery_technology; |
89 | acpi_integer design_voltage; | 87 | acpi_integer design_voltage; |
90 | acpi_integer design_capacity_warning; | 88 | acpi_integer design_capacity_warning; |
91 | acpi_integer design_capacity_low; | 89 | acpi_integer design_capacity_low; |
92 | acpi_integer battery_capacity_granularity_1; | 90 | acpi_integer battery_capacity_granularity_1; |
93 | acpi_integer battery_capacity_granularity_2; | 91 | acpi_integer battery_capacity_granularity_2; |
94 | acpi_string model_number; | 92 | acpi_string model_number; |
95 | acpi_string serial_number; | 93 | acpi_string serial_number; |
96 | acpi_string battery_type; | 94 | acpi_string battery_type; |
97 | acpi_string oem_info; | 95 | acpi_string oem_info; |
98 | }; | 96 | }; |
99 | 97 | ||
100 | struct acpi_battery_flags { | 98 | struct acpi_battery_flags { |
101 | u8 present:1; /* Bay occupied? */ | 99 | u8 present:1; /* Bay occupied? */ |
102 | u8 power_unit:1; /* 0=watts, 1=apms */ | 100 | u8 power_unit:1; /* 0=watts, 1=apms */ |
103 | u8 alarm:1; /* _BTP present? */ | 101 | u8 alarm:1; /* _BTP present? */ |
104 | u8 reserved:5; | 102 | u8 reserved:5; |
105 | }; | 103 | }; |
106 | 104 | ||
107 | struct acpi_battery_trips { | 105 | struct acpi_battery_trips { |
108 | unsigned long warning; | 106 | unsigned long warning; |
109 | unsigned long low; | 107 | unsigned long low; |
110 | }; | 108 | }; |
111 | 109 | ||
112 | struct acpi_battery { | 110 | struct acpi_battery { |
113 | acpi_handle handle; | 111 | acpi_handle handle; |
114 | struct acpi_battery_flags flags; | 112 | struct acpi_battery_flags flags; |
115 | struct acpi_battery_trips trips; | 113 | struct acpi_battery_trips trips; |
116 | unsigned long alarm; | 114 | unsigned long alarm; |
117 | struct acpi_battery_info *info; | 115 | struct acpi_battery_info *info; |
118 | }; | 116 | }; |
119 | 117 | ||
120 | |||
121 | /* -------------------------------------------------------------------------- | 118 | /* -------------------------------------------------------------------------- |
122 | Battery Management | 119 | Battery Management |
123 | -------------------------------------------------------------------------- */ | 120 | -------------------------------------------------------------------------- */ |
124 | 121 | ||
125 | static int | 122 | static int |
126 | acpi_battery_get_info ( | 123 | acpi_battery_get_info(struct acpi_battery *battery, |
127 | struct acpi_battery *battery, | 124 | struct acpi_battery_info **bif) |
128 | struct acpi_battery_info **bif) | ||
129 | { | 125 | { |
130 | int result = 0; | 126 | int result = 0; |
131 | acpi_status status = 0; | 127 | acpi_status status = 0; |
132 | struct acpi_buffer buffer = {ACPI_ALLOCATE_BUFFER, NULL}; | 128 | struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL }; |
133 | struct acpi_buffer format = {sizeof(ACPI_BATTERY_FORMAT_BIF), | 129 | struct acpi_buffer format = { sizeof(ACPI_BATTERY_FORMAT_BIF), |
134 | ACPI_BATTERY_FORMAT_BIF}; | 130 | ACPI_BATTERY_FORMAT_BIF |
135 | struct acpi_buffer data = {0, NULL}; | 131 | }; |
136 | union acpi_object *package = NULL; | 132 | struct acpi_buffer data = { 0, NULL }; |
133 | union acpi_object *package = NULL; | ||
137 | 134 | ||
138 | ACPI_FUNCTION_TRACE("acpi_battery_get_info"); | 135 | ACPI_FUNCTION_TRACE("acpi_battery_get_info"); |
139 | 136 | ||
@@ -148,7 +145,7 @@ acpi_battery_get_info ( | |||
148 | return_VALUE(-ENODEV); | 145 | return_VALUE(-ENODEV); |
149 | } | 146 | } |
150 | 147 | ||
151 | package = (union acpi_object *) buffer.pointer; | 148 | package = (union acpi_object *)buffer.pointer; |
152 | 149 | ||
153 | /* Extract Package Data */ | 150 | /* Extract Package Data */ |
154 | 151 | ||
@@ -174,27 +171,27 @@ acpi_battery_get_info ( | |||
174 | goto end; | 171 | goto end; |
175 | } | 172 | } |
176 | 173 | ||
177 | end: | 174 | end: |
178 | acpi_os_free(buffer.pointer); | 175 | acpi_os_free(buffer.pointer); |
179 | 176 | ||
180 | if (!result) | 177 | if (!result) |
181 | (*bif) = (struct acpi_battery_info *) data.pointer; | 178 | (*bif) = (struct acpi_battery_info *)data.pointer; |
182 | 179 | ||
183 | return_VALUE(result); | 180 | return_VALUE(result); |
184 | } | 181 | } |
185 | 182 | ||
186 | static int | 183 | static int |
187 | acpi_battery_get_status ( | 184 | acpi_battery_get_status(struct acpi_battery *battery, |
188 | struct acpi_battery *battery, | 185 | struct acpi_battery_status **bst) |
189 | struct acpi_battery_status **bst) | ||
190 | { | 186 | { |
191 | int result = 0; | 187 | int result = 0; |
192 | acpi_status status = 0; | 188 | acpi_status status = 0; |
193 | struct acpi_buffer buffer = {ACPI_ALLOCATE_BUFFER, NULL}; | 189 | struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL }; |
194 | struct acpi_buffer format = {sizeof(ACPI_BATTERY_FORMAT_BST), | 190 | struct acpi_buffer format = { sizeof(ACPI_BATTERY_FORMAT_BST), |
195 | ACPI_BATTERY_FORMAT_BST}; | 191 | ACPI_BATTERY_FORMAT_BST |
196 | struct acpi_buffer data = {0, NULL}; | 192 | }; |
197 | union acpi_object *package = NULL; | 193 | struct acpi_buffer data = { 0, NULL }; |
194 | union acpi_object *package = NULL; | ||
198 | 195 | ||
199 | ACPI_FUNCTION_TRACE("acpi_battery_get_status"); | 196 | ACPI_FUNCTION_TRACE("acpi_battery_get_status"); |
200 | 197 | ||
@@ -209,7 +206,7 @@ acpi_battery_get_status ( | |||
209 | return_VALUE(-ENODEV); | 206 | return_VALUE(-ENODEV); |
210 | } | 207 | } |
211 | 208 | ||
212 | package = (union acpi_object *) buffer.pointer; | 209 | package = (union acpi_object *)buffer.pointer; |
213 | 210 | ||
214 | /* Extract Package Data */ | 211 | /* Extract Package Data */ |
215 | 212 | ||
@@ -235,24 +232,21 @@ acpi_battery_get_status ( | |||
235 | goto end; | 232 | goto end; |
236 | } | 233 | } |
237 | 234 | ||
238 | end: | 235 | end: |
239 | acpi_os_free(buffer.pointer); | 236 | acpi_os_free(buffer.pointer); |
240 | 237 | ||
241 | if (!result) | 238 | if (!result) |
242 | (*bst) = (struct acpi_battery_status *) data.pointer; | 239 | (*bst) = (struct acpi_battery_status *)data.pointer; |
243 | 240 | ||
244 | return_VALUE(result); | 241 | return_VALUE(result); |
245 | } | 242 | } |
246 | 243 | ||
247 | |||
248 | static int | 244 | static int |
249 | acpi_battery_set_alarm ( | 245 | acpi_battery_set_alarm(struct acpi_battery *battery, unsigned long alarm) |
250 | struct acpi_battery *battery, | ||
251 | unsigned long alarm) | ||
252 | { | 246 | { |
253 | acpi_status status = 0; | 247 | acpi_status status = 0; |
254 | union acpi_object arg0 = {ACPI_TYPE_INTEGER}; | 248 | union acpi_object arg0 = { ACPI_TYPE_INTEGER }; |
255 | struct acpi_object_list arg_list = {1, &arg0}; | 249 | struct acpi_object_list arg_list = { 1, &arg0 }; |
256 | 250 | ||
257 | ACPI_FUNCTION_TRACE("acpi_battery_set_alarm"); | 251 | ACPI_FUNCTION_TRACE("acpi_battery_set_alarm"); |
258 | 252 | ||
@@ -275,19 +269,16 @@ acpi_battery_set_alarm ( | |||
275 | return_VALUE(0); | 269 | return_VALUE(0); |
276 | } | 270 | } |
277 | 271 | ||
278 | 272 | static int acpi_battery_check(struct acpi_battery *battery) | |
279 | static int | ||
280 | acpi_battery_check ( | ||
281 | struct acpi_battery *battery) | ||
282 | { | 273 | { |
283 | int result = 0; | 274 | int result = 0; |
284 | acpi_status status = AE_OK; | 275 | acpi_status status = AE_OK; |
285 | acpi_handle handle = NULL; | 276 | acpi_handle handle = NULL; |
286 | struct acpi_device *device = NULL; | 277 | struct acpi_device *device = NULL; |
287 | struct acpi_battery_info *bif = NULL; | 278 | struct acpi_battery_info *bif = NULL; |
288 | 279 | ||
289 | ACPI_FUNCTION_TRACE("acpi_battery_check"); | 280 | ACPI_FUNCTION_TRACE("acpi_battery_check"); |
290 | 281 | ||
291 | if (!battery) | 282 | if (!battery) |
292 | return_VALUE(-EINVAL); | 283 | return_VALUE(-EINVAL); |
293 | 284 | ||
@@ -336,18 +327,17 @@ acpi_battery_check ( | |||
336 | return_VALUE(result); | 327 | return_VALUE(result); |
337 | } | 328 | } |
338 | 329 | ||
339 | |||
340 | /* -------------------------------------------------------------------------- | 330 | /* -------------------------------------------------------------------------- |
341 | FS Interface (/proc) | 331 | FS Interface (/proc) |
342 | -------------------------------------------------------------------------- */ | 332 | -------------------------------------------------------------------------- */ |
343 | 333 | ||
344 | static struct proc_dir_entry *acpi_battery_dir; | 334 | static struct proc_dir_entry *acpi_battery_dir; |
345 | static int acpi_battery_read_info(struct seq_file *seq, void *offset) | 335 | static int acpi_battery_read_info(struct seq_file *seq, void *offset) |
346 | { | 336 | { |
347 | int result = 0; | 337 | int result = 0; |
348 | struct acpi_battery *battery = (struct acpi_battery *) seq->private; | 338 | struct acpi_battery *battery = (struct acpi_battery *)seq->private; |
349 | struct acpi_battery_info *bif = NULL; | 339 | struct acpi_battery_info *bif = NULL; |
350 | char *units = "?"; | 340 | char *units = "?"; |
351 | 341 | ||
352 | ACPI_FUNCTION_TRACE("acpi_battery_read_info"); | 342 | ACPI_FUNCTION_TRACE("acpi_battery_read_info"); |
353 | 343 | ||
@@ -369,19 +359,21 @@ static int acpi_battery_read_info(struct seq_file *seq, void *offset) | |||
369 | goto end; | 359 | goto end; |
370 | } | 360 | } |
371 | 361 | ||
372 | units = bif->power_unit ? ACPI_BATTERY_UNITS_AMPS : ACPI_BATTERY_UNITS_WATTS; | 362 | units = |
373 | 363 | bif-> | |
364 | power_unit ? ACPI_BATTERY_UNITS_AMPS : ACPI_BATTERY_UNITS_WATTS; | ||
365 | |||
374 | if (bif->design_capacity == ACPI_BATTERY_VALUE_UNKNOWN) | 366 | if (bif->design_capacity == ACPI_BATTERY_VALUE_UNKNOWN) |
375 | seq_printf(seq, "design capacity: unknown\n"); | 367 | seq_printf(seq, "design capacity: unknown\n"); |
376 | else | 368 | else |
377 | seq_printf(seq, "design capacity: %d %sh\n", | 369 | seq_printf(seq, "design capacity: %d %sh\n", |
378 | (u32) bif->design_capacity, units); | 370 | (u32) bif->design_capacity, units); |
379 | 371 | ||
380 | if (bif->last_full_capacity == ACPI_BATTERY_VALUE_UNKNOWN) | 372 | if (bif->last_full_capacity == ACPI_BATTERY_VALUE_UNKNOWN) |
381 | seq_printf(seq, "last full capacity: unknown\n"); | 373 | seq_printf(seq, "last full capacity: unknown\n"); |
382 | else | 374 | else |
383 | seq_printf(seq, "last full capacity: %d %sh\n", | 375 | seq_printf(seq, "last full capacity: %d %sh\n", |
384 | (u32) bif->last_full_capacity, units); | 376 | (u32) bif->last_full_capacity, units); |
385 | 377 | ||
386 | switch ((u32) bif->battery_technology) { | 378 | switch ((u32) bif->battery_technology) { |
387 | case 0: | 379 | case 0: |
@@ -399,26 +391,22 @@ static int acpi_battery_read_info(struct seq_file *seq, void *offset) | |||
399 | seq_printf(seq, "design voltage: unknown\n"); | 391 | seq_printf(seq, "design voltage: unknown\n"); |
400 | else | 392 | else |
401 | seq_printf(seq, "design voltage: %d mV\n", | 393 | seq_printf(seq, "design voltage: %d mV\n", |
402 | (u32) bif->design_voltage); | 394 | (u32) bif->design_voltage); |
403 | 395 | ||
404 | seq_printf(seq, "design capacity warning: %d %sh\n", | 396 | seq_printf(seq, "design capacity warning: %d %sh\n", |
405 | (u32) bif->design_capacity_warning, units); | 397 | (u32) bif->design_capacity_warning, units); |
406 | seq_printf(seq, "design capacity low: %d %sh\n", | 398 | seq_printf(seq, "design capacity low: %d %sh\n", |
407 | (u32) bif->design_capacity_low, units); | 399 | (u32) bif->design_capacity_low, units); |
408 | seq_printf(seq, "capacity granularity 1: %d %sh\n", | 400 | seq_printf(seq, "capacity granularity 1: %d %sh\n", |
409 | (u32) bif->battery_capacity_granularity_1, units); | 401 | (u32) bif->battery_capacity_granularity_1, units); |
410 | seq_printf(seq, "capacity granularity 2: %d %sh\n", | 402 | seq_printf(seq, "capacity granularity 2: %d %sh\n", |
411 | (u32) bif->battery_capacity_granularity_2, units); | 403 | (u32) bif->battery_capacity_granularity_2, units); |
412 | seq_printf(seq, "model number: %s\n", | 404 | seq_printf(seq, "model number: %s\n", bif->model_number); |
413 | bif->model_number); | 405 | seq_printf(seq, "serial number: %s\n", bif->serial_number); |
414 | seq_printf(seq, "serial number: %s\n", | 406 | seq_printf(seq, "battery type: %s\n", bif->battery_type); |
415 | bif->serial_number); | 407 | seq_printf(seq, "OEM info: %s\n", bif->oem_info); |
416 | seq_printf(seq, "battery type: %s\n", | 408 | |
417 | bif->battery_type); | 409 | end: |
418 | seq_printf(seq, "OEM info: %s\n", | ||
419 | bif->oem_info); | ||
420 | |||
421 | end: | ||
422 | kfree(bif); | 410 | kfree(bif); |
423 | 411 | ||
424 | return_VALUE(0); | 412 | return_VALUE(0); |
@@ -429,14 +417,12 @@ static int acpi_battery_info_open_fs(struct inode *inode, struct file *file) | |||
429 | return single_open(file, acpi_battery_read_info, PDE(inode)->data); | 417 | return single_open(file, acpi_battery_read_info, PDE(inode)->data); |
430 | } | 418 | } |
431 | 419 | ||
432 | 420 | static int acpi_battery_read_state(struct seq_file *seq, void *offset) | |
433 | static int | ||
434 | acpi_battery_read_state (struct seq_file *seq, void *offset) | ||
435 | { | 421 | { |
436 | int result = 0; | 422 | int result = 0; |
437 | struct acpi_battery *battery = (struct acpi_battery *) seq->private; | 423 | struct acpi_battery *battery = (struct acpi_battery *)seq->private; |
438 | struct acpi_battery_status *bst = NULL; | 424 | struct acpi_battery_status *bst = NULL; |
439 | char *units = "?"; | 425 | char *units = "?"; |
440 | 426 | ||
441 | ACPI_FUNCTION_TRACE("acpi_battery_read_state"); | 427 | ACPI_FUNCTION_TRACE("acpi_battery_read_state"); |
442 | 428 | ||
@@ -452,7 +438,9 @@ acpi_battery_read_state (struct seq_file *seq, void *offset) | |||
452 | 438 | ||
453 | /* Battery Units */ | 439 | /* Battery Units */ |
454 | 440 | ||
455 | units = battery->flags.power_unit ? ACPI_BATTERY_UNITS_AMPS : ACPI_BATTERY_UNITS_WATTS; | 441 | units = |
442 | battery->flags. | ||
443 | power_unit ? ACPI_BATTERY_UNITS_AMPS : ACPI_BATTERY_UNITS_WATTS; | ||
456 | 444 | ||
457 | /* Battery Status (_BST) */ | 445 | /* Battery Status (_BST) */ |
458 | 446 | ||
@@ -467,12 +455,12 @@ acpi_battery_read_state (struct seq_file *seq, void *offset) | |||
467 | else | 455 | else |
468 | seq_printf(seq, "capacity state: critical\n"); | 456 | seq_printf(seq, "capacity state: critical\n"); |
469 | 457 | ||
470 | if ((bst->state & 0x01) && (bst->state & 0x02)){ | 458 | if ((bst->state & 0x01) && (bst->state & 0x02)) { |
471 | seq_printf(seq, "charging state: charging/discharging\n"); | 459 | seq_printf(seq, |
472 | ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, | 460 | "charging state: charging/discharging\n"); |
473 | "Battery Charging and Discharging?\n")); | 461 | ACPI_DEBUG_PRINT((ACPI_DB_ERROR, |
474 | } | 462 | "Battery Charging and Discharging?\n")); |
475 | else if (bst->state & 0x01) | 463 | } else if (bst->state & 0x01) |
476 | seq_printf(seq, "charging state: discharging\n"); | 464 | seq_printf(seq, "charging state: discharging\n"); |
477 | else if (bst->state & 0x02) | 465 | else if (bst->state & 0x02) |
478 | seq_printf(seq, "charging state: charging\n"); | 466 | seq_printf(seq, "charging state: charging\n"); |
@@ -484,21 +472,21 @@ acpi_battery_read_state (struct seq_file *seq, void *offset) | |||
484 | seq_printf(seq, "present rate: unknown\n"); | 472 | seq_printf(seq, "present rate: unknown\n"); |
485 | else | 473 | else |
486 | seq_printf(seq, "present rate: %d %s\n", | 474 | seq_printf(seq, "present rate: %d %s\n", |
487 | (u32) bst->present_rate, units); | 475 | (u32) bst->present_rate, units); |
488 | 476 | ||
489 | if (bst->remaining_capacity == ACPI_BATTERY_VALUE_UNKNOWN) | 477 | if (bst->remaining_capacity == ACPI_BATTERY_VALUE_UNKNOWN) |
490 | seq_printf(seq, "remaining capacity: unknown\n"); | 478 | seq_printf(seq, "remaining capacity: unknown\n"); |
491 | else | 479 | else |
492 | seq_printf(seq, "remaining capacity: %d %sh\n", | 480 | seq_printf(seq, "remaining capacity: %d %sh\n", |
493 | (u32) bst->remaining_capacity, units); | 481 | (u32) bst->remaining_capacity, units); |
494 | 482 | ||
495 | if (bst->present_voltage == ACPI_BATTERY_VALUE_UNKNOWN) | 483 | if (bst->present_voltage == ACPI_BATTERY_VALUE_UNKNOWN) |
496 | seq_printf(seq, "present voltage: unknown\n"); | 484 | seq_printf(seq, "present voltage: unknown\n"); |
497 | else | 485 | else |
498 | seq_printf(seq, "present voltage: %d mV\n", | 486 | seq_printf(seq, "present voltage: %d mV\n", |
499 | (u32) bst->present_voltage); | 487 | (u32) bst->present_voltage); |
500 | 488 | ||
501 | end: | 489 | end: |
502 | kfree(bst); | 490 | kfree(bst); |
503 | 491 | ||
504 | return_VALUE(0); | 492 | return_VALUE(0); |
@@ -509,12 +497,10 @@ static int acpi_battery_state_open_fs(struct inode *inode, struct file *file) | |||
509 | return single_open(file, acpi_battery_read_state, PDE(inode)->data); | 497 | return single_open(file, acpi_battery_read_state, PDE(inode)->data); |
510 | } | 498 | } |
511 | 499 | ||
512 | 500 | static int acpi_battery_read_alarm(struct seq_file *seq, void *offset) | |
513 | static int | ||
514 | acpi_battery_read_alarm (struct seq_file *seq, void *offset) | ||
515 | { | 501 | { |
516 | struct acpi_battery *battery = (struct acpi_battery *) seq->private; | 502 | struct acpi_battery *battery = (struct acpi_battery *)seq->private; |
517 | char *units = "?"; | 503 | char *units = "?"; |
518 | 504 | ||
519 | ACPI_FUNCTION_TRACE("acpi_battery_read_alarm"); | 505 | ACPI_FUNCTION_TRACE("acpi_battery_read_alarm"); |
520 | 506 | ||
@@ -527,8 +513,10 @@ acpi_battery_read_alarm (struct seq_file *seq, void *offset) | |||
527 | } | 513 | } |
528 | 514 | ||
529 | /* Battery Units */ | 515 | /* Battery Units */ |
530 | 516 | ||
531 | units = battery->flags.power_unit ? ACPI_BATTERY_UNITS_AMPS : ACPI_BATTERY_UNITS_WATTS; | 517 | units = |
518 | battery->flags. | ||
519 | power_unit ? ACPI_BATTERY_UNITS_AMPS : ACPI_BATTERY_UNITS_WATTS; | ||
532 | 520 | ||
533 | /* Battery Alarm */ | 521 | /* Battery Alarm */ |
534 | 522 | ||
@@ -538,22 +526,19 @@ acpi_battery_read_alarm (struct seq_file *seq, void *offset) | |||
538 | else | 526 | else |
539 | seq_printf(seq, "%d %sh\n", (u32) battery->alarm, units); | 527 | seq_printf(seq, "%d %sh\n", (u32) battery->alarm, units); |
540 | 528 | ||
541 | end: | 529 | end: |
542 | return_VALUE(0); | 530 | return_VALUE(0); |
543 | } | 531 | } |
544 | 532 | ||
545 | |||
546 | static ssize_t | 533 | static ssize_t |
547 | acpi_battery_write_alarm ( | 534 | acpi_battery_write_alarm(struct file *file, |
548 | struct file *file, | 535 | const char __user * buffer, |
549 | const char __user *buffer, | 536 | size_t count, loff_t * ppos) |
550 | size_t count, | ||
551 | loff_t *ppos) | ||
552 | { | 537 | { |
553 | int result = 0; | 538 | int result = 0; |
554 | char alarm_string[12] = {'\0'}; | 539 | char alarm_string[12] = { '\0' }; |
555 | struct seq_file *m = (struct seq_file *)file->private_data; | 540 | struct seq_file *m = (struct seq_file *)file->private_data; |
556 | struct acpi_battery *battery = (struct acpi_battery *)m->private; | 541 | struct acpi_battery *battery = (struct acpi_battery *)m->private; |
557 | 542 | ||
558 | ACPI_FUNCTION_TRACE("acpi_battery_write_alarm"); | 543 | ACPI_FUNCTION_TRACE("acpi_battery_write_alarm"); |
559 | 544 | ||
@@ -565,11 +550,11 @@ acpi_battery_write_alarm ( | |||
565 | 550 | ||
566 | if (copy_from_user(alarm_string, buffer, count)) | 551 | if (copy_from_user(alarm_string, buffer, count)) |
567 | return_VALUE(-EFAULT); | 552 | return_VALUE(-EFAULT); |
568 | 553 | ||
569 | alarm_string[count] = '\0'; | 554 | alarm_string[count] = '\0'; |
570 | 555 | ||
571 | result = acpi_battery_set_alarm(battery, | 556 | result = acpi_battery_set_alarm(battery, |
572 | simple_strtoul(alarm_string, NULL, 0)); | 557 | simple_strtoul(alarm_string, NULL, 0)); |
573 | if (result) | 558 | if (result) |
574 | return_VALUE(result); | 559 | return_VALUE(result); |
575 | 560 | ||
@@ -582,41 +567,39 @@ static int acpi_battery_alarm_open_fs(struct inode *inode, struct file *file) | |||
582 | } | 567 | } |
583 | 568 | ||
584 | static struct file_operations acpi_battery_info_ops = { | 569 | static struct file_operations acpi_battery_info_ops = { |
585 | .open = acpi_battery_info_open_fs, | 570 | .open = acpi_battery_info_open_fs, |
586 | .read = seq_read, | 571 | .read = seq_read, |
587 | .llseek = seq_lseek, | 572 | .llseek = seq_lseek, |
588 | .release = single_release, | 573 | .release = single_release, |
589 | .owner = THIS_MODULE, | 574 | .owner = THIS_MODULE, |
590 | }; | 575 | }; |
591 | 576 | ||
592 | static struct file_operations acpi_battery_state_ops = { | 577 | static struct file_operations acpi_battery_state_ops = { |
593 | .open = acpi_battery_state_open_fs, | 578 | .open = acpi_battery_state_open_fs, |
594 | .read = seq_read, | 579 | .read = seq_read, |
595 | .llseek = seq_lseek, | 580 | .llseek = seq_lseek, |
596 | .release = single_release, | 581 | .release = single_release, |
597 | .owner = THIS_MODULE, | 582 | .owner = THIS_MODULE, |
598 | }; | 583 | }; |
599 | 584 | ||
600 | static struct file_operations acpi_battery_alarm_ops = { | 585 | static struct file_operations acpi_battery_alarm_ops = { |
601 | .open = acpi_battery_alarm_open_fs, | 586 | .open = acpi_battery_alarm_open_fs, |
602 | .read = seq_read, | 587 | .read = seq_read, |
603 | .write = acpi_battery_write_alarm, | 588 | .write = acpi_battery_write_alarm, |
604 | .llseek = seq_lseek, | 589 | .llseek = seq_lseek, |
605 | .release = single_release, | 590 | .release = single_release, |
606 | .owner = THIS_MODULE, | 591 | .owner = THIS_MODULE, |
607 | }; | 592 | }; |
608 | 593 | ||
609 | static int | 594 | static int acpi_battery_add_fs(struct acpi_device *device) |
610 | acpi_battery_add_fs ( | ||
611 | struct acpi_device *device) | ||
612 | { | 595 | { |
613 | struct proc_dir_entry *entry = NULL; | 596 | struct proc_dir_entry *entry = NULL; |
614 | 597 | ||
615 | ACPI_FUNCTION_TRACE("acpi_battery_add_fs"); | 598 | ACPI_FUNCTION_TRACE("acpi_battery_add_fs"); |
616 | 599 | ||
617 | if (!acpi_device_dir(device)) { | 600 | if (!acpi_device_dir(device)) { |
618 | acpi_device_dir(device) = proc_mkdir(acpi_device_bid(device), | 601 | acpi_device_dir(device) = proc_mkdir(acpi_device_bid(device), |
619 | acpi_battery_dir); | 602 | acpi_battery_dir); |
620 | if (!acpi_device_dir(device)) | 603 | if (!acpi_device_dir(device)) |
621 | return_VALUE(-ENODEV); | 604 | return_VALUE(-ENODEV); |
622 | acpi_device_dir(device)->owner = THIS_MODULE; | 605 | acpi_device_dir(device)->owner = THIS_MODULE; |
@@ -624,24 +607,24 @@ acpi_battery_add_fs ( | |||
624 | 607 | ||
625 | /* 'info' [R] */ | 608 | /* 'info' [R] */ |
626 | entry = create_proc_entry(ACPI_BATTERY_FILE_INFO, | 609 | entry = create_proc_entry(ACPI_BATTERY_FILE_INFO, |
627 | S_IRUGO, acpi_device_dir(device)); | 610 | S_IRUGO, acpi_device_dir(device)); |
628 | if (!entry) | 611 | if (!entry) |
629 | ACPI_DEBUG_PRINT((ACPI_DB_ERROR, | 612 | ACPI_DEBUG_PRINT((ACPI_DB_ERROR, |
630 | "Unable to create '%s' fs entry\n", | 613 | "Unable to create '%s' fs entry\n", |
631 | ACPI_BATTERY_FILE_INFO)); | 614 | ACPI_BATTERY_FILE_INFO)); |
632 | else { | 615 | else { |
633 | entry->proc_fops = &acpi_battery_info_ops; | 616 | entry->proc_fops = &acpi_battery_info_ops; |
634 | entry->data = acpi_driver_data(device); | 617 | entry->data = acpi_driver_data(device); |
635 | entry->owner = THIS_MODULE; | 618 | entry->owner = THIS_MODULE; |
636 | } | 619 | } |
637 | 620 | ||
638 | /* 'status' [R] */ | 621 | /* 'status' [R] */ |
639 | entry = create_proc_entry(ACPI_BATTERY_FILE_STATUS, | 622 | entry = create_proc_entry(ACPI_BATTERY_FILE_STATUS, |
640 | S_IRUGO, acpi_device_dir(device)); | 623 | S_IRUGO, acpi_device_dir(device)); |
641 | if (!entry) | 624 | if (!entry) |
642 | ACPI_DEBUG_PRINT((ACPI_DB_ERROR, | 625 | ACPI_DEBUG_PRINT((ACPI_DB_ERROR, |
643 | "Unable to create '%s' fs entry\n", | 626 | "Unable to create '%s' fs entry\n", |
644 | ACPI_BATTERY_FILE_STATUS)); | 627 | ACPI_BATTERY_FILE_STATUS)); |
645 | else { | 628 | else { |
646 | entry->proc_fops = &acpi_battery_state_ops; | 629 | entry->proc_fops = &acpi_battery_state_ops; |
647 | entry->data = acpi_driver_data(device); | 630 | entry->data = acpi_driver_data(device); |
@@ -650,11 +633,12 @@ acpi_battery_add_fs ( | |||
650 | 633 | ||
651 | /* 'alarm' [R/W] */ | 634 | /* 'alarm' [R/W] */ |
652 | entry = create_proc_entry(ACPI_BATTERY_FILE_ALARM, | 635 | entry = create_proc_entry(ACPI_BATTERY_FILE_ALARM, |
653 | S_IFREG|S_IRUGO|S_IWUSR, acpi_device_dir(device)); | 636 | S_IFREG | S_IRUGO | S_IWUSR, |
637 | acpi_device_dir(device)); | ||
654 | if (!entry) | 638 | if (!entry) |
655 | ACPI_DEBUG_PRINT((ACPI_DB_ERROR, | 639 | ACPI_DEBUG_PRINT((ACPI_DB_ERROR, |
656 | "Unable to create '%s' fs entry\n", | 640 | "Unable to create '%s' fs entry\n", |
657 | ACPI_BATTERY_FILE_ALARM)); | 641 | ACPI_BATTERY_FILE_ALARM)); |
658 | else { | 642 | else { |
659 | entry->proc_fops = &acpi_battery_alarm_ops; | 643 | entry->proc_fops = &acpi_battery_alarm_ops; |
660 | entry->data = acpi_driver_data(device); | 644 | entry->data = acpi_driver_data(device); |
@@ -664,10 +648,7 @@ acpi_battery_add_fs ( | |||
664 | return_VALUE(0); | 648 | return_VALUE(0); |
665 | } | 649 | } |
666 | 650 | ||
667 | 651 | static int acpi_battery_remove_fs(struct acpi_device *device) | |
668 | static int | ||
669 | acpi_battery_remove_fs ( | ||
670 | struct acpi_device *device) | ||
671 | { | 652 | { |
672 | ACPI_FUNCTION_TRACE("acpi_battery_remove_fs"); | 653 | ACPI_FUNCTION_TRACE("acpi_battery_remove_fs"); |
673 | 654 | ||
@@ -686,19 +667,14 @@ acpi_battery_remove_fs ( | |||
686 | return_VALUE(0); | 667 | return_VALUE(0); |
687 | } | 668 | } |
688 | 669 | ||
689 | |||
690 | /* -------------------------------------------------------------------------- | 670 | /* -------------------------------------------------------------------------- |
691 | Driver Interface | 671 | Driver Interface |
692 | -------------------------------------------------------------------------- */ | 672 | -------------------------------------------------------------------------- */ |
693 | 673 | ||
694 | static void | 674 | static void acpi_battery_notify(acpi_handle handle, u32 event, void *data) |
695 | acpi_battery_notify ( | ||
696 | acpi_handle handle, | ||
697 | u32 event, | ||
698 | void *data) | ||
699 | { | 675 | { |
700 | struct acpi_battery *battery = (struct acpi_battery *) data; | 676 | struct acpi_battery *battery = (struct acpi_battery *)data; |
701 | struct acpi_device *device = NULL; | 677 | struct acpi_device *device = NULL; |
702 | 678 | ||
703 | ACPI_FUNCTION_TRACE("acpi_battery_notify"); | 679 | ACPI_FUNCTION_TRACE("acpi_battery_notify"); |
704 | 680 | ||
@@ -716,24 +692,21 @@ acpi_battery_notify ( | |||
716 | break; | 692 | break; |
717 | default: | 693 | default: |
718 | ACPI_DEBUG_PRINT((ACPI_DB_INFO, | 694 | ACPI_DEBUG_PRINT((ACPI_DB_INFO, |
719 | "Unsupported event [0x%x]\n", event)); | 695 | "Unsupported event [0x%x]\n", event)); |
720 | break; | 696 | break; |
721 | } | 697 | } |
722 | 698 | ||
723 | return_VOID; | 699 | return_VOID; |
724 | } | 700 | } |
725 | 701 | ||
726 | 702 | static int acpi_battery_add(struct acpi_device *device) | |
727 | static int | ||
728 | acpi_battery_add ( | ||
729 | struct acpi_device *device) | ||
730 | { | 703 | { |
731 | int result = 0; | 704 | int result = 0; |
732 | acpi_status status = 0; | 705 | acpi_status status = 0; |
733 | struct acpi_battery *battery = NULL; | 706 | struct acpi_battery *battery = NULL; |
734 | 707 | ||
735 | ACPI_FUNCTION_TRACE("acpi_battery_add"); | 708 | ACPI_FUNCTION_TRACE("acpi_battery_add"); |
736 | 709 | ||
737 | if (!device) | 710 | if (!device) |
738 | return_VALUE(-EINVAL); | 711 | return_VALUE(-EINVAL); |
739 | 712 | ||
@@ -756,19 +729,20 @@ acpi_battery_add ( | |||
756 | goto end; | 729 | goto end; |
757 | 730 | ||
758 | status = acpi_install_notify_handler(battery->handle, | 731 | status = acpi_install_notify_handler(battery->handle, |
759 | ACPI_DEVICE_NOTIFY, acpi_battery_notify, battery); | 732 | ACPI_DEVICE_NOTIFY, |
733 | acpi_battery_notify, battery); | ||
760 | if (ACPI_FAILURE(status)) { | 734 | if (ACPI_FAILURE(status)) { |
761 | ACPI_DEBUG_PRINT((ACPI_DB_ERROR, | 735 | ACPI_DEBUG_PRINT((ACPI_DB_ERROR, |
762 | "Error installing notify handler\n")); | 736 | "Error installing notify handler\n")); |
763 | result = -ENODEV; | 737 | result = -ENODEV; |
764 | goto end; | 738 | goto end; |
765 | } | 739 | } |
766 | 740 | ||
767 | printk(KERN_INFO PREFIX "%s Slot [%s] (battery %s)\n", | 741 | printk(KERN_INFO PREFIX "%s Slot [%s] (battery %s)\n", |
768 | ACPI_BATTERY_DEVICE_NAME, acpi_device_bid(device), | 742 | ACPI_BATTERY_DEVICE_NAME, acpi_device_bid(device), |
769 | device->status.battery_present?"present":"absent"); | 743 | device->status.battery_present ? "present" : "absent"); |
770 | 744 | ||
771 | end: | 745 | end: |
772 | if (result) { | 746 | if (result) { |
773 | acpi_battery_remove_fs(device); | 747 | acpi_battery_remove_fs(device); |
774 | kfree(battery); | 748 | kfree(battery); |
@@ -777,27 +751,24 @@ end: | |||
777 | return_VALUE(result); | 751 | return_VALUE(result); |
778 | } | 752 | } |
779 | 753 | ||
780 | 754 | static int acpi_battery_remove(struct acpi_device *device, int type) | |
781 | static int | ||
782 | acpi_battery_remove ( | ||
783 | struct acpi_device *device, | ||
784 | int type) | ||
785 | { | 755 | { |
786 | acpi_status status = 0; | 756 | acpi_status status = 0; |
787 | struct acpi_battery *battery = NULL; | 757 | struct acpi_battery *battery = NULL; |
788 | 758 | ||
789 | ACPI_FUNCTION_TRACE("acpi_battery_remove"); | 759 | ACPI_FUNCTION_TRACE("acpi_battery_remove"); |
790 | 760 | ||
791 | if (!device || !acpi_driver_data(device)) | 761 | if (!device || !acpi_driver_data(device)) |
792 | return_VALUE(-EINVAL); | 762 | return_VALUE(-EINVAL); |
793 | 763 | ||
794 | battery = (struct acpi_battery *) acpi_driver_data(device); | 764 | battery = (struct acpi_battery *)acpi_driver_data(device); |
795 | 765 | ||
796 | status = acpi_remove_notify_handler(battery->handle, | 766 | status = acpi_remove_notify_handler(battery->handle, |
797 | ACPI_DEVICE_NOTIFY, acpi_battery_notify); | 767 | ACPI_DEVICE_NOTIFY, |
768 | acpi_battery_notify); | ||
798 | if (ACPI_FAILURE(status)) | 769 | if (ACPI_FAILURE(status)) |
799 | ACPI_DEBUG_PRINT((ACPI_DB_ERROR, | 770 | ACPI_DEBUG_PRINT((ACPI_DB_ERROR, |
800 | "Error removing notify handler\n")); | 771 | "Error removing notify handler\n")); |
801 | 772 | ||
802 | acpi_battery_remove_fs(device); | 773 | acpi_battery_remove_fs(device); |
803 | 774 | ||
@@ -806,11 +777,9 @@ acpi_battery_remove ( | |||
806 | return_VALUE(0); | 777 | return_VALUE(0); |
807 | } | 778 | } |
808 | 779 | ||
809 | 780 | static int __init acpi_battery_init(void) | |
810 | static int __init | ||
811 | acpi_battery_init (void) | ||
812 | { | 781 | { |
813 | int result = 0; | 782 | int result = 0; |
814 | 783 | ||
815 | ACPI_FUNCTION_TRACE("acpi_battery_init"); | 784 | ACPI_FUNCTION_TRACE("acpi_battery_init"); |
816 | 785 | ||
@@ -828,9 +797,7 @@ acpi_battery_init (void) | |||
828 | return_VALUE(0); | 797 | return_VALUE(0); |
829 | } | 798 | } |
830 | 799 | ||
831 | 800 | static void __exit acpi_battery_exit(void) | |
832 | static void __exit | ||
833 | acpi_battery_exit (void) | ||
834 | { | 801 | { |
835 | ACPI_FUNCTION_TRACE("acpi_battery_exit"); | 802 | ACPI_FUNCTION_TRACE("acpi_battery_exit"); |
836 | 803 | ||
@@ -841,6 +808,5 @@ acpi_battery_exit (void) | |||
841 | return_VOID; | 808 | return_VOID; |
842 | } | 809 | } |
843 | 810 | ||
844 | |||
845 | module_init(acpi_battery_init); | 811 | module_init(acpi_battery_init); |
846 | module_exit(acpi_battery_exit); | 812 | module_exit(acpi_battery_exit); |