|
@@ -173,8 +173,7 @@
|
|
/* ======= */
|
|
/* ======= */
|
|
struct compal_data{
|
|
struct compal_data{
|
|
/* Fan control */
|
|
/* Fan control */
|
|
- struct device *hwmon_dev;
|
|
|
|
- int pwm_enable; /* 0:full on, 1:set by pwm1, 2:control by moterboard */
|
|
|
|
|
|
+ int pwm_enable; /* 0:full on, 1:set by pwm1, 2:control by motherboard */
|
|
unsigned char curr_pwm;
|
|
unsigned char curr_pwm;
|
|
|
|
|
|
/* Power supply */
|
|
/* Power supply */
|
|
@@ -402,15 +401,6 @@ SIMPLE_MASKED_STORE_SHOW(wake_up_wlan, WAKE_UP_ADDR, WAKE_UP_WLAN)
|
|
SIMPLE_MASKED_STORE_SHOW(wake_up_key, WAKE_UP_ADDR, WAKE_UP_KEY)
|
|
SIMPLE_MASKED_STORE_SHOW(wake_up_key, WAKE_UP_ADDR, WAKE_UP_KEY)
|
|
SIMPLE_MASKED_STORE_SHOW(wake_up_mouse, WAKE_UP_ADDR, WAKE_UP_MOUSE)
|
|
SIMPLE_MASKED_STORE_SHOW(wake_up_mouse, WAKE_UP_ADDR, WAKE_UP_MOUSE)
|
|
|
|
|
|
-
|
|
|
|
-/* General hwmon interface */
|
|
|
|
-static ssize_t hwmon_name_show(struct device *dev,
|
|
|
|
- struct device_attribute *attr, char *buf)
|
|
|
|
-{
|
|
|
|
- return sprintf(buf, "%s\n", DRIVER_NAME);
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-
|
|
|
|
/* Fan control interface */
|
|
/* Fan control interface */
|
|
static ssize_t pwm_enable_show(struct device *dev,
|
|
static ssize_t pwm_enable_show(struct device *dev,
|
|
struct device_attribute *attr, char *buf)
|
|
struct device_attribute *attr, char *buf)
|
|
@@ -665,55 +655,55 @@ static DEVICE_ATTR(wake_up_key,
|
|
static DEVICE_ATTR(wake_up_mouse,
|
|
static DEVICE_ATTR(wake_up_mouse,
|
|
0644, wake_up_mouse_show, wake_up_mouse_store);
|
|
0644, wake_up_mouse_show, wake_up_mouse_store);
|
|
|
|
|
|
-static SENSOR_DEVICE_ATTR(name, S_IRUGO, hwmon_name_show, NULL, 1);
|
|
|
|
-static SENSOR_DEVICE_ATTR(fan1_input, S_IRUGO, fan_show, NULL, 1);
|
|
|
|
-static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, temp_cpu, NULL, 1);
|
|
|
|
-static SENSOR_DEVICE_ATTR(temp2_input, S_IRUGO, temp_cpu_local, NULL, 1);
|
|
|
|
-static SENSOR_DEVICE_ATTR(temp3_input, S_IRUGO, temp_cpu_DTS, NULL, 1);
|
|
|
|
-static SENSOR_DEVICE_ATTR(temp4_input, S_IRUGO, temp_northbridge, NULL, 1);
|
|
|
|
-static SENSOR_DEVICE_ATTR(temp5_input, S_IRUGO, temp_vga, NULL, 1);
|
|
|
|
-static SENSOR_DEVICE_ATTR(temp6_input, S_IRUGO, temp_SKIN, NULL, 1);
|
|
|
|
-static SENSOR_DEVICE_ATTR(temp1_label, S_IRUGO, label_cpu, NULL, 1);
|
|
|
|
-static SENSOR_DEVICE_ATTR(temp2_label, S_IRUGO, label_cpu_local, NULL, 1);
|
|
|
|
-static SENSOR_DEVICE_ATTR(temp3_label, S_IRUGO, label_cpu_DTS, NULL, 1);
|
|
|
|
-static SENSOR_DEVICE_ATTR(temp4_label, S_IRUGO, label_northbridge, NULL, 1);
|
|
|
|
-static SENSOR_DEVICE_ATTR(temp5_label, S_IRUGO, label_vga, NULL, 1);
|
|
|
|
-static SENSOR_DEVICE_ATTR(temp6_label, S_IRUGO, label_SKIN, NULL, 1);
|
|
|
|
-static SENSOR_DEVICE_ATTR(pwm1, S_IRUGO | S_IWUSR, pwm_show, pwm_store, 1);
|
|
|
|
-static SENSOR_DEVICE_ATTR(pwm1_enable,
|
|
|
|
- S_IRUGO | S_IWUSR, pwm_enable_show, pwm_enable_store, 0);
|
|
|
|
-
|
|
|
|
-static struct attribute *compal_attributes[] = {
|
|
|
|
|
|
+static DEVICE_ATTR(fan1_input, S_IRUGO, fan_show, NULL);
|
|
|
|
+static DEVICE_ATTR(temp1_input, S_IRUGO, temp_cpu, NULL);
|
|
|
|
+static DEVICE_ATTR(temp2_input, S_IRUGO, temp_cpu_local, NULL);
|
|
|
|
+static DEVICE_ATTR(temp3_input, S_IRUGO, temp_cpu_DTS, NULL);
|
|
|
|
+static DEVICE_ATTR(temp4_input, S_IRUGO, temp_northbridge, NULL);
|
|
|
|
+static DEVICE_ATTR(temp5_input, S_IRUGO, temp_vga, NULL);
|
|
|
|
+static DEVICE_ATTR(temp6_input, S_IRUGO, temp_SKIN, NULL);
|
|
|
|
+static DEVICE_ATTR(temp1_label, S_IRUGO, label_cpu, NULL);
|
|
|
|
+static DEVICE_ATTR(temp2_label, S_IRUGO, label_cpu_local, NULL);
|
|
|
|
+static DEVICE_ATTR(temp3_label, S_IRUGO, label_cpu_DTS, NULL);
|
|
|
|
+static DEVICE_ATTR(temp4_label, S_IRUGO, label_northbridge, NULL);
|
|
|
|
+static DEVICE_ATTR(temp5_label, S_IRUGO, label_vga, NULL);
|
|
|
|
+static DEVICE_ATTR(temp6_label, S_IRUGO, label_SKIN, NULL);
|
|
|
|
+static DEVICE_ATTR(pwm1, S_IRUGO | S_IWUSR, pwm_show, pwm_store);
|
|
|
|
+static DEVICE_ATTR(pwm1_enable,
|
|
|
|
+ S_IRUGO | S_IWUSR, pwm_enable_show, pwm_enable_store);
|
|
|
|
+
|
|
|
|
+static struct attribute *compal_platform_attrs[] = {
|
|
&dev_attr_wake_up_pme.attr,
|
|
&dev_attr_wake_up_pme.attr,
|
|
&dev_attr_wake_up_modem.attr,
|
|
&dev_attr_wake_up_modem.attr,
|
|
&dev_attr_wake_up_lan.attr,
|
|
&dev_attr_wake_up_lan.attr,
|
|
&dev_attr_wake_up_wlan.attr,
|
|
&dev_attr_wake_up_wlan.attr,
|
|
&dev_attr_wake_up_key.attr,
|
|
&dev_attr_wake_up_key.attr,
|
|
&dev_attr_wake_up_mouse.attr,
|
|
&dev_attr_wake_up_mouse.attr,
|
|
- /* Maybe put the sensor-stuff in a separate hwmon-driver? That way,
|
|
|
|
- * the hwmon sysfs won't be cluttered with the above files. */
|
|
|
|
- &sensor_dev_attr_name.dev_attr.attr,
|
|
|
|
- &sensor_dev_attr_pwm1_enable.dev_attr.attr,
|
|
|
|
- &sensor_dev_attr_pwm1.dev_attr.attr,
|
|
|
|
- &sensor_dev_attr_fan1_input.dev_attr.attr,
|
|
|
|
- &sensor_dev_attr_temp1_input.dev_attr.attr,
|
|
|
|
- &sensor_dev_attr_temp2_input.dev_attr.attr,
|
|
|
|
- &sensor_dev_attr_temp3_input.dev_attr.attr,
|
|
|
|
- &sensor_dev_attr_temp4_input.dev_attr.attr,
|
|
|
|
- &sensor_dev_attr_temp5_input.dev_attr.attr,
|
|
|
|
- &sensor_dev_attr_temp6_input.dev_attr.attr,
|
|
|
|
- &sensor_dev_attr_temp1_label.dev_attr.attr,
|
|
|
|
- &sensor_dev_attr_temp2_label.dev_attr.attr,
|
|
|
|
- &sensor_dev_attr_temp3_label.dev_attr.attr,
|
|
|
|
- &sensor_dev_attr_temp4_label.dev_attr.attr,
|
|
|
|
- &sensor_dev_attr_temp5_label.dev_attr.attr,
|
|
|
|
- &sensor_dev_attr_temp6_label.dev_attr.attr,
|
|
|
|
NULL
|
|
NULL
|
|
};
|
|
};
|
|
|
|
+static struct attribute_group compal_platform_attr_group = {
|
|
|
|
+ .attrs = compal_platform_attrs
|
|
|
|
+};
|
|
|
|
|
|
-static struct attribute_group compal_attribute_group = {
|
|
|
|
- .attrs = compal_attributes
|
|
|
|
|
|
+static struct attribute *compal_hwmon_attrs[] = {
|
|
|
|
+ &dev_attr_pwm1_enable.attr,
|
|
|
|
+ &dev_attr_pwm1.attr,
|
|
|
|
+ &dev_attr_fan1_input.attr,
|
|
|
|
+ &dev_attr_temp1_input.attr,
|
|
|
|
+ &dev_attr_temp2_input.attr,
|
|
|
|
+ &dev_attr_temp3_input.attr,
|
|
|
|
+ &dev_attr_temp4_input.attr,
|
|
|
|
+ &dev_attr_temp5_input.attr,
|
|
|
|
+ &dev_attr_temp6_input.attr,
|
|
|
|
+ &dev_attr_temp1_label.attr,
|
|
|
|
+ &dev_attr_temp2_label.attr,
|
|
|
|
+ &dev_attr_temp3_label.attr,
|
|
|
|
+ &dev_attr_temp4_label.attr,
|
|
|
|
+ &dev_attr_temp5_label.attr,
|
|
|
|
+ &dev_attr_temp6_label.attr,
|
|
|
|
+ NULL
|
|
};
|
|
};
|
|
|
|
+ATTRIBUTE_GROUPS(compal_hwmon);
|
|
|
|
|
|
static int compal_probe(struct platform_device *);
|
|
static int compal_probe(struct platform_device *);
|
|
static int compal_remove(struct platform_device *);
|
|
static int compal_remove(struct platform_device *);
|
|
@@ -1021,30 +1011,28 @@ static int compal_probe(struct platform_device *pdev)
|
|
{
|
|
{
|
|
int err;
|
|
int err;
|
|
struct compal_data *data;
|
|
struct compal_data *data;
|
|
|
|
+ struct device *hwmon_dev;
|
|
|
|
|
|
if (!extra_features)
|
|
if (!extra_features)
|
|
return 0;
|
|
return 0;
|
|
|
|
|
|
/* Fan control */
|
|
/* Fan control */
|
|
- data = kzalloc(sizeof(struct compal_data), GFP_KERNEL);
|
|
|
|
|
|
+ data = devm_kzalloc(&pdev->dev, sizeof(struct compal_data), GFP_KERNEL);
|
|
if (!data)
|
|
if (!data)
|
|
return -ENOMEM;
|
|
return -ENOMEM;
|
|
|
|
|
|
initialize_fan_control_data(data);
|
|
initialize_fan_control_data(data);
|
|
|
|
|
|
- err = sysfs_create_group(&pdev->dev.kobj, &compal_attribute_group);
|
|
|
|
- if (err) {
|
|
|
|
- kfree(data);
|
|
|
|
|
|
+ err = sysfs_create_group(&pdev->dev.kobj, &compal_platform_attr_group);
|
|
|
|
+ if (err)
|
|
return err;
|
|
return err;
|
|
- }
|
|
|
|
|
|
|
|
- data->hwmon_dev = hwmon_device_register(&pdev->dev);
|
|
|
|
- if (IS_ERR(data->hwmon_dev)) {
|
|
|
|
- err = PTR_ERR(data->hwmon_dev);
|
|
|
|
- sysfs_remove_group(&pdev->dev.kobj,
|
|
|
|
- &compal_attribute_group);
|
|
|
|
- kfree(data);
|
|
|
|
- return err;
|
|
|
|
|
|
+ hwmon_dev = hwmon_device_register_with_groups(&pdev->dev,
|
|
|
|
+ DRIVER_NAME, data,
|
|
|
|
+ compal_hwmon_groups);
|
|
|
|
+ if (IS_ERR(hwmon_dev)) {
|
|
|
|
+ err = PTR_ERR(hwmon_dev);
|
|
|
|
+ goto remove;
|
|
}
|
|
}
|
|
|
|
|
|
/* Power supply */
|
|
/* Power supply */
|
|
@@ -1054,6 +1042,10 @@ static int compal_probe(struct platform_device *pdev)
|
|
platform_set_drvdata(pdev, data);
|
|
platform_set_drvdata(pdev, data);
|
|
|
|
|
|
return 0;
|
|
return 0;
|
|
|
|
+
|
|
|
|
+remove:
|
|
|
|
+ sysfs_remove_group(&pdev->dev.kobj, &compal_platform_attr_group);
|
|
|
|
+ return err;
|
|
}
|
|
}
|
|
|
|
|
|
static void __exit compal_cleanup(void)
|
|
static void __exit compal_cleanup(void)
|
|
@@ -1080,12 +1072,9 @@ static int compal_remove(struct platform_device *pdev)
|
|
pwm_disable_control();
|
|
pwm_disable_control();
|
|
|
|
|
|
data = platform_get_drvdata(pdev);
|
|
data = platform_get_drvdata(pdev);
|
|
- hwmon_device_unregister(data->hwmon_dev);
|
|
|
|
power_supply_unregister(&data->psy);
|
|
power_supply_unregister(&data->psy);
|
|
|
|
|
|
- kfree(data);
|
|
|
|
-
|
|
|
|
- sysfs_remove_group(&pdev->dev.kobj, &compal_attribute_group);
|
|
|
|
|
|
+ sysfs_remove_group(&pdev->dev.kobj, &compal_platform_attr_group);
|
|
|
|
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|