diff options
Diffstat (limited to 'drivers/platform/x86/compal-laptop.c')
| -rw-r--r-- | drivers/platform/x86/compal-laptop.c | 121 | 
1 files changed, 55 insertions, 66 deletions
diff --git a/drivers/platform/x86/compal-laptop.c b/drivers/platform/x86/compal-laptop.c index eaa78edb1f4..7297df2ebf5 100644 --- a/drivers/platform/x86/compal-laptop.c +++ b/drivers/platform/x86/compal-laptop.c @@ -173,8 +173,7 @@  /* ======= */  struct compal_data{  	/* 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;  	/* 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_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 */  static ssize_t pwm_enable_show(struct device *dev,  		struct device_attribute *attr, char *buf) @@ -665,55 +655,55 @@ static DEVICE_ATTR(wake_up_key,  static DEVICE_ATTR(wake_up_mouse,  		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_modem.attr,  	&dev_attr_wake_up_lan.attr,  	&dev_attr_wake_up_wlan.attr,  	&dev_attr_wake_up_key.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  }; +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_remove(struct platform_device *); @@ -1021,30 +1011,28 @@ static int compal_probe(struct platform_device *pdev)  {  	int err;  	struct compal_data *data; +	struct device *hwmon_dev;  	if (!extra_features)  		return 0;  	/* Fan control */ -	data = kzalloc(sizeof(struct compal_data), GFP_KERNEL); +	data = devm_kzalloc(&pdev->dev, sizeof(struct compal_data), GFP_KERNEL);  	if (!data)  		return -ENOMEM;  	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; -	} -	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 */ @@ -1054,6 +1042,10 @@ static int compal_probe(struct platform_device *pdev)  	platform_set_drvdata(pdev, data);  	return 0; + +remove: +	sysfs_remove_group(&pdev->dev.kobj, &compal_platform_attr_group); +	return err;  }  static void __exit compal_cleanup(void) @@ -1080,12 +1072,9 @@ static int compal_remove(struct platform_device *pdev)  	pwm_disable_control();  	data = platform_get_drvdata(pdev); -	hwmon_device_unregister(data->hwmon_dev);  	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;  }  | 
