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 | ||||
| 		the Winbond W83627EHF Super-I/O chip | ||||
|     Copyright (C) 2005-2011  Jean Delvare <khali@linux-fr.org> | ||||
|     Copyright (C) 2006  Yuan Mu (Winbond), | ||||
| 			Rudolf Marek <r.marek@assembler.cz> | ||||
| 			David Hubbard <david.c.hubbard@gmail.com> | ||||
| 			Daniel J Blueman <daniel.blueman@gmail.com> | ||||
|     Copyright (C) 2010  Sheng-Yuan Huang (Nuvoton) (PS00) | ||||
| 
 | ||||
|     Shamelessly ripped from the w83627hf driver | ||||
|     Copyright (C) 2003  Mark Studebaker | ||||
| 
 | ||||
|     Thanks to Leon Moonen, Steve Cliffe and Grant Coady for their help | ||||
|     in testing and debugging this driver. | ||||
| 
 | ||||
|     This driver also supports the W83627EHG, which is the lead-free | ||||
|     version of the W83627EHF. | ||||
| 
 | ||||
|     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 | ||||
|     the Free Software Foundation; either version 2 of the License, or | ||||
|     (at your option) any later version. | ||||
| 
 | ||||
|     This program is distributed in the hope that it will be useful, | ||||
|     but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|     GNU General Public License for more details. | ||||
| 
 | ||||
|     You should have received a copy of the GNU General Public License | ||||
|     along with this program; if not, write to the Free Software | ||||
|     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||||
| 
 | ||||
| 
 | ||||
|     Supports the following chips: | ||||
| 
 | ||||
|     Chip        #vin    #fan    #pwm    #temp  chip IDs       man ID | ||||
|     w83627ehf   10      5       4       3      0x8850 0x88    0x5ca3 | ||||
| 					       0x8860 0xa1 | ||||
|     w83627dhg    9      5       4       3      0xa020 0xc1    0x5ca3 | ||||
|     w83627dhg-p  9      5       4       3      0xb070 0xc1    0x5ca3 | ||||
|     w83627uhg    8      2       2       3      0xa230 0xc1    0x5ca3 | ||||
|     w83667hg     9      5       3       3      0xa510 0xc1    0x5ca3 | ||||
|     w83667hg-b   9      5       3       4      0xb350 0xc1    0x5ca3 | ||||
|     nct6775f     9      4       3       9      0xb470 0xc1    0x5ca3 | ||||
|     nct6776f     9      5       3       9      0xC330 0xc1    0x5ca3 | ||||
| */ | ||||
|  *  w83627ehf - Driver for the hardware monitoring functionality of | ||||
|  *		the Winbond W83627EHF Super-I/O chip | ||||
|  *  Copyright (C) 2005-2011  Jean Delvare <khali@linux-fr.org> | ||||
|  *  Copyright (C) 2006  Yuan Mu (Winbond), | ||||
|  *			Rudolf Marek <r.marek@assembler.cz> | ||||
|  *			David Hubbard <david.c.hubbard@gmail.com> | ||||
|  *			Daniel J Blueman <daniel.blueman@gmail.com> | ||||
|  *  Copyright (C) 2010  Sheng-Yuan Huang (Nuvoton) (PS00) | ||||
|  * | ||||
|  *  Shamelessly ripped from the w83627hf driver | ||||
|  *  Copyright (C) 2003  Mark Studebaker | ||||
|  * | ||||
|  *  Thanks to Leon Moonen, Steve Cliffe and Grant Coady for their help | ||||
|  *  in testing and debugging this driver. | ||||
|  * | ||||
|  *  This driver also supports the W83627EHG, which is the lead-free | ||||
|  *  version of the W83627EHF. | ||||
|  * | ||||
|  *  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 | ||||
|  *  the Free Software Foundation; either version 2 of the License, or | ||||
|  *  (at your option) any later version. | ||||
|  * | ||||
|  *  This program is distributed in the hope that it will be useful, | ||||
|  *  but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  *  GNU General Public License for more details. | ||||
|  * | ||||
|  *  You should have received a copy of the GNU General Public License | ||||
|  *  along with this program; if not, write to the Free Software | ||||
|  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||||
|  * | ||||
|  *  Supports the following chips: | ||||
|  * | ||||
|  *  Chip        #vin    #fan    #pwm    #temp  chip IDs       man ID | ||||
|  *  w83627ehf   10      5       4       3      0x8850 0x88    0x5ca3 | ||||
|  *					       0x8860 0xa1 | ||||
|  *  w83627dhg    9      5       4       3      0xa020 0xc1    0x5ca3 | ||||
|  *  w83627dhg-p  9      5       4       3      0xb070 0xc1    0x5ca3 | ||||
|  *  w83627uhg    8      2       2       3      0xa230 0xc1    0x5ca3 | ||||
|  *  w83667hg     9      5       3       3      0xa510 0xc1    0x5ca3 | ||||
|  *  w83667hg-b   9      5       3       4      0xb350 0xc1    0x5ca3 | ||||
|  *  nct6775f     9      4       3       9      0xb470 0xc1    0x5ca3 | ||||
|  *  nct6776f     9      5       3       9      0xC330 0xc1    0x5ca3 | ||||
|  */ | ||||
| 
 | ||||
