aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/acpi/thermal.c
diff options
context:
space:
mode:
authorBjorn Helgaas <bjorn.helgaas@hp.com>2009-04-07 11:37:06 -0400
committerLen Brown <len.brown@intel.com>2009-04-07 16:26:57 -0400
commit342d550db1bc0b879007a8cdb38645558e839680 (patch)
tree54cc43ab9f64671e92ec838c5d627f391e43d628 /drivers/acpi/thermal.c
parent8e2c4f2844c0e8dcdfe312e5f2204854ca8532c6 (diff)
ACPI: thermal: use .notify method instead of installing handler directly
This patch adds a .notify() method. The presence of .notify() causes Linux/ACPI to manage event handlers and notify handlers on our behalf, so we don't have to install and remove them ourselves. Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com> CC: Zhang Rui <rui.zhang@intel.com> Signed-off-by: Len Brown <len.brown@intel.com>
Diffstat (limited to 'drivers/acpi/thermal.c')
-rw-r--r--drivers/acpi/thermal.c27
1 files changed, 4 insertions, 23 deletions
diff --git a/drivers/acpi/thermal.c b/drivers/acpi/thermal.c
index e8c143caf0fd..0914eaa9a097 100644
--- a/drivers/acpi/thermal.c
+++ b/drivers/acpi/thermal.c
@@ -98,6 +98,7 @@ MODULE_PARM_DESC(psv, "Disable or override all passive trip points.");
98static int acpi_thermal_add(struct acpi_device *device); 98static int acpi_thermal_add(struct acpi_device *device);
99static int acpi_thermal_remove(struct acpi_device *device, int type); 99static int acpi_thermal_remove(struct acpi_device *device, int type);
100static int acpi_thermal_resume(struct acpi_device *device); 100static int acpi_thermal_resume(struct acpi_device *device);
101static void acpi_thermal_notify(struct acpi_device *device, u32 event);
101static int acpi_thermal_state_open_fs(struct inode *inode, struct file *file); 102static int acpi_thermal_state_open_fs(struct inode *inode, struct file *file);
102static int acpi_thermal_temp_open_fs(struct inode *inode, struct file *file); 103static int acpi_thermal_temp_open_fs(struct inode *inode, struct file *file);
103static int acpi_thermal_trip_open_fs(struct inode *inode, struct file *file); 104static int acpi_thermal_trip_open_fs(struct inode *inode, struct file *file);
@@ -123,6 +124,7 @@ static struct acpi_driver acpi_thermal_driver = {
123 .add = acpi_thermal_add, 124 .add = acpi_thermal_add,
124 .remove = acpi_thermal_remove, 125 .remove = acpi_thermal_remove,
125 .resume = acpi_thermal_resume, 126 .resume = acpi_thermal_resume,
127 .notify = acpi_thermal_notify,
126 }, 128 },
127}; 129};
128 130
@@ -1264,17 +1266,14 @@ static int acpi_thermal_remove_fs(struct acpi_device *device)
1264 Driver Interface 1266 Driver Interface
1265 -------------------------------------------------------------------------- */ 1267 -------------------------------------------------------------------------- */
1266 1268
1267static void acpi_thermal_notify(acpi_handle handle, u32 event, void *data) 1269static void acpi_thermal_notify(struct acpi_device *device, u32 event)
1268{ 1270{
1269 struct acpi_thermal *tz = data; 1271 struct acpi_thermal *tz = acpi_driver_data(device);
1270 struct acpi_device *device = NULL;
1271 1272
1272 1273
1273 if (!tz) 1274 if (!tz)
1274 return; 1275 return;
1275 1276
1276 device = tz->device;
1277
1278 switch (event) { 1277 switch (event) {
1279 case ACPI_THERMAL_NOTIFY_TEMPERATURE: 1278 case ACPI_THERMAL_NOTIFY_TEMPERATURE:
1280 acpi_thermal_check(tz); 1279 acpi_thermal_check(tz);
@@ -1298,8 +1297,6 @@ static void acpi_thermal_notify(acpi_handle handle, u32 event, void *data)
1298 "Unsupported event [0x%x]\n", event)); 1297 "Unsupported event [0x%x]\n", event));
1299 break; 1298 break;
1300 } 1299 }
1301
1302 return;
1303} 1300}
1304 1301
1305static int acpi_thermal_get_info(struct acpi_thermal *tz) 1302static int acpi_thermal_get_info(struct acpi_thermal *tz)
@@ -1337,7 +1334,6 @@ static int acpi_thermal_get_info(struct acpi_thermal *tz)
1337static int acpi_thermal_add(struct acpi_device *device) 1334static int acpi_thermal_add(struct acpi_device *device)
1338{ 1335{
1339 int result = 0; 1336 int result = 0;
1340 acpi_status status = AE_OK;
1341 struct acpi_thermal *tz = NULL; 1337 struct acpi_thermal *tz = NULL;
1342 1338
1343 1339
@@ -1368,21 +1364,11 @@ static int acpi_thermal_add(struct acpi_device *device)
1368 if (result) 1364 if (result)
1369 goto unregister_thermal_zone; 1365 goto unregister_thermal_zone;
1370 1366
1371 status = acpi_install_notify_handler(device->handle,
1372 ACPI_DEVICE_NOTIFY,
1373 acpi_thermal_notify, tz);
1374 if (ACPI_FAILURE(status)) {
1375 result = -ENODEV;
1376 goto remove_fs;
1377 }
1378
1379 printk(KERN_INFO PREFIX "%s [%s] (%ld C)\n", 1367 printk(KERN_INFO PREFIX "%s [%s] (%ld C)\n",
1380 acpi_device_name(device), acpi_device_bid(device), 1368 acpi_device_name(device), acpi_device_bid(device),
1381 KELVIN_TO_CELSIUS(tz->temperature)); 1369 KELVIN_TO_CELSIUS(tz->temperature));
1382 goto end; 1370 goto end;
1383 1371
1384remove_fs:
1385 acpi_thermal_remove_fs(device);
1386unregister_thermal_zone: 1372unregister_thermal_zone:
1387 thermal_zone_device_unregister(tz->thermal_zone); 1373 thermal_zone_device_unregister(tz->thermal_zone);
1388free_memory: 1374free_memory:
@@ -1393,7 +1379,6 @@ end:
1393 1379
1394static int acpi_thermal_remove(struct acpi_device *device, int type) 1380static int acpi_thermal_remove(struct acpi_device *device, int type)
1395{ 1381{
1396 acpi_status status = AE_OK;
1397 struct acpi_thermal *tz = NULL; 1382 struct acpi_thermal *tz = NULL;
1398 1383
1399 if (!device || !acpi_driver_data(device)) 1384 if (!device || !acpi_driver_data(device))
@@ -1401,10 +1386,6 @@ static int acpi_thermal_remove(struct acpi_device *device, int type)
1401 1386
1402 tz = acpi_driver_data(device); 1387 tz = acpi_driver_data(device);
1403 1388
1404 status = acpi_remove_notify_handler(device->handle,
1405 ACPI_DEVICE_NOTIFY,
1406 acpi_thermal_notify);
1407
1408 acpi_thermal_remove_fs(device); 1389 acpi_thermal_remove_fs(device);
1409 acpi_thermal_unregister_thermal_zone(tz); 1390 acpi_thermal_unregister_thermal_zone(tz);
1410 mutex_destroy(&tz->lock); 1391 mutex_destroy(&tz->lock);