struct trt *trts;
        u8 uuid_bitmap;
        int rel_misc_dev_res;
+       int current_uuid_index;
+};
+
+static ssize_t available_uuids_show(struct device *dev,
+                                   struct device_attribute *attr,
+                                   char *buf)
+{
+       struct platform_device *pdev = to_platform_device(dev);
+       struct int3400_thermal_priv *priv = platform_get_drvdata(pdev);
+       int i;
+       int length = 0;
+
+       for (i = 0; i < INT3400_THERMAL_MAXIMUM_UUID; i++) {
+               if (priv->uuid_bitmap & (1 << i))
+                       if (PAGE_SIZE - length > 0)
+                               length += snprintf(&buf[length],
+                                                  PAGE_SIZE - length,
+                                                  "%s\n",
+                                                  int3400_thermal_uuids[i]);
+       }
+
+       return length;
+}
+
+static ssize_t current_uuid_show(struct device *dev,
+                                struct device_attribute *devattr, char *buf)
+{
+       struct platform_device *pdev = to_platform_device(dev);
+       struct int3400_thermal_priv *priv = platform_get_drvdata(pdev);
+
+       if (priv->uuid_bitmap & (1 << priv->current_uuid_index))
+               return sprintf(buf, "%s\n",
+                              int3400_thermal_uuids[priv->current_uuid_index]);
+       else
+               return sprintf(buf, "INVALID\n");
+}
+
+static ssize_t current_uuid_store(struct device *dev,
+                                 struct device_attribute *attr,
+                                 const char *buf, size_t count)
+{
+       struct platform_device *pdev = to_platform_device(dev);
+       struct int3400_thermal_priv *priv = platform_get_drvdata(pdev);
+       int i;
+
+       for (i = 0; i < INT3400_THERMAL_MAXIMUM_UUID; ++i) {
+               if ((priv->uuid_bitmap & (1 << i)) &&
+                   !(strncmp(buf, int3400_thermal_uuids[i],
+                             sizeof(int3400_thermal_uuids[i]) - 1))) {
+                       priv->current_uuid_index = i;
+                       return count;
+               }
+       }
+
+       return -EINVAL;
+}
+
+static DEVICE_ATTR(current_uuid, 0644, current_uuid_show, current_uuid_store);
+static DEVICE_ATTR_RO(available_uuids);
+static struct attribute *uuid_attrs[] = {
+       &dev_attr_available_uuids.attr,
+       &dev_attr_current_uuid.attr,
+       NULL
+};
+
+static struct attribute_group uuid_attribute_group = {
+       .attrs = uuid_attrs,
+       .name = "uuids"
 };
 
 static int int3400_thermal_get_uuids(struct int3400_thermal_priv *priv)
 
        if (enable != priv->mode) {
                priv->mode = enable;
-               /* currently, only PASSIVE COOLING is supported */
                result = int3400_thermal_run_osc(priv->adev->handle,
-                                       INT3400_THERMAL_PASSIVE_1, enable);
+                                                priv->current_uuid_index,
+                                                enable);
        }
        return result;
 }
        priv->rel_misc_dev_res = acpi_thermal_rel_misc_device_add(
                                                        priv->adev->handle);
 
+       result = sysfs_create_group(&pdev->dev.kobj, &uuid_attribute_group);
+       if (result)
+               goto free_zone;
+
        return 0;
+
+free_zone:
+       thermal_zone_device_unregister(priv->thermal);
 free_trt:
        kfree(priv->trts);
 free_art:
        if (!priv->rel_misc_dev_res)
                acpi_thermal_rel_misc_device_remove(priv->adev->handle);
 
+       sysfs_remove_group(&pdev->dev.kobj, &uuid_attribute_group);
        thermal_zone_device_unregister(priv->thermal);
        kfree(priv->trts);
        kfree(priv->arts);