forked from mirrors/linux
		
	hwmon: (w83627ehf) Fix multi-line comments
Cc: Jean Delvare <khali@linux-fr.org> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
This commit is contained in:
		
							parent
							
								
									51683ee83e
								
							
						
					
					
						commit
						8969e84d95
					
				
					 1 changed files with 106 additions and 82 deletions
				
			
		|  | @ -1,50 +1,49 @@ | ||||||
| /*
 | /*
 | ||||||
|     w83627ehf - Driver for the hardware monitoring functionality of |  *  w83627ehf - Driver for the hardware monitoring functionality of | ||||||
| 		the Winbond W83627EHF Super-I/O chip |  *		the Winbond W83627EHF Super-I/O chip | ||||||
|     Copyright (C) 2005-2011  Jean Delvare <khali@linux-fr.org> |  *  Copyright (C) 2005-2011  Jean Delvare <khali@linux-fr.org> | ||||||
|     Copyright (C) 2006  Yuan Mu (Winbond), |  *  Copyright (C) 2006  Yuan Mu (Winbond), | ||||||
| 			Rudolf Marek <r.marek@assembler.cz> |  *			Rudolf Marek <r.marek@assembler.cz> | ||||||
| 			David Hubbard <david.c.hubbard@gmail.com> |  *			David Hubbard <david.c.hubbard@gmail.com> | ||||||
| 			Daniel J Blueman <daniel.blueman@gmail.com> |  *			Daniel J Blueman <daniel.blueman@gmail.com> | ||||||
|     Copyright (C) 2010  Sheng-Yuan Huang (Nuvoton) (PS00) |  *  Copyright (C) 2010  Sheng-Yuan Huang (Nuvoton) (PS00) | ||||||
| 
 |  * | ||||||
|     Shamelessly ripped from the w83627hf driver |  *  Shamelessly ripped from the w83627hf driver | ||||||
|     Copyright (C) 2003  Mark Studebaker |  *  Copyright (C) 2003  Mark Studebaker | ||||||
| 
 |  * | ||||||
|     Thanks to Leon Moonen, Steve Cliffe and Grant Coady for their help |  *  Thanks to Leon Moonen, Steve Cliffe and Grant Coady for their help | ||||||
|     in testing and debugging this driver. |  *  in testing and debugging this driver. | ||||||
| 
 |  * | ||||||
|     This driver also supports the W83627EHG, which is the lead-free |  *  This driver also supports the W83627EHG, which is the lead-free | ||||||
|     version of the W83627EHF. |  *  version of the W83627EHF. | ||||||
| 
 |  * | ||||||
|     This program is free software; you can redistribute it and/or modify |  *  This program is free software; you can redistribute it and/or modify | ||||||
|     it under the terms of the GNU General Public License as published by |  *  it under the terms of the GNU General Public License as published by | ||||||
|     the Free Software Foundation; either version 2 of the License, or |  *  the Free Software Foundation; either version 2 of the License, or | ||||||
|     (at your option) any later version. |  *  (at your option) any later version. | ||||||
| 
 |  * | ||||||
|     This program is distributed in the hope that it will be useful, |  *  This program is distributed in the hope that it will be useful, | ||||||
|     but WITHOUT ANY WARRANTY; without even the implied warranty of |  *  but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||||
|     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the |  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
|     GNU General Public License for more details. |  *  GNU General Public License for more details. | ||||||
| 
 |  * | ||||||
|     You should have received a copy of the GNU General Public License |  *  You should have received a copy of the GNU General Public License | ||||||
|     along with this program; if not, write to the Free Software |  *  along with this program; if not, write to the Free Software | ||||||
|     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||||||
| 
 |  * | ||||||
| 
 |  *  Supports the following chips: | ||||||
|     Supports the following chips: |  * | ||||||
| 
 |  *  Chip        #vin    #fan    #pwm    #temp  chip IDs       man ID | ||||||
|     Chip        #vin    #fan    #pwm    #temp  chip IDs       man ID |  *  w83627ehf   10      5       4       3      0x8850 0x88    0x5ca3 | ||||||
|     w83627ehf   10      5       4       3      0x8850 0x88    0x5ca3 |  *					       0x8860 0xa1 | ||||||
| 					       0x8860 0xa1 |  *  w83627dhg    9      5       4       3      0xa020 0xc1    0x5ca3 | ||||||
|     w83627dhg    9      5       4       3      0xa020 0xc1    0x5ca3 |  *  w83627dhg-p  9      5       4       3      0xb070 0xc1    0x5ca3 | ||||||
|     w83627dhg-p  9      5       4       3      0xb070 0xc1    0x5ca3 |  *  w83627uhg    8      2       2       3      0xa230 0xc1    0x5ca3 | ||||||
|     w83627uhg    8      2       2       3      0xa230 0xc1    0x5ca3 |  *  w83667hg     9      5       3       3      0xa510 0xc1    0x5ca3 | ||||||
|     w83667hg     9      5       3       3      0xa510 0xc1    0x5ca3 |  *  w83667hg-b   9      5       3       4      0xb350 0xc1    0x5ca3 | ||||||
|     w83667hg-b   9      5       3       4      0xb350 0xc1    0x5ca3 |  *  nct6775f     9      4       3       9      0xb470 0xc1    0x5ca3 | ||||||
|     nct6775f     9      4       3       9      0xb470 0xc1    0x5ca3 |  *  nct6776f     9      5       3       9      0xC330 0xc1    0x5ca3 | ||||||
|     nct6776f     9      5       3       9      0xC330 0xc1    0x5ca3 |  */ | ||||||
| */ |  | ||||||
| 
 | 
 | ||||||
