tangled
alpha
login
or
join now
tjh.dev
/
kernel
Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
1
fork
atom
overview
issues
pulls
pipelines
Pull bugzilla-8768 into release branch
Len Brown
18 years ago
fc0dc4d3
53fdc518
+17
-30
1 changed file
expand all
collapse all
unified
split
drivers
acpi
battery.c
+17
-30
drivers/acpi/battery.c
···
113
acpi_string oem_info;
114
};
115
116
-
enum acpi_battery_files{
117
ACPI_BATTERY_INFO = 0,
118
ACPI_BATTERY_STATE,
119
ACPI_BATTERY_ALARM,
···
129
};
130
131
struct acpi_battery {
132
-
struct mutex mutex;
133
struct acpi_device *device;
134
struct acpi_battery_flags flags;
135
struct acpi_buffer bif_data;
136
struct acpi_buffer bst_data;
0
137
unsigned long alarm;
138
unsigned long update_time[ACPI_BATTERY_NUMFILES];
0
139
};
140
141
inline int acpi_battery_present(struct acpi_battery *battery)
···
236
return 0;
237
238
/* Evaluate _BIF */
239
-
240
-
status =
241
-
acpi_evaluate_object(acpi_battery_handle(battery), "_BIF", NULL,
242
-
&buffer);
243
if (ACPI_FAILURE(status)) {
244
ACPI_EXCEPTION((AE_INFO, status, "Evaluating _BIF"));
245
return -ENODEV;
···
286
return 0;
287
288
/* Evaluate _BST */
289
-
290
-
status =
291
-
acpi_evaluate_object(acpi_battery_handle(battery), "_BST", NULL,
292
-
&buffer);
293
if (ACPI_FAILURE(status)) {
294
ACPI_EXCEPTION((AE_INFO, status, "Evaluating _BST"));
295
return -ENODEV;
···
337
338
arg0.integer.value = alarm;
339
340
-
status =
341
-
acpi_evaluate_object(acpi_battery_handle(battery), "_BTP",
342
&arg_list, NULL);
0
343
if (ACPI_FAILURE(status))
344
return -ENODEV;
345
···
660
if (!battery || (count > sizeof(alarm_string) - 1))
661
return -EINVAL;
662
663
-
mutex_lock(&battery->mutex);
664
-
665
result = acpi_battery_update(battery, 1, &update_result);
666
if (result) {
667
result = -ENODEV;
···
688
acpi_battery_check_result(battery, result);
689
690
if (!result)
691
-
result = count;
692
-
693
-
mutex_unlock(&battery->mutex);
694
695
return result;
696
}
···
712
int update_result = ACPI_BATTERY_NONE_UPDATE;
713
int update = 0;
714
715
-
mutex_lock(&battery->mutex);
716
-
717
update = (get_seconds() - battery->update_time[fid] >= update_time);
718
update = (update | battery->flags.update[fid]);
719
···
729
result = acpi_read_funcs[fid].print(seq, result);
730
acpi_battery_check_result(battery, result);
731
battery->flags.update[fid] = result;
732
-
mutex_unlock(&battery->mutex);
733
return result;
734
}
735
···
892
if (!battery)
893
return -ENOMEM;
894
895
-
mutex_init(&battery->mutex);
896
-
897
-
mutex_lock(&battery->mutex);
898
-
899
battery->device = device;
900
strcpy(acpi_device_name(device), ACPI_BATTERY_DEVICE_NAME);
901
strcpy(acpi_device_class(device), ACPI_BATTERY_CLASS);
···
928
kfree(battery);
929
}
930
931
-
mutex_unlock(&battery->mutex);
932
933
return result;
934
}
···
942
943
battery = acpi_driver_data(device);
944
945
-
mutex_lock(&battery->mutex);
946
-
947
status = acpi_remove_notify_handler(device->handle,
948
ACPI_ALL_NOTIFY,
949
acpi_battery_notify);
···
952
953
kfree(battery->bst_data.pointer);
954
955
-
mutex_unlock(&battery->mutex);
956
-
957
-
mutex_destroy(&battery->mutex);
958
959
kfree(battery);
960
···
113
acpi_string oem_info;
114
};
115
116
+
enum acpi_battery_files {
117
ACPI_BATTERY_INFO = 0,
118
ACPI_BATTERY_STATE,
119
ACPI_BATTERY_ALARM,
···
129
};
130
131
struct acpi_battery {
0
132
struct acpi_device *device;
133
struct acpi_battery_flags flags;
134
struct acpi_buffer bif_data;
135
struct acpi_buffer bst_data;
136
+
struct mutex lock;
137
unsigned long alarm;
138
unsigned long update_time[ACPI_BATTERY_NUMFILES];
139
+
140
};
141
142
inline int acpi_battery_present(struct acpi_battery *battery)
···
235
return 0;
236
237
/* Evaluate _BIF */
238
+
mutex_lock(&battery->lock);
239
+
status = acpi_evaluate_object(acpi_battery_handle(battery), "_BIF",
240
+
NULL, &buffer);
241
+
mutex_unlock(&battery->lock);
242
if (ACPI_FAILURE(status)) {
243
ACPI_EXCEPTION((AE_INFO, status, "Evaluating _BIF"));
244
return -ENODEV;
···
285
return 0;
286
287
/* Evaluate _BST */
288
+
mutex_lock(&battery->lock);
289
+
status = acpi_evaluate_object(acpi_battery_handle(battery), "_BST",
290
+
NULL, &buffer);
291
+
mutex_unlock(&battery->lock);
292
if (ACPI_FAILURE(status)) {
293
ACPI_EXCEPTION((AE_INFO, status, "Evaluating _BST"));
294
return -ENODEV;
···
336
337
arg0.integer.value = alarm;
338
339
+
mutex_lock(&battery->lock);
340
+
status = acpi_evaluate_object(acpi_battery_handle(battery), "_BTP",
341
&arg_list, NULL);
342
+
mutex_unlock(&battery->lock);
343
if (ACPI_FAILURE(status))
344
return -ENODEV;
345
···
658
if (!battery || (count > sizeof(alarm_string) - 1))
659
return -EINVAL;
660
0
0
661
result = acpi_battery_update(battery, 1, &update_result);
662
if (result) {
663
result = -ENODEV;
···
688
acpi_battery_check_result(battery, result);
689
690
if (!result)
691
+
return count;
0
0
692
693
return result;
694
}
···
714
int update_result = ACPI_BATTERY_NONE_UPDATE;
715
int update = 0;
716
0
0
717
update = (get_seconds() - battery->update_time[fid] >= update_time);
718
update = (update | battery->flags.update[fid]);
719
···
733
result = acpi_read_funcs[fid].print(seq, result);
734
acpi_battery_check_result(battery, result);
735
battery->flags.update[fid] = result;
0
736
return result;
737
}
738
···
897
if (!battery)
898
return -ENOMEM;
899
900
+
mutex_init(&battery->lock);
0
0
0
901
battery->device = device;
902
strcpy(acpi_device_name(device), ACPI_BATTERY_DEVICE_NAME);
903
strcpy(acpi_device_class(device), ACPI_BATTERY_CLASS);
···
936
kfree(battery);
937
}
938
0
939
940
return result;
941
}
···
951
952
battery = acpi_driver_data(device);
953
0
0
954
status = acpi_remove_notify_handler(device->handle,
955
ACPI_ALL_NOTIFY,
956
acpi_battery_notify);
···
963
964
kfree(battery->bst_data.pointer);
965
966
+
mutex_destroy(&battery->lock);
0
0
967
968
kfree(battery);
969