This commit was manufactured by cvs2svn to create tag
[linux-2.6.git] / drivers / i2c / chips / it87.c
index 36d8463..c7c068b 100644 (file)
 
 
 /* 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)