| #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt | #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt | ||||||
| 
 | 
 | ||||||
|  | @ -164,11 +163,13 @@ superio_exit(int ioreg) | ||||||
| #define W83627EHF_REG_BANK		0x4E | #define W83627EHF_REG_BANK		0x4E | ||||||
| #define W83627EHF_REG_CONFIG		0x40 | #define W83627EHF_REG_CONFIG		0x40 | ||||||
| 
 | 
 | ||||||
| /* Not currently used:
 | /*
 | ||||||
|  |  * Not currently used: | ||||||
|  * REG_MAN_ID has the value 0x5ca3 for all supported chips. |  * REG_MAN_ID has the value 0x5ca3 for all supported chips. | ||||||
|  * REG_CHIP_ID == 0x88/0xa1/0xc1 depending on chip model. |  * REG_CHIP_ID == 0x88/0xa1/0xc1 depending on chip model. | ||||||
|  * REG_MAN_ID is at port 0x4f |  * REG_MAN_ID is at port 0x4f | ||||||
|  * REG_CHIP_ID is at port 0x58 */ |  * REG_CHIP_ID is at port 0x58 | ||||||
|  |  */ | ||||||
| 
 | 
 | ||||||
| static const u16 W83627EHF_REG_FAN[] = { 0x28, 0x29, 0x2a, 0x3f, 0x553 }; | static const u16 W83627EHF_REG_FAN[] = { 0x28, 0x29, 0x2a, 0x3f, 0x553 }; | ||||||
| static const u16 W83627EHF_REG_FAN_MIN[] = { 0x3b, 0x3c, 0x3d, 0x3e, 0x55c }; | static const u16 W83627EHF_REG_FAN_MIN[] = { 0x3b, 0x3c, 0x3d, 0x3e, 0x55c }; | ||||||
|  | @ -393,8 +394,10 @@ div_from_reg(u8 reg) | ||||||
| 	return 1 << reg; | 	return 1 << reg; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /* Some of the voltage inputs have internal scaling, the tables below
 | /*
 | ||||||
|  * contain 8 (the ADC LSB in mV) * scaling factor * 100 */ |  * Some of the voltage inputs have internal scaling, the tables below | ||||||
|  |  * contain 8 (the ADC LSB in mV) * scaling factor * 100 | ||||||
|  |  */ | ||||||
| static const u16 scale_in_common[10] = { | static const u16 scale_in_common[10] = { | ||||||
| 	800, 800, 1600, 1600, 800, 800, 800, 1600, 1600, 800 | 	800, 800, 1600, 1600, 800, 800, 800, 1600, 1600, 800 | ||||||
| }; | }; | ||||||
|  | @ -470,12 +473,13 @@ struct w83627ehf_data { | ||||||
| 
 | 
 | ||||||
| 	u8 pwm_mode[4]; /* 0->DC variable voltage, 1->PWM variable duty cycle */ | 	u8 pwm_mode[4]; /* 0->DC variable voltage, 1->PWM variable duty cycle */ | ||||||
| 	u8 pwm_enable[4]; /* 1->manual
 | 	u8 pwm_enable[4]; /* 1->manual
 | ||||||
| 			     2->thermal cruise mode (also called SmartFan I) | 			   * 2->thermal cruise mode (also called SmartFan I) | ||||||
| 			     3->fan speed cruise mode | 			   * 3->fan speed cruise mode | ||||||
| 			     4->variable thermal cruise (also called | 			   * 4->variable thermal cruise (also called | ||||||
| 				SmartFan III) | 			   * SmartFan III) | ||||||
| 			     5->enhanced variable thermal cruise (also called | 			   * 5->enhanced variable thermal cruise (also called | ||||||
| 				SmartFan IV) */ | 			   * SmartFan IV) | ||||||
|  | 			   */ | ||||||
| 	u8 pwm_enable_orig[4];	/* original value of pwm_enable */ | 	u8 pwm_enable_orig[4];	/* original value of pwm_enable */ | ||||||
| 	u8 pwm_num;		/* number of pwm */ | 	u8 pwm_num;		/* number of pwm */ | ||||||
| 	u8 pwm[4]; | 	u8 pwm[4]; | ||||||
|  | @ -816,9 +820,11 @@ static struct w83627ehf_data *w83627ehf_update_device(struct device *dev) | ||||||
| 				data->fan_min[i] = w83627ehf_read_value(data, | 				data->fan_min[i] = w83627ehf_read_value(data, | ||||||
| 					   data->REG_FAN_MIN[i]); | 					   data->REG_FAN_MIN[i]); | ||||||
| 
 | 
 | ||||||