| #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt | ||||
| 
 | ||||
|  | @ -164,11 +163,13 @@ superio_exit(int ioreg) | |||
| #define W83627EHF_REG_BANK		0x4E | ||||
| #define W83627EHF_REG_CONFIG		0x40 | ||||
| 
 | ||||
| /* Not currently used:
 | ||||
| /*
 | ||||
|  * Not currently used: | ||||
|  * REG_MAN_ID has the value 0x5ca3 for all supported chips. | ||||
|  * REG_CHIP_ID == 0x88/0xa1/0xc1 depending on chip model. | ||||
|  * 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_MIN[] = { 0x3b, 0x3c, 0x3d, 0x3e, 0x55c }; | ||||
|  | @ -393,8 +394,10 @@ div_from_reg(u8 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] = { | ||||
| 	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_enable[4]; /* 1->manual
 | ||||
| 			     2->thermal cruise mode (also called SmartFan I) | ||||
| 			     3->fan speed cruise mode | ||||
| 			     4->variable thermal cruise (also called | ||||
| 				SmartFan III) | ||||
| 			     5->enhanced variable thermal cruise (also called | ||||
| 				SmartFan IV) */ | ||||
| 			   * 2->thermal cruise mode (also called SmartFan I) | ||||
| 			   * 3->fan speed cruise mode | ||||
| 			   * 4->variable thermal cruise (also called | ||||
| 			   * SmartFan III) | ||||
| 			   * 5->enhanced variable thermal cruise (also called | ||||
| 			   * SmartFan IV) | ||||
| 			   */ | ||||
| 	u8 pwm_enable_orig[4];	/* original value of pwm_enable */ | ||||
| 	u8 pwm_num;		/* number of pwm */ | ||||
| 	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->REG_FAN_MIN[i]); | ||||
| 
 | ||||
