]> err.no Git - linux-2.6/blobdiff - drivers/hwmon/it87.c
V4L/DVB (3502): Saa7134: make unsupported secondary decoder message generic
[linux-2.6] / drivers / hwmon / it87.c
index 6c41e25e670be0235c34a9fb0fce027da6df6d72..d7a9401600bb968ec3f81435734b2f0f618a4284 100644 (file)
@@ -45,8 +45,7 @@
 
 
 /* Addresses to scan */
-static unsigned short normal_i2c[] = { 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d,
-                                       0x2e, 0x2f, I2C_CLIENT_END };
+static unsigned short normal_i2c[] = { 0x2d, I2C_CLIENT_END };
 static unsigned short isa_address;
 
 /* Insmod parameters */
@@ -213,7 +212,7 @@ struct it87_data {
        u8 sensor;              /* Register value */
        u8 fan_div[3];          /* Register encoding, shifted right */
        u8 vid;                 /* Register encoding, combined */
-       int vrm;
+       u8 vrm;
        u32 alarms;             /* Register encoding, combined */
        u8 fan_main_ctrl;       /* Register value */
        u8 manual_pwm_ctl[3];   /* manual PWM value set by user */
@@ -234,17 +233,18 @@ static void it87_init_client(struct i2c_client *client, struct it87_data *data);
 
 
 static struct i2c_driver it87_driver = {
-       .owner          = THIS_MODULE,
-       .name           = "it87",
+       .driver = {
+               .name   = "it87",
+       },
        .id             = I2C_DRIVERID_IT87,
-       .flags          = I2C_DF_NOTIFY,
        .attach_adapter = it87_attach_adapter,
        .detach_client  = it87_detach_client,
 };
 
 static struct i2c_driver it87_isa_driver = {
-       .owner          = THIS_MODULE,
-       .name           = "it87-isa",
+       .driver = {
+               .name   = "it87-isa",
+       },
        .attach_adapter = it87_isa_attach_adapter,
        .detach_client  = it87_detach_client,
 };
@@ -522,8 +522,15 @@ static ssize_t set_fan_min(struct device *dev, struct device_attribute *attr,
        struct i2c_client *client = to_i2c_client(dev);
        struct it87_data *data = i2c_get_clientdata(client);
        int val = simple_strtol(buf, NULL, 10);
+       u8 reg = it87_read_value(client, IT87_REG_FAN_DIV);
 
        down(&data->update_lock);
+       switch (nr) {
+       case 0: data->fan_div[nr] = reg & 0x07; break;
+       case 1: data->fan_div[nr] = (reg >> 3) & 0x07; break;
+       case 2: data->fan_div[nr] = (reg & 0x40) ? 3 : 1; break;
+       }
+
        data->fan_min[nr] = FAN_TO_REG(val, DIV_FROM_REG(data->fan_div[nr]));
        it87_write_value(client, IT87_REG_FAN_MIN(nr), data->fan_min[nr]);
        up(&data->update_lock);
@@ -661,7 +668,7 @@ static ssize_t
 show_vrm_reg(struct device *dev, struct device_attribute *attr, char *buf)
 {
        struct it87_data *data = it87_update_device(dev);
-       return sprintf(buf, "%ld\n", (long) data->vrm);
+       return sprintf(buf, "%u\n", data->vrm);
 }
 static ssize_t
 store_vrm_reg(struct device *dev, struct device_attribute *attr, const char *buf, size_t count)
@@ -754,7 +761,8 @@ static int it87_detect(struct i2c_adapter *adapter, int address, int kind)
 
        /* Reserve the ISA region */
        if (is_isa)
-               if (!request_region(address, IT87_EXTENT, it87_isa_driver.name))
+               if (!request_region(address, IT87_EXTENT,
+                                   it87_isa_driver.driver.name))
                        goto ERROR0;
 
        /* For now, we presume we have a valid client. We create the
@@ -821,6 +829,11 @@ static int it87_detect(struct i2c_adapter *adapter, int address, int kind)
        if ((err = i2c_attach_client(new_client)))
                goto ERROR2;
 
+       if (!is_isa)
+               dev_info(&new_client->dev, "The I2C interface to IT87xxF "
+                        "hardware monitoring chips is deprecated. Please "
+                        "report if you still rely on it.\n");
+
        /* Check PWM configuration */
        enable_pwm_interface = it87_check_pwm(new_client);
 
@@ -1173,7 +1186,8 @@ static int __init sm_it87_init(void)
 
 static void __exit sm_it87_exit(void)
 {
-       i2c_isa_del_driver(&it87_isa_driver);
+       if (isa_address)
+               i2c_isa_del_driver(&it87_isa_driver);
        i2c_del_driver(&it87_driver);
 }