|
@@ -655,7 +655,7 @@ static int __devinit lm78_isa_probe(struct platform_device *pdev)
|
|
|
|
|
|
/* Reserve the ISA region */
|
|
|
res = platform_get_resource(pdev, IORESOURCE_IO, 0);
|
|
|
- if (!request_region(res->start, LM78_EXTENT, "lm78")) {
|
|
|
+ if (!request_region(res->start + LM78_ADDR_REG_OFFSET, 2, "lm78")) {
|
|
|
err = -EBUSY;
|
|
|
goto exit;
|
|
|
}
|
|
@@ -699,7 +699,7 @@ static int __devinit lm78_isa_probe(struct platform_device *pdev)
|
|
|
device_remove_file(&pdev->dev, &dev_attr_name);
|
|
|
kfree(data);
|
|
|
exit_release_region:
|
|
|
- release_region(res->start, LM78_EXTENT);
|
|
|
+ release_region(res->start + LM78_ADDR_REG_OFFSET, 2);
|
|
|
exit:
|
|
|
return err;
|
|
|
}
|
|
@@ -711,7 +711,7 @@ static int __devexit lm78_isa_remove(struct platform_device *pdev)
|
|
|
hwmon_device_unregister(data->hwmon_dev);
|
|
|
sysfs_remove_group(&pdev->dev.kobj, &lm78_group);
|
|
|
device_remove_file(&pdev->dev, &dev_attr_name);
|
|
|
- release_region(data->client.addr, LM78_EXTENT);
|
|
|
+ release_region(data->client.addr + LM78_ADDR_REG_OFFSET, 2);
|
|
|
kfree(data);
|
|
|
|
|
|
return 0;
|
|
@@ -837,8 +837,17 @@ static int __init lm78_isa_found(unsigned short address)
|
|
|
{
|
|
|
int val, save, found = 0;
|
|
|
|
|
|
- if (!request_region(address, LM78_EXTENT, "lm78"))
|
|
|
+ /* 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;
|
|
|
+ }
|
|
|
|
|
|
#define REALLY_SLOW_IO
|
|
|
/* We need the timeouts for at least some LM78-like
|
|
@@ -901,7 +910,8 @@ static int __init lm78_isa_found(unsigned short address)
|
|
|
val & 0x80 ? "LM79" : "LM78", (int)address);
|
|
|
|
|
|
release:
|
|
|
- release_region(address, LM78_EXTENT);
|
|
|
+ release_region(address + 4, 4);
|
|
|
+ release_region(address, 4);
|
|
|
return found;
|
|
|
}
|
|
|
|