| 			/* If we failed to measure the fan speed and clock
 | 			/*
 | ||||||
| 			   divider can be increased, let's try that for next | 			 * If we failed to measure the fan speed and clock | ||||||
| 			   time */ | 			 * divider can be increased, let's try that for next | ||||||
|  | 			 * time | ||||||
|  | 			 */ | ||||||
| 			if (data->has_fan_div | 			if (data->has_fan_div | ||||||
| 			    && (reg >= 0xff || (sio_data->kind == nct6775 | 			    && (reg >= 0xff || (sio_data->kind == nct6775 | ||||||
| 						&& reg == 0x00)) | 						&& reg == 0x00)) | ||||||
|  | @ -1081,25 +1087,31 @@ store_fan_min(struct device *dev, struct device_attribute *attr, | ||||||
| 		new_div = data->fan_div[nr]; /* No change */ | 		new_div = data->fan_div[nr]; /* No change */ | ||||||
| 		dev_info(dev, "fan%u low limit and alarm disabled\n", nr + 1); | 		dev_info(dev, "fan%u low limit and alarm disabled\n", nr + 1); | ||||||
| 	} else if ((reg = 1350000U / val) >= 128 * 255) { | 	} else if ((reg = 1350000U / val) >= 128 * 255) { | ||||||
| 		/* Speed below this value cannot possibly be represented,
 | 		/*
 | ||||||
| 		   even with the highest divider (128) */ | 		 * Speed below this value cannot possibly be represented, | ||||||
|  | 		 * even with the highest divider (128) | ||||||
|  | 		 */ | ||||||
| 		data->fan_min[nr] = 254; | 		data->fan_min[nr] = 254; | ||||||
| 		new_div = 7; /* 128 == (1 << 7) */ | 		new_div = 7; /* 128 == (1 << 7) */ | ||||||
| 		dev_warn(dev, "fan%u low limit %lu below minimum %u, set to " | 		dev_warn(dev, "fan%u low limit %lu below minimum %u, set to " | ||||||
| 			 "minimum\n", nr + 1, val, | 			 "minimum\n", nr + 1, val, | ||||||
| 			 data->fan_from_reg_min(254, 7)); | 			 data->fan_from_reg_min(254, 7)); | ||||||
| 	} else if (!reg) { | 	} else if (!reg) { | ||||||
| 		/* Speed above this value cannot possibly be represented,
 | 		/*
 | ||||||
| 		   even with the lowest divider (1) */ | 		 * Speed above this value cannot possibly be represented, | ||||||
|  | 		 * even with the lowest divider (1) | ||||||
|  | 		 */ | ||||||
| 		data->fan_min[nr] = 1; | 		data->fan_min[nr] = 1; | ||||||
| 		new_div = 0; /* 1 == (1 << 0) */ | 		new_div = 0; /* 1 == (1 << 0) */ | ||||||
| 		dev_warn(dev, "fan%u low limit %lu above maximum %u, set to " | 		dev_warn(dev, "fan%u low limit %lu above maximum %u, set to " | ||||||
| 			 "maximum\n", nr + 1, val, | 			 "maximum\n", nr + 1, val, | ||||||
| 			 data->fan_from_reg_min(1, 0)); | 			 data->fan_from_reg_min(1, 0)); | ||||||
| 	} else { | 	} else { | ||||||
| 		/* Automatically pick the best divider, i.e. the one such
 | 		/*
 | ||||||
| 		   that the min limit will correspond to a register value | 		 * Automatically pick the best divider, i.e. the one such | ||||||
| 		   in the 96..192 range */ | 		 * that the min limit will correspond to a register value | ||||||
|  | 		 * in the 96..192 range | ||||||
|  | 		 */ | ||||||
| 		new_div = 0; | 		new_div = 0; | ||||||
| 		while (reg > 192 && new_div < 7) { | 		while (reg > 192 && new_div < 7) { | ||||||
| 			reg >>= 1; | 			reg >>= 1; | ||||||
|  | @ -1108,8 +1120,10 @@ store_fan_min(struct device *dev, struct device_attribute *attr, | ||||||
| 		data->fan_min[nr] = reg; | 		data->fan_min[nr] = reg; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	/* Write both the fan clock divider (if it changed) and the new
 | 	/*
 | ||||||
| 	   fan min (unconditionally) */ | 	 * Write both the fan clock divider (if it changed) and the new | ||||||
|  | 	 * fan min (unconditionally) | ||||||
|  | 	 */ | ||||||
| 	if (new_div != data->fan_div[nr]) { | 	if (new_div != data->fan_div[nr]) { | ||||||
| 		dev_dbg(dev, "fan%u clock divider changed from %u to %u\n", | 		dev_dbg(dev, "fan%u clock divider changed from %u to %u\n", | ||||||
| 			nr + 1, div_from_reg(data->fan_div[nr]), | 			nr + 1, div_from_reg(data->fan_div[nr]), | ||||||
|  | @ -1736,8 +1750,10 @@ static struct sensor_device_attribute_2 sda_caseopen[] = { | ||||||
| 
 | 
 | ||||||
| static void w83627ehf_device_remove_files(struct device *dev) | static void w83627ehf_device_remove_files(struct device *dev) | ||||||
| { | { | ||||||
| 	/* some entries in the following arrays may not have been used in
 | 	/*
 | ||||||
| 	 * device_create_file(), but device_remove_file() will ignore them */ | 	 * some entries in the following arrays may not have been used in | ||||||
|  | 	 * device_create_file(), but device_remove_file() will ignore them | ||||||
|  | 	 */ | ||||||
| 	int i; | 	int i; | ||||||
| 	struct w83627ehf_data *data = dev_get_drvdata(dev); | 	struct w83627ehf_data *data = dev_get_drvdata(dev); | ||||||
| 
 | 
 | ||||||
|  | @ -2279,9 +2295,11 @@ static int __devinit w83627ehf_probe(struct platform_device *pdev) | ||||||
| 	/* Read VID value */ | 	/* Read VID value */ | ||||||
| 	if (sio_data->kind == w83667hg || sio_data->kind == w83667hg_b || | 	if (sio_data->kind == w83667hg || sio_data->kind == w83667hg_b || | ||||||
| 	    sio_data->kind == nct6775 || sio_data->kind == nct6776) { | 	    sio_data->kind == nct6775 || sio_data->kind == nct6776) { | ||||||
| 		/* W83667HG has different pins for VID input and output, so
 | 		/*
 | ||||||
| 		we can get the VID input values directly at logical device D | 		 * W83667HG has different pins for VID input and output, so | ||||||
| 		0xe3. */ | 		 * we can get the VID input values directly at logical device D | ||||||
|  | 		 * 0xe3. | ||||||
|  | 		 */ | ||||||
| 		superio_select(sio_data->sioreg, W83667HG_LD_VID); | 		superio_select(sio_data->sioreg, W83667HG_LD_VID); | ||||||
| 		data->vid = superio_inb(sio_data->sioreg, 0xe3); | 		data->vid = superio_inb(sio_data->sioreg, 0xe3); | ||||||
| 		err = device_create_file(dev, &dev_attr_cpu0_vid); | 		err = device_create_file(dev, &dev_attr_cpu0_vid); | ||||||
|  | @ -2290,11 +2308,13 @@ static int __devinit w83627ehf_probe(struct platform_device *pdev) | ||||||
| 	} else if (sio_data->kind != w83627uhg) { | 	} else if (sio_data->kind != w83627uhg) { | ||||||
| 		superio_select(sio_data->sioreg, W83627EHF_LD_HWM); | 		superio_select(sio_data->sioreg, W83627EHF_LD_HWM); | ||||||
| 		if (superio_inb(sio_data->sioreg, SIO_REG_VID_CTRL) & 0x80) { | 		if (superio_inb(sio_data->sioreg, SIO_REG_VID_CTRL) & 0x80) { | ||||||
| 			/* Set VID input sensibility if needed. In theory the
 | 			/*
 | ||||||
| 			   BIOS should have set it, but in practice it's not | 			 * Set VID input sensibility if needed. In theory the | ||||||
| 			   always the case. We only do it for the W83627EHF/EHG | 			 * BIOS should have set it, but in practice it's not | ||||||
| 			   because the W83627DHG is more complex in this | 			 * always the case. We only do it for the W83627EHF/EHG | ||||||
| 			   respect. */ | 			 * because the W83627DHG is more complex in this | ||||||
|  | 			 * respect. | ||||||
|  | 			 */ | ||||||
| 			if (sio_data->kind == w83627ehf) { | 			if (sio_data->kind == w83627ehf) { | ||||||
| 				en_vrm10 = superio_inb(sio_data->sioreg, | 				en_vrm10 = superio_inb(sio_data->sioreg, | ||||||
| 						       SIO_REG_EN_VRM10); | 						       SIO_REG_EN_VRM10); | ||||||
|  | @ -2616,10 +2636,12 @@ static int __init w83627ehf_find(int sioaddr, unsigned short *addr, | ||||||
| 	return 0; | 	return 0; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /* when Super-I/O functions move to a separate file, the Super-I/O
 | /*
 | ||||||
|  |  * when Super-I/O functions move to a separate file, the Super-I/O | ||||||
|  * bus will manage the lifetime of the device and this module will only keep |  * bus will manage the lifetime of the device and this module will only keep | ||||||
|  * track of the w83627ehf driver. But since we platform_device_alloc(), we |  * track of the w83627ehf driver. But since we platform_device_alloc(), we | ||||||
|  * must keep track of the device */ |  * must keep track of the device | ||||||
|  |  */ | ||||||
| static struct platform_device *pdev; | static struct platform_device *pdev; | ||||||
| 
 | 
 | ||||||
| static int __init sensors_w83627ehf_init(void) | static int __init sensors_w83627ehf_init(void) | ||||||
|  | @ -2629,11 +2651,13 @@ static int __init sensors_w83627ehf_init(void) | ||||||
| 	struct resource res; | 	struct resource res; | ||||||
| 	struct w83627ehf_sio_data sio_data; | 	struct w83627ehf_sio_data sio_data; | ||||||
| 
 | 
 | ||||||
| 	/* initialize sio_data->kind and sio_data->sioreg.
 | 	/*
 | ||||||
|  | 	 * initialize sio_data->kind and sio_data->sioreg. | ||||||
| 	 * | 	 * | ||||||
| 	 * when Super-I/O functions move to a separate file, the Super-I/O | 	 * when Super-I/O functions move to a separate file, the Super-I/O | ||||||
| 	 * driver will probe 0x2e and 0x4e and auto-detect the presence of a | 	 * driver will probe 0x2e and 0x4e and auto-detect the presence of a | ||||||
| 	 * w83627ehf hardware monitor, and call probe() */ | 	 * w83627ehf hardware monitor, and call probe() | ||||||
|  | 	 */ | ||||||
| 	if (w83627ehf_find(0x2e, &address, &sio_data) && | 	if (w83627ehf_find(0x2e, &address, &sio_data) && | ||||||
| 	    w83627ehf_find(0x4e, &address, &sio_data)) | 	    w83627ehf_find(0x4e, &address, &sio_data)) | ||||||
| 		return -ENODEV; | 		return -ENODEV; | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue
	
	 Guenter Roeck
						Guenter Roeck