Commit a4b81715 authored by Daniel Lezcano's avatar Daniel Lezcano Committed by Rafael J. Wysocki

ACPI: thermal: Move to dedicated function sysfs extra attr creation

The ACPI thermal driver creates extra sysfs attributes in its own
directory pointing to the thermal zone it is related to and add a
pointer to the sysfs ACPI thermal device from the thermal zone sysfs
entry.

This is very specific to this ACPI thermal driver, let's encapsulate
the related creation/deletion code to group it inside a function we
can identify later for removal if needed.
Signed-off-by: default avatarDaniel Lezcano <daniel.lezcano@linaro.org>
[ rjw: Subject adjustment, removal of trailing white space ]
Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
parent 66d39e74
...@@ -787,9 +787,34 @@ static struct thermal_zone_device_ops acpi_thermal_zone_ops = { ...@@ -787,9 +787,34 @@ static struct thermal_zone_device_ops acpi_thermal_zone_ops = {
.critical = acpi_thermal_zone_device_critical, .critical = acpi_thermal_zone_device_critical,
}; };
static int acpi_thermal_zone_sysfs_add(struct acpi_thermal *tz)
{
struct device *tzdev = thermal_zone_device(tz->thermal_zone);
int ret;
ret = sysfs_create_link(&tz->device->dev.kobj,
&tzdev->kobj, "thermal_zone");
if (ret)
return ret;
ret = sysfs_create_link(&tzdev->kobj,
&tz->device->dev.kobj, "device");
if (ret)
sysfs_remove_link(&tz->device->dev.kobj, "thermal_zone");
return ret;
}
static void acpi_thermal_zone_sysfs_remove(struct acpi_thermal *tz)
{
struct device *tzdev = thermal_zone_device(tz->thermal_zone);
sysfs_remove_link(&tz->device->dev.kobj, "thermal_zone");
sysfs_remove_link(&tzdev->kobj, "device");
}
static int acpi_thermal_register_thermal_zone(struct acpi_thermal *tz) static int acpi_thermal_register_thermal_zone(struct acpi_thermal *tz)
{ {
struct device *tzdev;
int trips = 0; int trips = 0;
int result; int result;
acpi_status status; acpi_status status;
...@@ -821,23 +846,15 @@ static int acpi_thermal_register_thermal_zone(struct acpi_thermal *tz) ...@@ -821,23 +846,15 @@ static int acpi_thermal_register_thermal_zone(struct acpi_thermal *tz)
if (IS_ERR(tz->thermal_zone)) if (IS_ERR(tz->thermal_zone))
return -ENODEV; return -ENODEV;
tzdev = thermal_zone_device(tz->thermal_zone); result = acpi_thermal_zone_sysfs_add(tz);
result = sysfs_create_link(&tz->device->dev.kobj,
&tzdev->kobj, "thermal_zone");
if (result) if (result)
goto unregister_tzd; goto unregister_tzd;
result = sysfs_create_link(&tzdev->kobj,
&tz->device->dev.kobj, "device");
if (result)
goto remove_tz_link;
status = acpi_bus_attach_private_data(tz->device->handle, status = acpi_bus_attach_private_data(tz->device->handle,
tz->thermal_zone); tz->thermal_zone);
if (ACPI_FAILURE(status)) { if (ACPI_FAILURE(status)) {
result = -ENODEV; result = -ENODEV;
goto remove_dev_link; goto remove_links;
} }
result = thermal_zone_device_enable(tz->thermal_zone); result = thermal_zone_device_enable(tz->thermal_zone);
...@@ -851,10 +868,8 @@ static int acpi_thermal_register_thermal_zone(struct acpi_thermal *tz) ...@@ -851,10 +868,8 @@ static int acpi_thermal_register_thermal_zone(struct acpi_thermal *tz)
acpi_bus_detach: acpi_bus_detach:
acpi_bus_detach_private_data(tz->device->handle); acpi_bus_detach_private_data(tz->device->handle);
remove_dev_link: remove_links:
sysfs_remove_link(&tzdev->kobj, "device"); acpi_thermal_zone_sysfs_remove(tz);
remove_tz_link:
sysfs_remove_link(&tz->device->dev.kobj, "thermal_zone");
unregister_tzd: unregister_tzd:
thermal_zone_device_unregister(tz->thermal_zone); thermal_zone_device_unregister(tz->thermal_zone);
...@@ -863,10 +878,7 @@ static int acpi_thermal_register_thermal_zone(struct acpi_thermal *tz) ...@@ -863,10 +878,7 @@ static int acpi_thermal_register_thermal_zone(struct acpi_thermal *tz)
static void acpi_thermal_unregister_thermal_zone(struct acpi_thermal *tz) static void acpi_thermal_unregister_thermal_zone(struct acpi_thermal *tz)
{ {
struct device *tzdev = thermal_zone_device(tz->thermal_zone); acpi_thermal_zone_sysfs_remove(tz);
sysfs_remove_link(&tz->device->dev.kobj, "thermal_zone");
sysfs_remove_link(&tzdev->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_bus_detach_private_data(tz->device->handle); acpi_bus_detach_private_data(tz->device->handle);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment