diff options
Diffstat (limited to 'drivers/hwmon/w83627ehf.c')
-rw-r--r-- | drivers/hwmon/w83627ehf.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/drivers/hwmon/w83627ehf.c b/drivers/hwmon/w83627ehf.c index b60efe8f8b26..685eeb766809 100644 --- a/drivers/hwmon/w83627ehf.c +++ b/drivers/hwmon/w83627ehf.c | |||
@@ -105,7 +105,9 @@ superio_exit(void) | |||
105 | * ISA constants | 105 | * ISA constants |
106 | */ | 106 | */ |
107 | 107 | ||
108 | #define REGION_LENGTH 8 | 108 | #define REGION_ALIGNMENT ~7 |
109 | #define REGION_OFFSET 5 | ||
110 | #define REGION_LENGTH 2 | ||
109 | #define ADDR_REG_OFFSET 5 | 111 | #define ADDR_REG_OFFSET 5 |
110 | #define DATA_REG_OFFSET 6 | 112 | #define DATA_REG_OFFSET 6 |
111 | 113 | ||
@@ -673,7 +675,8 @@ static int w83627ehf_detect(struct i2c_adapter *adapter) | |||
673 | struct w83627ehf_data *data; | 675 | struct w83627ehf_data *data; |
674 | int i, err = 0; | 676 | int i, err = 0; |
675 | 677 | ||
676 | if (!request_region(address, REGION_LENGTH, w83627ehf_driver.name)) { | 678 | if (!request_region(address + REGION_OFFSET, REGION_LENGTH, |
679 | w83627ehf_driver.name)) { | ||
677 | err = -EBUSY; | 680 | err = -EBUSY; |
678 | goto exit; | 681 | goto exit; |
679 | } | 682 | } |
@@ -762,7 +765,7 @@ exit_detach: | |||
762 | exit_free: | 765 | exit_free: |
763 | kfree(data); | 766 | kfree(data); |
764 | exit_release: | 767 | exit_release: |
765 | release_region(address, REGION_LENGTH); | 768 | release_region(address + REGION_OFFSET, REGION_LENGTH); |
766 | exit: | 769 | exit: |
767 | return err; | 770 | return err; |
768 | } | 771 | } |
@@ -776,7 +779,7 @@ static int w83627ehf_detach_client(struct i2c_client *client) | |||
776 | 779 | ||
777 | if ((err = i2c_detach_client(client))) | 780 | if ((err = i2c_detach_client(client))) |
778 | return err; | 781 | return err; |
779 | release_region(client->addr, REGION_LENGTH); | 782 | release_region(client->addr + REGION_OFFSET, REGION_LENGTH); |
780 | kfree(data); | 783 | kfree(data); |
781 | 784 | ||
782 | return 0; | 785 | return 0; |
@@ -807,7 +810,7 @@ static int __init w83627ehf_find(int sioaddr, unsigned short *addr) | |||
807 | superio_select(W83627EHF_LD_HWM); | 810 | superio_select(W83627EHF_LD_HWM); |
808 | val = (superio_inb(SIO_REG_ADDR) << 8) | 811 | val = (superio_inb(SIO_REG_ADDR) << 8) |
809 | | superio_inb(SIO_REG_ADDR + 1); | 812 | | superio_inb(SIO_REG_ADDR + 1); |
810 | *addr = val & ~(REGION_LENGTH - 1); | 813 | *addr = val & REGION_ALIGNMENT; |
811 | if (*addr == 0) { | 814 | if (*addr == 0) { |
812 | superio_exit(); | 815 | superio_exit(); |
813 | return -ENODEV; | 816 | return -ENODEV; |