X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=drivers%2Fi2c%2Fchips%2Fit87.c;h=c7c068b8207120ac69b492c16bc12665fd43799d;hb=44c40f29869a02dd430beb7fed0b6ca7d8ef5e54;hp=36d84634d70e5eb3397f305e2869a9370753887f;hpb=8d40237c730b8be87c1b80a5d96b9c603fefa829;p=linux-2.6.git diff --git a/drivers/i2c/chips/it87.c b/drivers/i2c/chips/it87.c index 36d84634d..c7c068b82 100644 --- a/drivers/i2c/chips/it87.c +++ b/drivers/i2c/chips/it87.c @@ -42,11 +42,10 @@ /* Addresses to scan */ -static unsigned short normal_i2c[] = { 0x20, 0x21, 0x22, 0x23, 0x24, - 0x25, 0x26, 0x27, 0x28, 0x29, - 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, - 0x2f, I2C_CLIENT_END }; +static unsigned short normal_i2c[] = { I2C_CLIENT_END }; +static unsigned short normal_i2c_range[] = { 0x20, 0x2f, I2C_CLIENT_END }; static unsigned int normal_isa[] = { 0x0290, I2C_CLIENT_ISA_END }; +static unsigned int normal_isa_range[] = { I2C_CLIENT_ISA_END }; /* Insmod parameters */ SENSORS_INSMOD_2(it87, it8712); @@ -57,6 +56,13 @@ SENSORS_INSMOD_2(it87, it8712); #define PME 0x04 /* The device with the fan registers in it */ #define DEVID 0x20 /* Register: Device ID */ +static inline void +superio_outb(int reg, int val) +{ + outb(reg, REG); + outb(val, VAL); +} + static inline int superio_inb(int reg) { @@ -99,10 +105,6 @@ static int update_vbat; /* Reset the registers on init if true */ static int reset; -/* Chip Type */ - -static u16 chip_type; - /* Many IT87 constants specified below */ /* Length of ISA address segment */ @@ -224,7 +226,7 @@ static struct i2c_driver it87_driver = { .detach_client = it87_detach_client, }; -static int it87_id; +static int it87_id = 0; static ssize_t show_in(struct device *dev, char *buf, int nr) { @@ -271,7 +273,7 @@ static ssize_t set_in_max(struct device *dev, const char *buf, static ssize_t \ show_in##offset (struct device *dev, char *buf) \ { \ - return show_in(dev, buf, offset); \ + return show_in(dev, buf, 0x##offset); \ } \ static DEVICE_ATTR(in##offset##_input, S_IRUGO, show_in##offset, NULL); @@ -279,22 +281,22 @@ static DEVICE_ATTR(in##offset##_input, S_IRUGO, show_in##offset, NULL); static ssize_t \ show_in##offset##_min (struct device *dev, char *buf) \ { \ - return show_in_min(dev, buf, offset); \ + return show_in_min(dev, buf, 0x##offset); \ } \ static ssize_t \ show_in##offset##_max (struct device *dev, char *buf) \ { \ - return show_in_max(dev, buf, offset); \ + return show_in_max(dev, buf, 0x##offset); \ } \ static ssize_t set_in##offset##_min (struct device *dev, \ const char *buf, size_t count) \ { \ - return set_in_min(dev, buf, count, offset); \ + return set_in_min(dev, buf, count, 0x##offset); \ } \ static ssize_t set_in##offset##_max (struct device *dev, \ const char *buf, size_t count) \ { \ - return set_in_max(dev, buf, count, offset); \ + return set_in_max(dev, buf, count, 0x##offset); \ } \ static DEVICE_ATTR(in##offset##_min, S_IRUGO | S_IWUSR, \ show_in##offset##_min, set_in##offset##_min); \ @@ -358,27 +360,27 @@ static ssize_t set_temp_min(struct device *dev, const char *buf, #define show_temp_offset(offset) \ static ssize_t show_temp_##offset (struct device *dev, char *buf) \ { \ - return show_temp(dev, buf, offset - 1); \ + return show_temp(dev, buf, 0x##offset - 1); \ } \ static ssize_t \ show_temp_##offset##_max (struct device *dev, char *buf) \ { \ - return show_temp_max(dev, buf, offset - 1); \ + return show_temp_max(dev, buf, 0x##offset - 1); \ } \ static ssize_t \ show_temp_##offset##_min (struct device *dev, char *buf) \ { \ - return show_temp_min(dev, buf, offset - 1); \ + return show_temp_min(dev, buf, 0x##offset - 1); \ } \ static ssize_t set_temp_##offset##_max (struct device *dev, \ const char *buf, size_t count) \ { \ - return set_temp_max(dev, buf, count, offset - 1); \ + return set_temp_max(dev, buf, count, 0x##offset - 1); \ } \ static ssize_t set_temp_##offset##_min (struct device *dev, \ const char *buf, size_t count) \ { \ - return set_temp_min(dev, buf, count, offset - 1); \ + return set_temp_min(dev, buf, count, 0x##offset - 1); \ } \ static DEVICE_ATTR(temp##offset##_input, S_IRUGO, show_temp_##offset, NULL); \ static DEVICE_ATTR(temp##offset##_max, S_IRUGO | S_IWUSR, \ @@ -421,12 +423,12 @@ static ssize_t set_sensor(struct device *dev, const char *buf, #define show_sensor_offset(offset) \ static ssize_t show_sensor_##offset (struct device *dev, char *buf) \ { \ - return show_sensor(dev, buf, offset - 1); \ + return show_sensor(dev, buf, 0x##offset - 1); \ } \ static ssize_t set_sensor_##offset (struct device *dev, \ const char *buf, size_t count) \ { \ - return set_sensor(dev, buf, count, offset - 1); \ + return set_sensor(dev, buf, count, 0x##offset - 1); \ } \ static DEVICE_ATTR(temp##offset##_type, S_IRUGO | S_IWUSR, \ show_sensor_##offset, set_sensor_##offset); @@ -503,25 +505,25 @@ static ssize_t set_fan_div(struct device *dev, const char *buf, #define show_fan_offset(offset) \ static ssize_t show_fan_##offset (struct device *dev, char *buf) \ { \ - return show_fan(dev, buf, offset - 1); \ + return show_fan(dev, buf, 0x##offset - 1); \ } \ static ssize_t show_fan_##offset##_min (struct device *dev, char *buf) \ { \ - return show_fan_min(dev, buf, offset - 1); \ + return show_fan_min(dev, buf, 0x##offset - 1); \ } \ static ssize_t show_fan_##offset##_div (struct device *dev, char *buf) \ { \ - return show_fan_div(dev, buf, offset - 1); \ + return show_fan_div(dev, buf, 0x##offset - 1); \ } \ static ssize_t set_fan_##offset##_min (struct device *dev, \ const char *buf, size_t count) \ { \ - return set_fan_min(dev, buf, count, offset - 1); \ + return set_fan_min(dev, buf, count, 0x##offset - 1); \ } \ static ssize_t set_fan_##offset##_div (struct device *dev, \ const char *buf, size_t count) \ { \ - return set_fan_div(dev, buf, count, offset - 1); \ + return set_fan_div(dev, buf, count, 0x##offset - 1); \ } \ static DEVICE_ATTR(fan##offset##_input, S_IRUGO, show_fan_##offset, NULL); \ static DEVICE_ATTR(fan##offset##_min, S_IRUGO | S_IWUSR, \ @@ -590,9 +592,9 @@ static int it87_find(int *address) u16 val; superio_enter(); - chip_type = (superio_inb(DEVID) << 8) | + val = (superio_inb(DEVID) << 8) | superio_inb(DEVID + 1); - if (chip_type != IT8712F_DEVID) { + if (val != IT8712F_DEVID) { superio_exit(); return -ENODEV; } @@ -689,9 +691,11 @@ int it87_detect(struct i2c_adapter *adapter, int address, int kind) if (kind <= 0) { i = it87_read_value(new_client, IT87_REG_CHIPID); if (i == 0x90) { + u16 val; kind = it87; - if ((is_isa) && (chip_type == IT8712F_DEVID)) - kind = it8712; + val = (superio_inb(DEVID) << 8) | + superio_inb(DEVID + 1); + if (val == IT8712F_DEVID) kind = it8712; } else { if (kind == 0)