ACPI: attach thermal zone info
Intel menlow driver needs to get the pointer of themal_zone_device structure of an ACPI thermal zone. Attach this to each ACPI thermal zone device object. Signed-off-by: Zhang Rui <rui.zhang@intel.com> Signed-off-by: Thomas Sujith <sujith.thomas@intel.com> Signed-off-by: Len Brown <len.brown@intel.com>
This commit is contained in:
@@ -122,6 +122,31 @@ int acpi_bus_get_status(struct acpi_device *device)
|
|||||||
|
|
||||||
EXPORT_SYMBOL(acpi_bus_get_status);
|
EXPORT_SYMBOL(acpi_bus_get_status);
|
||||||
|
|
||||||
|
void acpi_bus_private_data_handler(acpi_handle handle,
|
||||||
|
u32 function, void *context)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(acpi_bus_private_data_handler);
|
||||||
|
|
||||||
|
int acpi_bus_get_private_data(acpi_handle handle, void **data)
|
||||||
|
{
|
||||||
|
acpi_status status = AE_OK;
|
||||||
|
|
||||||
|
if (!*data)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
status = acpi_get_data(handle, acpi_bus_private_data_handler, data);
|
||||||
|
if (ACPI_FAILURE(status) || !*data) {
|
||||||
|
ACPI_DEBUG_PRINT((ACPI_DB_INFO, "No context for object [%p]\n",
|
||||||
|
handle));
|
||||||
|
return -ENODEV;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(acpi_bus_get_private_data);
|
||||||
|
|
||||||
/* --------------------------------------------------------------------------
|
/* --------------------------------------------------------------------------
|
||||||
Power Management
|
Power Management
|
||||||
-------------------------------------------------------------------------- */
|
-------------------------------------------------------------------------- */
|
||||||
|
@@ -1101,6 +1101,7 @@ static int acpi_thermal_register_thermal_zone(struct acpi_thermal *tz)
|
|||||||
{
|
{
|
||||||
int trips = 0;
|
int trips = 0;
|
||||||
int result;
|
int result;
|
||||||
|
acpi_status status;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (tz->trips.critical.flags.valid)
|
if (tz->trips.critical.flags.valid)
|
||||||
@@ -1129,6 +1130,15 @@ static int acpi_thermal_register_thermal_zone(struct acpi_thermal *tz)
|
|||||||
if (result)
|
if (result)
|
||||||
return result;
|
return result;
|
||||||
|
|
||||||
|
status = acpi_attach_data(tz->device->handle,
|
||||||
|
acpi_bus_private_data_handler,
|
||||||
|
tz->thermal_zone);
|
||||||
|
if (ACPI_FAILURE(status)) {
|
||||||
|
ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
|
||||||
|
"Error attaching device data\n"));
|
||||||
|
return -ENODEV;
|
||||||
|
}
|
||||||
|
|
||||||
tz->tz_enabled = 1;
|
tz->tz_enabled = 1;
|
||||||
|
|
||||||
printk(KERN_INFO PREFIX "%s is registered as thermal_zone%d\n",
|
printk(KERN_INFO PREFIX "%s is registered as thermal_zone%d\n",
|
||||||
@@ -1142,6 +1152,7 @@ static void acpi_thermal_unregister_thermal_zone(struct acpi_thermal *tz)
|
|||||||
sysfs_remove_link(&tz->thermal_zone->device.kobj, "device");
|
sysfs_remove_link(&tz->thermal_zone->device.kobj, "device");
|
||||||
thermal_zone_device_unregister(tz->thermal_zone);
|
thermal_zone_device_unregister(tz->thermal_zone);
|
||||||
tz->thermal_zone = NULL;
|
tz->thermal_zone = NULL;
|
||||||
|
acpi_detach_data(tz->device->handle, acpi_bus_private_data_handler);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -321,6 +321,8 @@ struct acpi_bus_event {
|
|||||||
|
|
||||||
extern struct kobject *acpi_kobj;
|
extern struct kobject *acpi_kobj;
|
||||||
extern int acpi_bus_generate_netlink_event(const char*, const char*, u8, int);
|
extern int acpi_bus_generate_netlink_event(const char*, const char*, u8, int);
|
||||||
|
void acpi_bus_private_data_handler(acpi_handle, u32, void *);
|
||||||
|
int acpi_bus_get_private_data(acpi_handle, void **);
|
||||||
/*
|
/*
|
||||||
* External Functions
|
* External Functions
|
||||||
*/
|
*/
|
||||||
|
Reference in New Issue
Block a user