static int acpi_thermal_register_thermal_zone(struct acpi_thermal *tz)
 {
+       struct device *tzdev;
        int trips = 0;
        int result;
        acpi_status status;
        if (IS_ERR(tz->thermal_zone))
                return -ENODEV;
 
+       tzdev = thermal_zone_device(tz->thermal_zone);
+
        result = sysfs_create_link(&tz->device->dev.kobj,
-                                  &tz->thermal_zone->device.kobj, "thermal_zone");
+                                  &tzdev->kobj, "thermal_zone");
        if (result)
                goto unregister_tzd;
 
-       result = sysfs_create_link(&tz->thermal_zone->device.kobj,
+       result = sysfs_create_link(&tzdev->kobj,
                                   &tz->device->dev.kobj, "device");
        if (result)
                goto remove_tz_link;
 acpi_bus_detach:
        acpi_bus_detach_private_data(tz->device->handle);
 remove_dev_link:
-       sysfs_remove_link(&tz->thermal_zone->device.kobj, "device");
+       sysfs_remove_link(&tzdev->kobj, "device");
 remove_tz_link:
        sysfs_remove_link(&tz->device->dev.kobj, "thermal_zone");
 unregister_tzd:
 
 static void acpi_thermal_unregister_thermal_zone(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(&tz->thermal_zone->device.kobj, "device");
+       sysfs_remove_link(&tzdev->kobj, "device");
        thermal_zone_device_unregister(tz->thermal_zone);
        tz->thermal_zone = NULL;
        acpi_bus_detach_private_data(tz->device->handle);