Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6
[linux-2.6-block.git] / drivers / misc / intel_menlow.c
index 80a1363524087a1e66e575058360d071bbca352f..27b7662955bb1659e60415e5b498d7f86af07179 100644 (file)
@@ -52,12 +52,17 @@ MODULE_LICENSE("GPL");
 #define MEMORY_ARG_CUR_BANDWIDTH 1
 #define MEMORY_ARG_MAX_BANDWIDTH 0
 
+/*
+ * GTHS returning 'n' would mean that [0,n-1] states are supported
+ * In that case max_cstate would be n-1
+ * GTHS returning '0' would mean that no bandwidth control states are supported
+ */
 static int memory_get_int_max_bandwidth(struct thermal_cooling_device *cdev,
                                        unsigned long *max_state)
 {
        struct acpi_device *device = cdev->devdata;
        acpi_handle handle = device->handle;
-       unsigned long value;
+       unsigned long long value;
        struct acpi_object_list arg_list;
        union acpi_object arg;
        acpi_status status = AE_OK;
@@ -71,6 +76,9 @@ static int memory_get_int_max_bandwidth(struct thermal_cooling_device *cdev,
        if (ACPI_FAILURE(status))
                return -EFAULT;
 
+       if (!value)
+               return -EINVAL;
+
        *max_state = value - 1;
        return 0;
 }
@@ -90,7 +98,7 @@ static int memory_get_cur_bandwidth(struct thermal_cooling_device *cdev,
 {
        struct acpi_device *device = cdev->devdata;
        acpi_handle handle = device->handle;
-       unsigned long value;
+       unsigned long long value;
        struct acpi_object_list arg_list;
        union acpi_object arg;
        acpi_status status = AE_OK;
@@ -104,7 +112,7 @@ static int memory_get_cur_bandwidth(struct thermal_cooling_device *cdev,
        if (ACPI_FAILURE(status))
                return -EFAULT;
 
-       return sprintf(buf, "%ld\n", value);
+       return sprintf(buf, "%llu\n", value);
 }
 
 static int memory_set_cur_bandwidth(struct thermal_cooling_device *cdev,
@@ -115,13 +123,13 @@ static int memory_set_cur_bandwidth(struct thermal_cooling_device *cdev,
        struct acpi_object_list arg_list;
        union acpi_object arg;
        acpi_status status;
-       int temp;
+       unsigned long long temp;
        unsigned long max_state;
 
        if (memory_get_int_max_bandwidth(cdev, &max_state))
                return -EFAULT;
 
-       if (max_state < 0 || state > max_state)
+       if (state > max_state)
                return -EINVAL;
 
        arg_list.count = 1;
@@ -131,7 +139,7 @@ static int memory_set_cur_bandwidth(struct thermal_cooling_device *cdev,
 
        status =
            acpi_evaluate_integer(handle, MEMORY_SET_BANDWIDTH, &arg_list,
-                                 (unsigned long *)&temp);
+                                 &temp);
 
        printk(KERN_INFO
               "Bandwidth value was %d: status is %d\n", state, status);
@@ -175,7 +183,7 @@ static int intel_menlow_memory_add(struct acpi_device *device)
                goto end;
        }
 
-       acpi_driver_data(device) = cdev;
+       device->driver_data = cdev;
        result = sysfs_create_link(&device->dev.kobj,
                                &cdev->device.kobj, "thermal_cooling");
        if (result)
@@ -252,7 +260,8 @@ static DEFINE_MUTEX(intel_menlow_attr_lock);
  * @auxtype : AUX0/AUX1
  * @buf: syfs buffer
  */
-static int sensor_get_auxtrip(acpi_handle handle, int index, int *value)
+static int sensor_get_auxtrip(acpi_handle handle, int index,
+                                                       unsigned long long *value)
 {
        acpi_status status;
 
@@ -260,7 +269,7 @@ static int sensor_get_auxtrip(acpi_handle handle, int index, int *value)
                return -EINVAL;
 
        status = acpi_evaluate_integer(handle, index ? GET_AUX1 : GET_AUX0,
-                                      NULL, (unsigned long *)value);
+                                      NULL, value);
        if (ACPI_FAILURE(status))
                return -EIO;
 
@@ -282,13 +291,13 @@ static int sensor_set_auxtrip(acpi_handle handle, int index, int value)
        struct acpi_object_list args = {
                1, &arg
        };
-       int temp;
+       unsigned long long temp;
 
        if (index != 0 && index != 1)
                return -EINVAL;
 
        status = acpi_evaluate_integer(handle, index ? GET_AUX0 : GET_AUX1,
-                                      NULL, (unsigned long *)&temp);
+                                      NULL, &temp);
        if (ACPI_FAILURE(status))
                return -EIO;
        if ((index && value < temp) || (!index && value > temp))
@@ -296,7 +305,7 @@ static int sensor_set_auxtrip(acpi_handle handle, int index, int value)
 
        arg.integer.value = value;
        status = acpi_evaluate_integer(handle, index ? SET_AUX1 : SET_AUX0,
-                                      &args, (unsigned long *)&temp);
+                                      &args, &temp);
        if (ACPI_FAILURE(status))
                return -EIO;
 
@@ -312,7 +321,7 @@ static ssize_t aux0_show(struct device *dev,
                         struct device_attribute *dev_attr, char *buf)
 {
        struct intel_menlow_attribute *attr = to_intel_menlow_attr(dev_attr);
-       int value;
+       unsigned long long value;
        int result;
 
        result = sensor_get_auxtrip(attr->handle, 0, &value);
@@ -324,7 +333,7 @@ static ssize_t aux1_show(struct device *dev,
                         struct device_attribute *dev_attr, char *buf)
 {
        struct intel_menlow_attribute *attr = to_intel_menlow_attr(dev_attr);
-       int value;
+       unsigned long long value;
        int result;
 
        result = sensor_get_auxtrip(attr->handle, 1, &value);
@@ -376,7 +385,7 @@ static ssize_t bios_enabled_show(struct device *dev,
                                 struct device_attribute *attr, char *buf)
 {
        acpi_status status;
-       unsigned long bios_enabled;
+       unsigned long long bios_enabled;
 
        status = acpi_evaluate_integer(NULL, BIOS_ENABLED, NULL, &bios_enabled);
        if (ACPI_FAILURE(status))
@@ -492,7 +501,7 @@ static int __init intel_menlow_module_init(void)
 {
        int result = -ENODEV;
        acpi_status status;
-       unsigned long enable;
+       unsigned long long enable;
 
        if (acpi_disabled)
                return result;