| 			/* If we failed to measure the fan speed and clock
 | ||||
| 			   divider can be increased, let's try that for next | ||||
| 			   time */ | ||||
| 			/*
 | ||||
| 			 * If we failed to measure the fan speed and clock | ||||
| 			 * divider can be increased, let's try that for next | ||||
| 			 * time | ||||
| 			 */ | ||||
| 			if (data->has_fan_div | ||||
| 			    && (reg >= 0xff || (sio_data->kind == nct6775 | ||||
| 						&& reg == 0x00)) | ||||
|  | @ -1081,25 +1087,31 @@ store_fan_min(struct device *dev, struct device_attribute *attr, | |||
| 		new_div = data->fan_div[nr]; /* No change */ | ||||
| 		dev_info(dev, "fan%u low limit and alarm disabled\n", nr + 1); | ||||
| 	} 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; | ||||
| 		new_div = 7; /* 128 == (1 << 7) */ | ||||
| 		dev_warn(dev, "fan%u low limit %lu below minimum %u, set to " | ||||
| 			 "minimum\n", nr + 1, val, | ||||
| 			 data->fan_from_reg_min(254, 7)); | ||||
| 	} 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; | ||||
| 		new_div = 0; /* 1 == (1 << 0) */ | ||||
| 		dev_warn(dev, "fan%u low limit %lu above maximum %u, set to " | ||||
| 			 "maximum\n", nr + 1, val, | ||||
| 			 data->fan_from_reg_min(1, 0)); | ||||
| 	} else { | ||||
| 		/* Automatically pick the best divider, i.e. the one such
 | ||||
| 		   that the min limit will correspond to a register value | ||||
| 		   in the 96..192 range */ | ||||
| 		/*
 | ||||
| 		 * Automatically pick the best divider, i.e. the one such | ||||
| 		 * that the min limit will correspond to a register value | ||||
| 		 * in the 96..192 range | ||||
| 		 */ | ||||
| 		new_div = 0; | ||||
| 		while (reg > 192 && new_div < 7) { | ||||
| 			reg >>= 1; | ||||
|  | @ -1108,8 +1120,10 @@ store_fan_min(struct device *dev, struct device_attribute *attr, | |||
| 		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]) { | ||||
| 		dev_dbg(dev, "fan%u clock divider changed from %u to %u\n", | ||||
| 			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) | ||||
| { | ||||
| 	/* 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; | ||||
| 	struct w83627ehf_data *data = dev_get_drvdata(dev); | ||||
| 
 | ||||
|  | @ -2279,9 +2295,11 @@ static int __devinit w83627ehf_probe(struct platform_device *pdev) | |||
| 	/* Read VID value */ | ||||
| 	if (sio_data->kind == w83667hg || sio_data->kind == w83667hg_b || | ||||
| 	    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 | ||||
| 		0xe3. */ | ||||
| 		/*
 | ||||
| 		 * W83667HG has different pins for VID input and output, so | ||||
| 		 * we can get the VID input values directly at logical device D | ||||
| 		 * 0xe3. | ||||
| 		 */ | ||||
| 		superio_select(sio_data->sioreg, W83667HG_LD_VID); | ||||
| 		data->vid = superio_inb(sio_data->sioreg, 0xe3); | ||||
| 		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) { | ||||
| 		superio_select(sio_data->sioreg, W83627EHF_LD_HWM); | ||||
| 		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 | ||||
| 			   always the case. We only do it for the W83627EHF/EHG | ||||
| 			   because the W83627DHG is more complex in this | ||||
| 			   respect. */ | ||||
| 			/*
 | ||||
| 			 * Set VID input sensibility if needed. In theory the | ||||
| 			 * BIOS should have set it, but in practice it's not | ||||
| 			 * always the case. We only do it for the W83627EHF/EHG | ||||
| 			 * because the W83627DHG is more complex in this | ||||
| 			 * respect. | ||||
| 			 */ | ||||
| 			if (sio_data->kind == w83627ehf) { | ||||
| 				en_vrm10 = superio_inb(sio_data->sioreg, | ||||
| 						       SIO_REG_EN_VRM10); | ||||
|  | @ -2616,10 +2636,12 @@ static int __init w83627ehf_find(int sioaddr, unsigned short *addr, | |||
| 	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 | ||||
|  * 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 int __init sensors_w83627ehf_init(void) | ||||
|  | @ -2629,11 +2651,13 @@ static int __init sensors_w83627ehf_init(void) | |||
| 	struct resource res; | ||||
| 	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 | ||||
| 	 * 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) && | ||||
| 	    w83627ehf_find(0x4e, &address, &sio_data)) | ||||
| 		return -ENODEV; | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Guenter Roeck
						Guenter Roeck