diff options
Diffstat (limited to 'drivers/hwmon')
| -rw-r--r-- | drivers/hwmon/Kconfig | 4 | ||||
| -rw-r--r-- | drivers/hwmon/ad7414.c | 1 | ||||
| -rw-r--r-- | drivers/hwmon/ad7418.c | 1 | ||||
| -rw-r--r-- | drivers/hwmon/adcxx.c | 1 | ||||
| -rw-r--r-- | drivers/hwmon/adt7411.c | 1 | ||||
| -rw-r--r-- | drivers/hwmon/adt7462.c | 1 | ||||
| -rw-r--r-- | drivers/hwmon/adt7470.c | 1 | ||||
| -rw-r--r-- | drivers/hwmon/applesmc.c | 79 | ||||
| -rw-r--r-- | drivers/hwmon/asc7621.c | 63 | ||||
| -rw-r--r-- | drivers/hwmon/asus_atk0110.c | 5 | ||||
| -rw-r--r-- | drivers/hwmon/atxp1.c | 1 | ||||
| -rw-r--r-- | drivers/hwmon/coretemp.c | 4 | ||||
| -rw-r--r-- | drivers/hwmon/f75375s.c | 1 | ||||
| -rw-r--r-- | drivers/hwmon/hp_accel.c | 6 | ||||
| -rw-r--r-- | drivers/hwmon/i5k_amb.c | 1 | ||||
| -rw-r--r-- | drivers/hwmon/ibmaem.c | 1 | ||||
| -rw-r--r-- | drivers/hwmon/ibmpex.c | 1 | ||||
| -rw-r--r-- | drivers/hwmon/it87.c | 32 | ||||
| -rw-r--r-- | drivers/hwmon/lm70.c | 1 | ||||
| -rw-r--r-- | drivers/hwmon/lm73.c | 1 | ||||
| -rw-r--r-- | drivers/hwmon/max1111.c | 1 | ||||
| -rw-r--r-- | drivers/hwmon/mc13783-adc.c | 1 | ||||
| -rw-r--r-- | drivers/hwmon/sht15.c | 14 | ||||
| -rw-r--r-- | drivers/hwmon/w83793.c | 2 | ||||
| -rw-r--r-- | drivers/hwmon/wm831x-hwmon.c | 1 | 
25 files changed, 129 insertions, 96 deletions
diff --git a/drivers/hwmon/Kconfig b/drivers/hwmon/Kconfig index e4595e6147b..9be8e1754a0 100644 --- a/drivers/hwmon/Kconfig +++ b/drivers/hwmon/Kconfig @@ -217,8 +217,8 @@ config SENSORS_ASC7621  	depends on HWMON && I2C  	help  	  If you say yes here you get support for the aSC7621 -	  family of SMBus sensors chip found on most Intel X48, X38, 975, -	  965 and 945 desktop boards.  Currently supported chips: +	  family of SMBus sensors chip found on most Intel X38, X48, X58, +	  945, 965 and 975 desktop boards.  Currently supported chips:  	  aSC7621  	  aSC7621a diff --git a/drivers/hwmon/ad7414.c b/drivers/hwmon/ad7414.c index bfda8c80ef2..1e4c21fc1a8 100644 --- a/drivers/hwmon/ad7414.c +++ b/drivers/hwmon/ad7414.c @@ -27,6 +27,7 @@  #include <linux/err.h>  #include <linux/mutex.h>  #include <linux/sysfs.h> +#include <linux/slab.h>  /* AD7414 registers */ diff --git a/drivers/hwmon/ad7418.c b/drivers/hwmon/ad7418.c index f97b5b35687..ffc781fec18 100644 --- a/drivers/hwmon/ad7418.c +++ b/drivers/hwmon/ad7418.c @@ -20,6 +20,7 @@  #include <linux/err.h>  #include <linux/mutex.h>  #include <linux/delay.h> +#include <linux/slab.h>  #include "lm75.h" diff --git a/drivers/hwmon/adcxx.c b/drivers/hwmon/adcxx.c index 74d9c5195e4..fbdc7655303 100644 --- a/drivers/hwmon/adcxx.c +++ b/drivers/hwmon/adcxx.c @@ -37,6 +37,7 @@  #include <linux/init.h>  #include <linux/module.h>  #include <linux/kernel.h> +#include <linux/slab.h>  #include <linux/device.h>  #include <linux/err.h>  #include <linux/sysfs.h> diff --git a/drivers/hwmon/adt7411.c b/drivers/hwmon/adt7411.c index 3471884e42d..4086c7257f9 100644 --- a/drivers/hwmon/adt7411.c +++ b/drivers/hwmon/adt7411.c @@ -21,6 +21,7 @@  #include <linux/i2c.h>  #include <linux/hwmon.h>  #include <linux/hwmon-sysfs.h> +#include <linux/slab.h>  #define ADT7411_REG_INT_TEMP_VDD_LSB		0x03  #define ADT7411_REG_EXT_TEMP_AIN14_LSB		0x04 diff --git a/drivers/hwmon/adt7462.c b/drivers/hwmon/adt7462.c index b8156b4893b..2af0c7b6b4e 100644 --- a/drivers/hwmon/adt7462.c +++ b/drivers/hwmon/adt7462.c @@ -28,6 +28,7 @@  #include <linux/mutex.h>  #include <linux/delay.h>  #include <linux/log2.h> +#include <linux/slab.h>  /* Addresses to scan */  static const unsigned short normal_i2c[] = { 0x58, 0x5C, I2C_CLIENT_END }; diff --git a/drivers/hwmon/adt7470.c b/drivers/hwmon/adt7470.c index 3445ce1cba8..9e775717abb 100644 --- a/drivers/hwmon/adt7470.c +++ b/drivers/hwmon/adt7470.c @@ -29,6 +29,7 @@  #include <linux/delay.h>  #include <linux/log2.h>  #include <linux/kthread.h> +#include <linux/slab.h>  /* Addresses to scan */  static const unsigned short normal_i2c[] = { 0x2C, 0x2E, 0x2F, I2C_CLIENT_END }; diff --git a/drivers/hwmon/applesmc.c b/drivers/hwmon/applesmc.c index c1605b528e8..f085c18d290 100644 --- a/drivers/hwmon/applesmc.c +++ b/drivers/hwmon/applesmc.c @@ -142,6 +142,12 @@ static const char *temperature_sensors_sets[][41] = {  	  "TM1S", "TM2P", "TM2S", "TM3S", "TM8P", "TM8S", "TM9P", "TM9S",  	  "TN0C", "TN0D", "TN0H", "TS0C", "Tp0C", "Tp1C", "Tv0S", "Tv1S",  	  NULL }, +/* Set 17: iMac 9,1 */ +	{ "TA0P", "TC0D", "TC0H", "TC0P", "TG0D", "TG0H", "TH0P", "TL0P", +	  "TN0D", "TN0H", "TN0P", "TO0P", "Tm0P", "Tp0P", NULL }, +/* Set 18: MacBook Pro 2,2 */ +	{ "TB0T", "TC0D", "TC0P", "TG0H", "TG0P", "TG0T", "TM0P", "TTF0", +	  "Th0H", "Th1H", "Tm0P", "Ts0P", NULL },  };  /* List of keys used to read/write fan speeds */ @@ -189,6 +195,9 @@ static unsigned int applesmc_accelerometer;  /* Indicates whether this computer has light sensors and keyboard backlight. */  static unsigned int applesmc_light; +/* The number of fans handled by the driver */ +static unsigned int fans_handled; +  /* Indicates which temperature sensors set to use. */  static unsigned int applesmc_temperature_set; @@ -1350,6 +1359,10 @@ static __initdata struct dmi_match_data applesmc_dmi_data[] = {  	{ .accelerometer = 1, .light = 1, .temperature_set = 15 },  /* MacPro3,1: temperature set 16 */  	{ .accelerometer = 0, .light = 0, .temperature_set = 16 }, +/* iMac 9,1: light sensor only, temperature set 17 */ +	{ .accelerometer = 0, .light = 0, .temperature_set = 17 }, +/* MacBook Pro 2,2: accelerometer, backlight and temperature set 18 */ +	{ .accelerometer = 1, .light = 1, .temperature_set = 18 },  };  /* Note that DMI_MATCH(...,"MacBook") will match "MacBookPro1,1". @@ -1375,6 +1388,10 @@ static __initdata struct dmi_system_id applesmc_whitelist[] = {  	  DMI_MATCH(DMI_BOARD_VENDOR, "Apple"),  	  DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro3") },  		&applesmc_dmi_data[9]}, +	{ applesmc_dmi_match, "Apple MacBook Pro 2,2", { +	  DMI_MATCH(DMI_BOARD_VENDOR, "Apple Computer, Inc."), +	  DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro2,2") }, +		&applesmc_dmi_data[18]},  	{ applesmc_dmi_match, "Apple MacBook Pro", {  	  DMI_MATCH(DMI_BOARD_VENDOR,"Apple"),  	  DMI_MATCH(DMI_PRODUCT_NAME,"MacBookPro") }, @@ -1415,6 +1432,10 @@ static __initdata struct dmi_system_id applesmc_whitelist[] = {  	  DMI_MATCH(DMI_BOARD_VENDOR, "Apple"),  	  DMI_MATCH(DMI_PRODUCT_NAME, "MacPro") },  		&applesmc_dmi_data[4]}, +	{ applesmc_dmi_match, "Apple iMac 9,1", { +	  DMI_MATCH(DMI_BOARD_VENDOR, "Apple Inc."), +	  DMI_MATCH(DMI_PRODUCT_NAME, "iMac9,1") }, +		&applesmc_dmi_data[17]},  	{ applesmc_dmi_match, "Apple iMac 8", {  	  DMI_MATCH(DMI_BOARD_VENDOR, "Apple"),  	  DMI_MATCH(DMI_PRODUCT_NAME, "iMac8") }, @@ -1474,39 +1495,24 @@ static int __init applesmc_init(void)  	/* create fan files */  	count = applesmc_get_fan_count(); -	if (count < 0) { +	if (count < 0)  		printk(KERN_ERR "applesmc: Cannot get the number of fans.\n"); -	} else { +	else  		printk(KERN_INFO "applesmc: %d fans found.\n", count); -		switch (count) { -		default: -			printk(KERN_WARNING "applesmc: More than 4 fans found," -					" but at most 4 fans are supported" -						" by the driver.\n"); -		case 4: -			ret = sysfs_create_group(&pdev->dev.kobj, -						 &fan_attribute_groups[3]); -			if (ret) -				goto out_key_enumeration; -		case 3: -			ret = sysfs_create_group(&pdev->dev.kobj, -						 &fan_attribute_groups[2]); -			if (ret) -				goto out_key_enumeration; -		case 2: -			ret = sysfs_create_group(&pdev->dev.kobj, -						 &fan_attribute_groups[1]); -			if (ret) -				goto out_key_enumeration; -		case 1: -			ret = sysfs_create_group(&pdev->dev.kobj, -						 &fan_attribute_groups[0]); -			if (ret) -				goto out_fan_1; -		case 0: -			; -		} +	if (count > 4) { +		count = 4; +		printk(KERN_WARNING "applesmc: More than 4 fans found," +		       " but at most 4 fans are supported" +		       " by the driver.\n"); +	} + +	while (fans_handled < count) { +		ret = sysfs_create_group(&pdev->dev.kobj, +					 &fan_attribute_groups[fans_handled]); +		if (ret) +			goto out_fans; +		fans_handled++;  	}  	for (i = 0; @@ -1575,10 +1581,10 @@ out_accelerometer:  		applesmc_release_accelerometer();  out_temperature:  	sysfs_remove_group(&pdev->dev.kobj, &temperature_attributes_group); -	sysfs_remove_group(&pdev->dev.kobj, &fan_attribute_groups[0]); -out_fan_1: -	sysfs_remove_group(&pdev->dev.kobj, &fan_attribute_groups[1]); -out_key_enumeration: +out_fans: +	while (fans_handled) +		sysfs_remove_group(&pdev->dev.kobj, +				   &fan_attribute_groups[--fans_handled]);  	sysfs_remove_group(&pdev->dev.kobj, &key_enumeration_group);  out_name:  	sysfs_remove_file(&pdev->dev.kobj, &dev_attr_name.attr); @@ -1604,8 +1610,9 @@ static void __exit applesmc_exit(void)  	if (applesmc_accelerometer)  		applesmc_release_accelerometer();  	sysfs_remove_group(&pdev->dev.kobj, &temperature_attributes_group); -	sysfs_remove_group(&pdev->dev.kobj, &fan_attribute_groups[0]); -	sysfs_remove_group(&pdev->dev.kobj, &fan_attribute_groups[1]); +	while (fans_handled) +		sysfs_remove_group(&pdev->dev.kobj, +				   &fan_attribute_groups[--fans_handled]);  	sysfs_remove_group(&pdev->dev.kobj, &key_enumeration_group);  	sysfs_remove_file(&pdev->dev.kobj, &dev_attr_name.attr);  	platform_device_unregister(pdev); diff --git a/drivers/hwmon/asc7621.c b/drivers/hwmon/asc7621.c index 7f948105d8a..0f388adc618 100644 --- a/drivers/hwmon/asc7621.c +++ b/drivers/hwmon/asc7621.c @@ -268,8 +268,11 @@ static ssize_t store_fan16(struct device *dev,  	if (strict_strtol(buf, 10, &reqval))  		return -EINVAL; +	/* If a minimum RPM of zero is requested, then we set the register to +	   0xffff. This value allows the fan to be stopped completely without +	   generating an alarm. */  	reqval = -	    (SENSORS_LIMIT((reqval) <= 0 ? 0 : 5400000 / (reqval), 0, 65534)); +	    (reqval <= 0 ? 0xffff : SENSORS_LIMIT(5400000 / reqval, 0, 0xfffe));  	mutex_lock(&data->update_lock);  	data->reg[param->msb[0]] = (reqval >> 8) & 0xff; @@ -285,8 +288,9 @@ static ssize_t store_fan16(struct device *dev,   * Voltages are scaled in the device so that the nominal voltage   * is 3/4ths of the 0-255 range (i.e. 192).   * If all voltages are 'normal' then all voltage registers will - * read 0xC0.  This doesn't help us if we don't have a point of refernce. - * The data sheet however provides us with the full scale value for each + * read 0xC0. + * + * The data sheet provides us with the 3/4 scale value for each voltage   * which is stored in in_scaling.  The sda->index parameter value provides   * the index into in_scaling.   * @@ -295,7 +299,7 @@ static ssize_t store_fan16(struct device *dev,   */  static int asc7621_in_scaling[] = { -	3320, 3000, 4380, 6640, 16000 +	2500, 2250, 3300, 5000, 12000  };  static ssize_t show_in10(struct device *dev, struct device_attribute *attr, @@ -306,19 +310,12 @@ static ssize_t show_in10(struct device *dev, struct device_attribute *attr,  	u8 nr = sda->index;  	mutex_lock(&data->update_lock); -	regval = (data->reg[param->msb[0]] * asc7621_in_scaling[nr]) / 256; - -	/* The LSB value is a 2-bit scaling of the MSB's LSbit value. -	 * I.E.  If the maximim voltage for this input is 6640 millivolts then -	 * a MSB register value of 0 = 0mv and 255 = 6640mv. -	 * A 1 step change therefore represents 25.9mv (6640 / 256). -	 * The extra 2-bits therefore represent increments of 6.48mv. -	 */ -	regval += ((asc7621_in_scaling[nr] / 256) / 4) * -	    (data->reg[param->lsb[0]] >> 6); - +	regval = (data->reg[param->msb[0]] << 8) | (data->reg[param->lsb[0]]);  	mutex_unlock(&data->update_lock); +	/* The LSB value is a 2-bit scaling of the MSB's LSbit value. */ +	regval = (regval >> 6) * asc7621_in_scaling[nr] / (0xc0 << 2); +  	return sprintf(buf, "%u\n", regval);  } @@ -331,7 +328,7 @@ static ssize_t show_in8(struct device *dev, struct device_attribute *attr,  	return sprintf(buf, "%u\n",  		       ((data->reg[param->msb[0]] * -			 asc7621_in_scaling[nr]) / 256)); +			 asc7621_in_scaling[nr]) / 0xc0));  }  static ssize_t store_in8(struct device *dev, struct device_attribute *attr, @@ -344,9 +341,11 @@ static ssize_t store_in8(struct device *dev, struct device_attribute *attr,  	if (strict_strtol(buf, 10, &reqval))  		return -EINVAL; -	reqval = SENSORS_LIMIT(reqval, 0, asc7621_in_scaling[nr]); +	reqval = SENSORS_LIMIT(reqval, 0, 0xffff); + +	reqval = reqval * 0xc0 / asc7621_in_scaling[nr]; -	reqval = (reqval * 255 + 128) / asc7621_in_scaling[nr]; +	reqval = SENSORS_LIMIT(reqval, 0, 0xff);  	mutex_lock(&data->update_lock);  	data->reg[param->msb[0]] = reqval; @@ -846,11 +845,11 @@ static struct asc7621_param asc7621_params[] = {  	PWRITE(in3_max, 3, PRI_LOW, 0x4b, 0, 0, 0, in8),  	PWRITE(in4_max, 4, PRI_LOW, 0x4d, 0, 0, 0, in8), -	PREAD(in0_alarm, 0, PRI_LOW, 0x41, 0, 0x01, 0, bitmask), -	PREAD(in1_alarm, 1, PRI_LOW, 0x41, 0, 0x01, 1, bitmask), -	PREAD(in2_alarm, 2, PRI_LOW, 0x41, 0, 0x01, 2, bitmask), -	PREAD(in3_alarm, 3, PRI_LOW, 0x41, 0, 0x01, 3, bitmask), -	PREAD(in4_alarm, 4, PRI_LOW, 0x42, 0, 0x01, 0, bitmask), +	PREAD(in0_alarm, 0, PRI_HIGH, 0x41, 0, 0x01, 0, bitmask), +	PREAD(in1_alarm, 1, PRI_HIGH, 0x41, 0, 0x01, 1, bitmask), +	PREAD(in2_alarm, 2, PRI_HIGH, 0x41, 0, 0x01, 2, bitmask), +	PREAD(in3_alarm, 3, PRI_HIGH, 0x41, 0, 0x01, 3, bitmask), +	PREAD(in4_alarm, 4, PRI_HIGH, 0x42, 0, 0x01, 0, bitmask),  	PREAD(fan1_input, 0, PRI_HIGH, 0x29, 0x28, 0, 0, fan16),  	PREAD(fan2_input, 1, PRI_HIGH, 0x2b, 0x2a, 0, 0, fan16), @@ -862,10 +861,10 @@ static struct asc7621_param asc7621_params[] = {  	PWRITE(fan3_min, 2, PRI_LOW, 0x59, 0x58, 0, 0, fan16),  	PWRITE(fan4_min, 3, PRI_LOW, 0x5b, 0x5a, 0, 0, fan16), -	PREAD(fan1_alarm, 0, PRI_LOW, 0x42, 0, 0x01, 0, bitmask), -	PREAD(fan2_alarm, 1, PRI_LOW, 0x42, 0, 0x01, 1, bitmask), -	PREAD(fan3_alarm, 2, PRI_LOW, 0x42, 0, 0x01, 2, bitmask), -	PREAD(fan4_alarm, 3, PRI_LOW, 0x42, 0, 0x01, 3, bitmask), +	PREAD(fan1_alarm, 0, PRI_HIGH, 0x42, 0, 0x01, 2, bitmask), +	PREAD(fan2_alarm, 1, PRI_HIGH, 0x42, 0, 0x01, 3, bitmask), +	PREAD(fan3_alarm, 2, PRI_HIGH, 0x42, 0, 0x01, 4, bitmask), +	PREAD(fan4_alarm, 3, PRI_HIGH, 0x42, 0, 0x01, 5, bitmask),  	PREAD(temp1_input, 0, PRI_HIGH, 0x25, 0x10, 0, 0, temp10),  	PREAD(temp2_input, 1, PRI_HIGH, 0x26, 0x15, 0, 0, temp10), @@ -886,10 +885,10 @@ static struct asc7621_param asc7621_params[] = {  	PWRITE(temp3_max, 2, PRI_LOW, 0x53, 0, 0, 0, temp8),  	PWRITE(temp4_max, 3, PRI_LOW, 0x35, 0, 0, 0, temp8), -	PREAD(temp1_alarm, 0, PRI_LOW, 0x41, 0, 0x01, 4, bitmask), -	PREAD(temp2_alarm, 1, PRI_LOW, 0x41, 0, 0x01, 5, bitmask), -	PREAD(temp3_alarm, 2, PRI_LOW, 0x41, 0, 0x01, 6, bitmask), -	PREAD(temp4_alarm, 3, PRI_LOW, 0x43, 0, 0x01, 0, bitmask), +	PREAD(temp1_alarm, 0, PRI_HIGH, 0x41, 0, 0x01, 4, bitmask), +	PREAD(temp2_alarm, 1, PRI_HIGH, 0x41, 0, 0x01, 5, bitmask), +	PREAD(temp3_alarm, 2, PRI_HIGH, 0x41, 0, 0x01, 6, bitmask), +	PREAD(temp4_alarm, 3, PRI_HIGH, 0x43, 0, 0x01, 0, bitmask),  	PWRITE(temp1_source, 0, PRI_LOW, 0x02, 0, 0x07, 4, bitmask),  	PWRITE(temp2_source, 1, PRI_LOW, 0x02, 0, 0x07, 0, bitmask), @@ -898,7 +897,7 @@ static struct asc7621_param asc7621_params[] = {  	PWRITE(temp1_smoothing_enable, 0, PRI_LOW, 0x62, 0, 0x01, 3, bitmask),  	PWRITE(temp2_smoothing_enable, 1, PRI_LOW, 0x63, 0, 0x01, 7, bitmask), -	PWRITE(temp3_smoothing_enable, 2, PRI_LOW, 0x64, 0, 0x01, 3, bitmask), +	PWRITE(temp3_smoothing_enable, 2, PRI_LOW, 0x63, 0, 0x01, 3, bitmask),  	PWRITE(temp4_smoothing_enable, 3, PRI_LOW, 0x3c, 0, 0x01, 3, bitmask),  	PWRITE(temp1_smoothing_time, 0, PRI_LOW, 0x62, 0, 0x07, 0, temp_st), diff --git a/drivers/hwmon/asus_atk0110.c b/drivers/hwmon/asus_atk0110.c index 028284f544e..16c42024072 100644 --- a/drivers/hwmon/asus_atk0110.c +++ b/drivers/hwmon/asus_atk0110.c @@ -10,6 +10,7 @@  #include <linux/hwmon.h>  #include <linux/list.h>  #include <linux/module.h> +#include <linux/slab.h>  #include <acpi/acpi.h>  #include <acpi/acpixf.h> @@ -1168,15 +1169,19 @@ static int atk_create_files(struct atk_data *data)  	int err;  	list_for_each_entry(s, &data->sensor_list, list) { +		sysfs_attr_init(&s->input_attr.attr);  		err = device_create_file(data->hwmon_dev, &s->input_attr);  		if (err)  			return err; +		sysfs_attr_init(&s->label_attr.attr);  		err = device_create_file(data->hwmon_dev, &s->label_attr);  		if (err)  			return err; +		sysfs_attr_init(&s->limit1_attr.attr);  		err = device_create_file(data->hwmon_dev, &s->limit1_attr);  		if (err)  			return err; +		sysfs_attr_init(&s->limit2_attr.attr);  		err = device_create_file(data->hwmon_dev, &s->limit2_attr);  		if (err)  			return err; diff --git a/drivers/hwmon/atxp1.c b/drivers/hwmon/atxp1.c index 94cadc19f0c..33cc143b206 100644 --- a/drivers/hwmon/atxp1.c +++ b/drivers/hwmon/atxp1.c @@ -28,6 +28,7 @@  #include <linux/err.h>  #include <linux/mutex.h>  #include <linux/sysfs.h> +#include <linux/slab.h>  MODULE_LICENSE("GPL");  MODULE_DESCRIPTION("System voltages control via Attansic ATXP1"); diff --git a/drivers/hwmon/coretemp.c b/drivers/hwmon/coretemp.c index 2d7bceeed0b..e9b7fbc5a44 100644 --- a/drivers/hwmon/coretemp.c +++ b/drivers/hwmon/coretemp.c @@ -228,7 +228,7 @@ static int __devinit adjust_tjmax(struct cpuinfo_x86 *c, u32 id, struct device *  		if (err) {  			dev_warn(dev,  				 "Unable to access MSR 0xEE, for Tjmax, left" -				 " at default"); +				 " at default\n");  		} else if (eax & 0x40000000) {  			tjmax = tjmax_ee;  		} @@ -466,7 +466,7 @@ static int __init coretemp_init(void)  			   family 6 CPU */  			if ((c->x86 == 0x6) && (c->x86_model > 0xf))  				printk(KERN_WARNING DRVNAME ": Unknown CPU " -					"model %x\n", c->x86_model); +					"model 0x%x\n", c->x86_model);  			continue;  		} diff --git a/drivers/hwmon/f75375s.c b/drivers/hwmon/f75375s.c index 277398f9c93..bad2cf3ef4a 100644 --- a/drivers/hwmon/f75375s.c +++ b/drivers/hwmon/f75375s.c @@ -35,6 +35,7 @@  #include <linux/err.h>  #include <linux/mutex.h>  #include <linux/f75375s.h> +#include <linux/slab.h>  /* Addresses to scan */  static const unsigned short normal_i2c[] = { 0x2d, 0x2e, I2C_CLIENT_END }; diff --git a/drivers/hwmon/hp_accel.c b/drivers/hwmon/hp_accel.c index be475e844c2..7580f55e67e 100644 --- a/drivers/hwmon/hp_accel.c +++ b/drivers/hwmon/hp_accel.c @@ -217,6 +217,10 @@ static struct dmi_system_id lis3lv02d_dmi_ids[] = {  	AXIS_DMI_MATCH("DV7", "HP Pavilion dv7", x_inverted),  	AXIS_DMI_MATCH("HP8710", "HP Compaq 8710", y_inverted),  	AXIS_DMI_MATCH("HDX18", "HP HDX 18", x_inverted), +	AXIS_DMI_MATCH("HPB432x", "HP ProBook 432", xy_rotated_left), +	AXIS_DMI_MATCH("HPB442x", "HP ProBook 442", xy_rotated_left), +	AXIS_DMI_MATCH("HPB452x", "HP ProBook 452", y_inverted), +	AXIS_DMI_MATCH("HPB522x", "HP ProBook 522", xy_swap),  	{ NULL, }  /* Laptop models without axis info (yet):   * "NC6910" "HP Compaq 6910" @@ -324,8 +328,8 @@ static int lis3lv02d_remove(struct acpi_device *device, int type)  	lis3lv02d_joystick_disable();  	lis3lv02d_poweroff(&lis3_dev); -	flush_work(&hpled_led.work);  	led_classdev_unregister(&hpled_led.led_classdev); +	flush_work(&hpled_led.work);  	return lis3lv02d_remove_fs(&lis3_dev);  } diff --git a/drivers/hwmon/i5k_amb.c b/drivers/hwmon/i5k_amb.c index 27d7f72a5f1..e880e2c3871 100644 --- a/drivers/hwmon/i5k_amb.c +++ b/drivers/hwmon/i5k_amb.c @@ -30,6 +30,7 @@  #include <linux/log2.h>  #include <linux/pci.h>  #include <linux/platform_device.h> +#include <linux/slab.h>  #define DRVNAME "i5k_amb" diff --git a/drivers/hwmon/ibmaem.c b/drivers/hwmon/ibmaem.c index 405d3fb5d76..eaee546af19 100644 --- a/drivers/hwmon/ibmaem.c +++ b/drivers/hwmon/ibmaem.c @@ -29,6 +29,7 @@  #include <linux/kdev_t.h>  #include <linux/spinlock.h>  #include <linux/idr.h> +#include <linux/slab.h>  #include <linux/sched.h>  #include <linux/platform_device.h>  #include <linux/math64.h> diff --git a/drivers/hwmon/ibmpex.c b/drivers/hwmon/ibmpex.c index a36363312f2..06d4eafcf76 100644 --- a/drivers/hwmon/ibmpex.c +++ b/drivers/hwmon/ibmpex.c @@ -25,6 +25,7 @@  #include <linux/hwmon-sysfs.h>  #include <linux/jiffies.h>  #include <linux/mutex.h> +#include <linux/slab.h>  #define REFRESH_INTERVAL	(2 * HZ)  #define DRVNAME			"ibmpex" diff --git a/drivers/hwmon/it87.c b/drivers/hwmon/it87.c index 1002befd87d..5be09c048c5 100644 --- a/drivers/hwmon/it87.c +++ b/drivers/hwmon/it87.c @@ -539,14 +539,14 @@ static ssize_t set_sensor(struct device *dev, struct device_attribute *attr,  	struct it87_data *data = dev_get_drvdata(dev);  	long val; +	u8 reg;  	if (strict_strtol(buf, 10, &val) < 0)  		return -EINVAL; -	mutex_lock(&data->update_lock); - -	data->sensor &= ~(1 << nr); -	data->sensor &= ~(8 << nr); +	reg = it87_read_value(data, IT87_REG_TEMP_ENABLE); +	reg &= ~(1 << nr); +	reg &= ~(8 << nr);  	if (val == 2) {	/* backwards compatibility */  		dev_warn(dev, "Sensor type 2 is deprecated, please use 4 "  			 "instead\n"); @@ -554,14 +554,16 @@ static ssize_t set_sensor(struct device *dev, struct device_attribute *attr,  	}  	/* 3 = thermal diode; 4 = thermistor; 0 = disabled */  	if (val == 3) -		data->sensor |= 1 << nr; +		reg |= 1 << nr;  	else if (val == 4) -		data->sensor |= 8 << nr; -	else if (val != 0) { -		mutex_unlock(&data->update_lock); +		reg |= 8 << nr; +	else if (val != 0)  		return -EINVAL; -	} + +	mutex_lock(&data->update_lock); +	data->sensor = reg;  	it87_write_value(data, IT87_REG_TEMP_ENABLE, data->sensor); +	data->valid = 0;	/* Force cache refresh */  	mutex_unlock(&data->update_lock);  	return count;  } @@ -1841,14 +1843,10 @@ static void __devinit it87_init_device(struct platform_device *pdev)  			it87_write_value(data, IT87_REG_TEMP_HIGH(i), 127);  	} -	/* Check if temperature channels are reset manually or by some reason */ -	tmp = it87_read_value(data, IT87_REG_TEMP_ENABLE); -	if ((tmp & 0x3f) == 0) { -		/* Temp1,Temp3=thermistor; Temp2=thermal diode */ -		tmp = (tmp & 0xc0) | 0x2a; -		it87_write_value(data, IT87_REG_TEMP_ENABLE, tmp); -	} -	data->sensor = tmp; +	/* Temperature channels are not forcibly enabled, as they can be +	 * set to two different sensor types and we can't guess which one +	 * is correct for a given system. These channels can be enabled at +	 * run-time through the temp{1-3}_type sysfs accessors if needed. */  	/* Check if voltage monitors are reset manually or by some reason */  	tmp = it87_read_value(data, IT87_REG_VIN_ENABLE); diff --git a/drivers/hwmon/lm70.c b/drivers/hwmon/lm70.c index ab8a5d3c769..fd108cfc05c 100644 --- a/drivers/hwmon/lm70.c +++ b/drivers/hwmon/lm70.c @@ -34,6 +34,7 @@  #include <linux/mutex.h>  #include <linux/mod_devicetable.h>  #include <linux/spi/spi.h> +#include <linux/slab.h>  #define DRVNAME		"lm70" diff --git a/drivers/hwmon/lm73.c b/drivers/hwmon/lm73.c index c5f39ba103c..4d1b76bc814 100644 --- a/drivers/hwmon/lm73.c +++ b/drivers/hwmon/lm73.c @@ -16,7 +16,6 @@  #include <linux/module.h>  #include <linux/init.h> -#include <linux/slab.h>  #include <linux/i2c.h>  #include <linux/hwmon.h>  #include <linux/hwmon-sysfs.h> diff --git a/drivers/hwmon/max1111.c b/drivers/hwmon/max1111.c index 9ac497271ad..12a54aa2977 100644 --- a/drivers/hwmon/max1111.c +++ b/drivers/hwmon/max1111.c @@ -20,6 +20,7 @@  #include <linux/hwmon.h>  #include <linux/hwmon-sysfs.h>  #include <linux/spi/spi.h> +#include <linux/slab.h>  #define MAX1111_TX_BUF_SIZE	1  #define MAX1111_RX_BUF_SIZE	2 diff --git a/drivers/hwmon/mc13783-adc.c b/drivers/hwmon/mc13783-adc.c index 883fa8197da..ce3c7bc8181 100644 --- a/drivers/hwmon/mc13783-adc.c +++ b/drivers/hwmon/mc13783-adc.c @@ -24,6 +24,7 @@  #include <linux/kernel.h>  #include <linux/module.h>  #include <linux/hwmon.h> +#include <linux/slab.h>  #include <linux/init.h>  #include <linux/err.h> diff --git a/drivers/hwmon/sht15.c b/drivers/hwmon/sht15.c index 864a371f6eb..a610e7880fb 100644 --- a/drivers/hwmon/sht15.c +++ b/drivers/hwmon/sht15.c @@ -36,6 +36,7 @@  #include <linux/err.h>  #include <linux/sht15.h>  #include <linux/regulator/consumer.h> +#include <linux/slab.h>  #include <asm/atomic.h>  #define SHT15_MEASURE_TEMP	3 @@ -302,13 +303,13 @@ error_ret:   **/  static inline int sht15_calc_temp(struct sht15_data *data)  { -	int d1 = 0; +	int d1 = temppoints[0].d1;  	int i; -	for (i = 1; i < ARRAY_SIZE(temppoints); i++) +	for (i = ARRAY_SIZE(temppoints) - 1; i > 0; i--)  		/* Find pointer to interpolate */  		if (data->supply_uV > temppoints[i - 1].vdd) { -			d1 = (data->supply_uV/1000 - temppoints[i - 1].vdd) +			d1 = (data->supply_uV - temppoints[i - 1].vdd)  				* (temppoints[i].d1 - temppoints[i - 1].d1)  				/ (temppoints[i].vdd - temppoints[i - 1].vdd)  				+ temppoints[i - 1].d1; @@ -541,7 +542,12 @@ static int __devinit sht15_probe(struct platform_device *pdev)  /* If a regulator is available, query what the supply voltage actually is!*/  	data->reg = regulator_get(data->dev, "vcc");  	if (!IS_ERR(data->reg)) { -		data->supply_uV = regulator_get_voltage(data->reg); +		int voltage; + +		voltage = regulator_get_voltage(data->reg); +		if (voltage) +			data->supply_uV = voltage; +  		regulator_enable(data->reg);  		/* setup a notifier block to update this if another device  		 *  causes the voltage to change */ diff --git a/drivers/hwmon/w83793.c b/drivers/hwmon/w83793.c index 9de81a4c15a..612807d9715 100644 --- a/drivers/hwmon/w83793.c +++ b/drivers/hwmon/w83793.c @@ -1294,7 +1294,7 @@ static int watchdog_close(struct inode *inode, struct file *filp)  static ssize_t watchdog_write(struct file *filp, const char __user *buf,  	size_t count, loff_t *offset)  { -	size_t ret; +	ssize_t ret;  	struct w83793_data *data = filp->private_data;  	if (count) { diff --git a/drivers/hwmon/wm831x-hwmon.c b/drivers/hwmon/wm831x-hwmon.c index c16e9e74c35..97b1f834a47 100644 --- a/drivers/hwmon/wm831x-hwmon.c +++ b/drivers/hwmon/wm831x-hwmon.c @@ -24,6 +24,7 @@  #include <linux/err.h>  #include <linux/hwmon.h>  #include <linux/hwmon-sysfs.h> +#include <linux/slab.h>  #include <linux/mfd/wm831x/core.h>  #include <linux/mfd/wm831x/auxadc.h>  |