It seems the device names have changed for the fan and thermostat i2c devices.

This patch addresses 3 issues with the therm_windtunnel driver.

1. Fix the device names
2. Remove the deprecated attach_adapter method of loading the driver
3. Expose the fan level setting to /sys/devices/temperature (along with 
temperatures)

I am not a kernel developer so have no clue as to how to get this patch 
incorporated into the kernel tree. Hope someone on here can hall.

Regards
Bryan

--- ../therm_windtunnel.c.orig  2014-03-21 09:18:31.608173741 +1300
+++ therm_windtunnel.c  2014-03-21 09:55:39.165486409 +1300
@@ -107,8 +107,15 @@ show_case_temperature( struct device *de
        return sprintf(buf, "%d.%d\n", x.casetemp>>8, (x.casetemp & 255)*10/256 
);
 }
 
+static ssize_t
+show_fan_level( struct device *dev, struct device_attribute *attr, char *buf )
+{
+       return sprintf(buf, "%d\n", 11 - x.fan_level );
+}
+
 static DEVICE_ATTR(cpu_temperature, S_IRUGO, show_cpu_temperature, NULL );
 static DEVICE_ATTR(case_temperature, S_IRUGO, show_case_temperature, NULL );
+static DEVICE_ATTR(fan_level, S_IRUGO, show_fan_level, NULL );
 
 
 
@@ -254,6 +261,7 @@ setup_hardware( void )
 
        err = device_create_file( &x.of_dev->dev, &dev_attr_cpu_temperature );
        err |= device_create_file( &x.of_dev->dev, &dev_attr_case_temperature );
+       err |= device_create_file( &x.of_dev->dev, &dev_attr_fan_level );
        if (err)
                printk(KERN_WARNING
                        "Failed to create temperature attribute file(s).\n");
@@ -264,6 +272,7 @@ restore_regs( void )
 {
        device_remove_file( &x.of_dev->dev, &dev_attr_cpu_temperature );
        device_remove_file( &x.of_dev->dev, &dev_attr_case_temperature );
+       device_remove_file( &x.of_dev->dev, &dev_attr_fan_level );
 
        write_reg( x.fan, 0x01, x.r1, 1 );
        write_reg( x.fan, 0x20, x.r20, 1 );
@@ -301,40 +310,6 @@ static int control_loop(void *dummy)
 /************************************************************************/
 
 static int
-do_attach( struct i2c_adapter *adapter )
-{
-       /* scan 0x48-0x4f (DS1775) and 0x2c-2x2f (ADM1030) */
-       static const unsigned short scan_ds1775[] = {
-               0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
-               I2C_CLIENT_END
-       };
-       static const unsigned short scan_adm1030[] = {
-               0x2c, 0x2d, 0x2e, 0x2f,
-               I2C_CLIENT_END
-       };
-
-       if( strncmp(adapter->name, "uni-n", 5) )
-               return 0;
-
-       if( !x.running ) {
-               struct i2c_board_info info;
-
-               memset(&info, 0, sizeof(struct i2c_board_info));
-               strlcpy(info.type, "therm_ds1775", I2C_NAME_SIZE);
-               i2c_new_probed_device(adapter, &info, scan_ds1775, NULL);
-
-               strlcpy(info.type, "therm_adm1030", I2C_NAME_SIZE);
-               i2c_new_probed_device(adapter, &info, scan_adm1030, NULL);
-
-               if( x.thermostat && x.fan ) {
-                       x.running = 1;
-                       x.poll_task = kthread_run(control_loop, NULL, "g4fand");
-               }
-       }
-       return 0;
-}
-
-static int
 do_remove(struct i2c_client *client)
 {
        if (x.running) {
@@ -404,8 +379,8 @@ out:
 enum chip { ds1775, adm1030 };
 
 static const struct i2c_device_id therm_windtunnel_id[] = {
-       { "therm_ds1775", ds1775 },
-       { "therm_adm1030", adm1030 },
+       { "MAC,ds1775", ds1775 },
+       { "MAC,adm1030", adm1030 },
        { }
 };
 
@@ -420,9 +395,15 @@ do_probe(struct i2c_client *cl, const st
 
        switch (id->driver_data) {
        case adm1030:
-               return attach_fan( cl );
+               attach_fan( cl );
+               break;
        case ds1775:
-               return attach_thermostat(cl);
+               attach_thermostat(cl);
+               break;
+       }
+       if( !x.running && x.thermostat && x.fan ) {
+               x.running = 1;
+               x.poll_task = kthread_run(control_loop, NULL, "g4fand");
        }
        return 0;
 }
@@ -431,7 +412,6 @@ static struct i2c_driver g4fan_driver =
        .driver = {
                .name   = "therm_windtunnel",
        },
-       .attach_adapter = do_attach,
        .probe          = do_probe,
        .remove         = do_remove,
        .id_table       = therm_windtunnel_id,

Attachment: signature.asc
Description: Message signed with OpenPGP using GPGMail

Reply via email to