W1: feature, w1_therm.c use strong pullup and documentation
Added strong pullup to thermal sensor driver and general documentation on the sensor. Signed-off-by: David Fries <david@fries.net> Signed-off-by: Evgeniy Polyakov <johnpol@2ka.mipt.ru> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
		
							parent
							
								
									6a158c0de7
								
							
						
					
					
						commit
						6cd159744e
					
				| @ -1,5 +1,7 @@ | ||||
| 00-INDEX | ||||
| 	- This file | ||||
| slaves/ | ||||
| 	- Drivers that provide support for specific family codes. | ||||
| masters/ | ||||
| 	- Individual chips providing 1-wire busses. | ||||
| w1.generic | ||||
|  | ||||
							
								
								
									
										4
									
								
								Documentation/w1/slaves/00-INDEX
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								Documentation/w1/slaves/00-INDEX
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,4 @@ | ||||
| 00-INDEX | ||||
| 	- This file | ||||
| w1_therm | ||||
| 	- The Maxim/Dallas Semiconductor ds18*20 temperature sensor. | ||||
							
								
								
									
										41
									
								
								Documentation/w1/slaves/w1_therm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								Documentation/w1/slaves/w1_therm
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,41 @@ | ||||
| Kernel driver w1_therm | ||||
| ==================== | ||||
| 
 | ||||
| Supported chips: | ||||
|   * Maxim ds18*20 based temperature sensors. | ||||
| 
 | ||||
| Author: Evgeniy Polyakov <johnpol@2ka.mipt.ru> | ||||
| 
 | ||||
| 
 | ||||
| Description | ||||
| ----------- | ||||
| 
 | ||||
| w1_therm provides basic temperature conversion for ds18*20 devices. | ||||
| supported family codes: | ||||
| W1_THERM_DS18S20	0x10 | ||||
| W1_THERM_DS1822		0x22 | ||||
| W1_THERM_DS18B20	0x28 | ||||
| 
 | ||||
| Support is provided through the sysfs w1_slave file.  Each open and | ||||
| read sequence will initiate a temperature conversion then provide two | ||||
| lines of ASCII output.  The first line contains the nine hex bytes | ||||
| read along with a calculated crc value and YES or NO if it matched. | ||||
| If the crc matched the returned values are retained.  The second line | ||||
| displays the retained values along with a temperature in millidegrees | ||||
| Centigrade after t=. | ||||
| 
 | ||||
| Parasite powered devices are limited to one slave performing a | ||||
| temperature conversion at a time.  If none of the devices are parasite | ||||
| powered it would be possible to convert all the devices at the same | ||||
| time and then go back to read individual sensors.  That isn't | ||||
| currently supported.  The driver also doesn't support reduced | ||||
| precision (which would also reduce the conversion time). | ||||
| 
 | ||||
| The module parameter strong_pullup can be set to 0 to disable the | ||||
| strong pullup or 1 to enable.  If enabled the 5V strong pullup will be | ||||
| enabled when the conversion is taking place provided the master driver | ||||
| must support the strong pullup (or it falls back to a pullup | ||||
| resistor).  The DS18b20 temperature sensor specification lists a | ||||
| maximum current draw of 1.5mA and that a 5k pullup resistor is not | ||||
| sufficient.  The strong pullup is designed to provide the additional | ||||
| current required. | ||||
| @ -37,6 +37,14 @@ MODULE_LICENSE("GPL"); | ||||
| MODULE_AUTHOR("Evgeniy Polyakov <johnpol@2ka.mipt.ru>"); | ||||
| MODULE_DESCRIPTION("Driver for 1-wire Dallas network protocol, temperature family."); | ||||
| 
 | ||||
| /* Allow the strong pullup to be disabled, but default to enabled.
 | ||||
|  * If it was disabled a parasite powered device might not get the require | ||||
|  * current to do a temperature conversion.  If it is enabled parasite powered | ||||
|  * devices have a better chance of getting the current required. | ||||
|  */ | ||||
| static int w1_strong_pullup = 1; | ||||
| module_param_named(strong_pullup, w1_strong_pullup, int, 0); | ||||
| 
 | ||||
| static u8 bad_roms[][9] = { | ||||
| 				{0xaa, 0x00, 0x4b, 0x46, 0xff, 0xff, 0x0c, 0x10, 0x87}, | ||||
| 				{} | ||||
| @ -192,9 +200,12 @@ static ssize_t w1_therm_read_bin(struct kobject *kobj, | ||||
| 			int count = 0; | ||||
| 			unsigned int tm = 750; | ||||
| 
 | ||||
| 			/* 750ms strong pullup (or delay) after the convert */ | ||||
| 			if (w1_strong_pullup) | ||||
| 				w1_next_pullup(dev, tm); | ||||
| 			w1_write_8(dev, W1_CONVERT_TEMP); | ||||
| 
 | ||||
| 			msleep(tm); | ||||
| 			if (!w1_strong_pullup) | ||||
| 				msleep(tm); | ||||
| 
 | ||||
| 			if (!w1_reset_select_slave(sl)) { | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user