diff options
Diffstat (limited to 'drivers/hwmon/lm78.c')
| -rw-r--r-- | drivers/hwmon/lm78.c | 23 | 
1 files changed, 11 insertions, 12 deletions
diff --git a/drivers/hwmon/lm78.c b/drivers/hwmon/lm78.c index cadcbd90ff3..72ff2c4e757 100644 --- a/drivers/hwmon/lm78.c +++ b/drivers/hwmon/lm78.c @@ -851,17 +851,16 @@ static struct lm78_data *lm78_update_device(struct device *dev)  static int __init lm78_isa_found(unsigned short address)  {  	int val, save, found = 0; +	int port; -	/* We have to request the region in two parts because some -	   boards declare base+4 to base+7 as a PNP device */ -	if (!request_region(address, 4, "lm78")) { -		pr_debug("lm78: Failed to request low part of region\n"); -		return 0; -	} -	if (!request_region(address + 4, 4, "lm78")) { -		pr_debug("lm78: Failed to request high part of region\n"); -		release_region(address, 4); -		return 0; +	/* Some boards declare base+0 to base+7 as a PNP device, some base+4 +	 * to base+7 and some base+5 to base+6. So we better request each port +	 * individually for the probing phase. */ +	for (port = address; port < address + LM78_EXTENT; port++) { +		if (!request_region(port, 1, "lm78")) { +			pr_debug("lm78: Failed to request port 0x%x\n", port); +			goto release; +		}  	}  #define REALLY_SLOW_IO @@ -925,8 +924,8 @@ static int __init lm78_isa_found(unsigned short address)  			val & 0x80 ? "LM79" : "LM78", (int)address);   release: -	release_region(address + 4, 4); -	release_region(address, 4); +	for (port--; port >= address; port--) +		release_region(port, 1);  	return found;  }  |