}
 
 #define show_and_set_fan(offset) \
-static ssize_t show_fan##offset##_input(struct device *dev, char *buf) \
+static ssize_t show_fan##offset##_input(struct device *dev, struct device_attribute *attr, char *buf) \
 { \
        struct pc87360_data *data = pc87360_update_device(dev); \
        return sprintf(buf, "%u\n", FAN_FROM_REG(data->fan[offset-1], \
                       FAN_DIV_FROM_REG(data->fan_status[offset-1]))); \
 } \
-static ssize_t show_fan##offset##_min(struct device *dev, char *buf) \
+static ssize_t show_fan##offset##_min(struct device *dev, struct device_attribute *attr, char *buf) \
 { \
        struct pc87360_data *data = pc87360_update_device(dev); \
        return sprintf(buf, "%u\n", FAN_FROM_REG(data->fan_min[offset-1], \
                       FAN_DIV_FROM_REG(data->fan_status[offset-1]))); \
 } \
-static ssize_t show_fan##offset##_div(struct device *dev, char *buf) \
+static ssize_t show_fan##offset##_div(struct device *dev, struct device_attribute *attr, char *buf) \
 { \
        struct pc87360_data *data = pc87360_update_device(dev); \
        return sprintf(buf, "%u\n", \
                       FAN_DIV_FROM_REG(data->fan_status[offset-1])); \
 } \
-static ssize_t show_fan##offset##_status(struct device *dev, char *buf) \
+static ssize_t show_fan##offset##_status(struct device *dev, struct device_attribute *attr, char *buf) \
 { \
        struct pc87360_data *data = pc87360_update_device(dev); \
        return sprintf(buf, "%u\n", \
                       FAN_STATUS_FROM_REG(data->fan_status[offset-1])); \
 } \
-static ssize_t set_fan##offset##_min(struct device *dev, const char *buf, \
+static ssize_t set_fan##offset##_min(struct device *dev, struct device_attribute *attr, const char *buf, \
        size_t count) \
 { \
        return set_fan_min(dev, buf, count, offset-1); \
 show_and_set_fan(3)
 
 #define show_and_set_pwm(offset) \
-static ssize_t show_pwm##offset(struct device *dev, char *buf) \
+static ssize_t show_pwm##offset(struct device *dev, struct device_attribute *attr, char *buf) \
 { \
        struct pc87360_data *data = pc87360_update_device(dev); \
        return sprintf(buf, "%u\n", \
                                    FAN_CONFIG_INVERT(data->fan_conf, \
                                                      offset-1))); \
 } \
-static ssize_t set_pwm##offset(struct device *dev, const char *buf, \
+static ssize_t set_pwm##offset(struct device *dev, struct device_attribute *attr, const char *buf, \
        size_t count) \
 { \
        struct i2c_client *client = to_i2c_client(dev); \
 show_and_set_pwm(3)
 
 #define show_and_set_in(offset) \
-static ssize_t show_in##offset##_input(struct device *dev, char *buf) \
+static ssize_t show_in##offset##_input(struct device *dev, struct device_attribute *attr, char *buf) \
 { \
        struct pc87360_data *data = pc87360_update_device(dev); \
        return sprintf(buf, "%u\n", IN_FROM_REG(data->in[offset], \
                       data->in_vref)); \
 } \
-static ssize_t show_in##offset##_min(struct device *dev, char *buf) \
+static ssize_t show_in##offset##_min(struct device *dev, struct device_attribute *attr, char *buf) \
 { \
        struct pc87360_data *data = pc87360_update_device(dev); \
        return sprintf(buf, "%u\n", IN_FROM_REG(data->in_min[offset], \
                       data->in_vref)); \
 } \
-static ssize_t show_in##offset##_max(struct device *dev, char *buf) \
+static ssize_t show_in##offset##_max(struct device *dev, struct device_attribute *attr, char *buf) \
 { \
        struct pc87360_data *data = pc87360_update_device(dev); \
        return sprintf(buf, "%u\n", IN_FROM_REG(data->in_max[offset], \
                       data->in_vref)); \
 } \
-static ssize_t show_in##offset##_status(struct device *dev, char *buf) \
+static ssize_t show_in##offset##_status(struct device *dev, struct device_attribute *attr, char *buf) \
 { \
        struct pc87360_data *data = pc87360_update_device(dev); \
        return sprintf(buf, "%u\n", data->in_status[offset]); \
 } \
-static ssize_t set_in##offset##_min(struct device *dev, const char *buf, \
+static ssize_t set_in##offset##_min(struct device *dev, struct device_attribute *attr, const char *buf, \
        size_t count) \
 { \
        struct i2c_client *client = to_i2c_client(dev); \
        up(&data->update_lock); \
        return count; \
 } \
-static ssize_t set_in##offset##_max(struct device *dev, const char *buf, \
+static ssize_t set_in##offset##_max(struct device *dev, struct device_attribute *attr, const char *buf, \
        size_t count) \
 { \
        struct i2c_client *client = to_i2c_client(dev); \
 show_and_set_in(10)
 
 #define show_and_set_therm(offset) \
-static ssize_t show_temp##offset##_input(struct device *dev, char *buf) \
+static ssize_t show_temp##offset##_input(struct device *dev, struct device_attribute *attr, char *buf) \
 { \
        struct pc87360_data *data = pc87360_update_device(dev); \
        return sprintf(buf, "%u\n", IN_FROM_REG(data->in[offset+7], \
                       data->in_vref)); \
 } \
-static ssize_t show_temp##offset##_min(struct device *dev, char *buf) \
+static ssize_t show_temp##offset##_min(struct device *dev, struct device_attribute *attr, char *buf) \
 { \
        struct pc87360_data *data = pc87360_update_device(dev); \
        return sprintf(buf, "%u\n", IN_FROM_REG(data->in_min[offset+7], \
                       data->in_vref)); \
 } \
-static ssize_t show_temp##offset##_max(struct device *dev, char *buf) \
+static ssize_t show_temp##offset##_max(struct device *dev, struct device_attribute *attr, char *buf) \
 { \
        struct pc87360_data *data = pc87360_update_device(dev); \
        return sprintf(buf, "%u\n", IN_FROM_REG(data->in_max[offset+7], \
                       data->in_vref)); \
 } \
-static ssize_t show_temp##offset##_crit(struct device *dev, char *buf) \
+static ssize_t show_temp##offset##_crit(struct device *dev, struct device_attribute *attr, char *buf) \
 { \
        struct pc87360_data *data = pc87360_update_device(dev); \
        return sprintf(buf, "%u\n", IN_FROM_REG(data->in_crit[offset-4], \
                       data->in_vref)); \
 } \
-static ssize_t show_temp##offset##_status(struct device *dev, char *buf) \
+static ssize_t show_temp##offset##_status(struct device *dev, struct device_attribute *attr, char *buf) \
 { \
        struct pc87360_data *data = pc87360_update_device(dev); \
        return sprintf(buf, "%u\n", data->in_status[offset+7]); \
 } \
-static ssize_t set_temp##offset##_min(struct device *dev, const char *buf, \
+static ssize_t set_temp##offset##_min(struct device *dev, struct device_attribute *attr, const char *buf, \
        size_t count) \
 { \
        struct i2c_client *client = to_i2c_client(dev); \
        up(&data->update_lock); \
        return count; \
 } \
-static ssize_t set_temp##offset##_max(struct device *dev, const char *buf, \
+static ssize_t set_temp##offset##_max(struct device *dev, struct device_attribute *attr, const char *buf, \
        size_t count) \
 { \
        struct i2c_client *client = to_i2c_client(dev); \
        up(&data->update_lock); \
        return count; \
 } \
-static ssize_t set_temp##offset##_crit(struct device *dev, const char *buf, \
+static ssize_t set_temp##offset##_crit(struct device *dev, struct device_attribute *attr, const char *buf, \
        size_t count) \
 { \
        struct i2c_client *client = to_i2c_client(dev); \
 show_and_set_therm(5)
 show_and_set_therm(6)
 
-static ssize_t show_vid(struct device *dev, char *buf)
+static ssize_t show_vid(struct device *dev, struct device_attribute *attr, char *buf)
 {
        struct pc87360_data *data = pc87360_update_device(dev);
        return sprintf(buf, "%u\n", vid_from_reg(data->vid, data->vrm));
 }
 static DEVICE_ATTR(cpu0_vid, S_IRUGO, show_vid, NULL);
 
-static ssize_t show_vrm(struct device *dev, char *buf)
+static ssize_t show_vrm(struct device *dev, struct device_attribute *attr, char *buf)
 {
        struct pc87360_data *data = pc87360_update_device(dev);
        return sprintf(buf, "%u\n", data->vrm);
 }
-static ssize_t set_vrm(struct device *dev, const char *buf, size_t count)
+static ssize_t set_vrm(struct device *dev, struct device_attribute *attr, const char *buf, size_t count)
 {
        struct i2c_client *client = to_i2c_client(dev);
        struct pc87360_data *data = i2c_get_clientdata(client);
 }
 static DEVICE_ATTR(vrm, S_IRUGO | S_IWUSR, show_vrm, set_vrm);
 
-static ssize_t show_in_alarms(struct device *dev, char *buf)
+static ssize_t show_in_alarms(struct device *dev, struct device_attribute *attr, char *buf)
 {
        struct pc87360_data *data = pc87360_update_device(dev);
        return sprintf(buf, "%u\n", data->in_alarms);
 static DEVICE_ATTR(alarms_in, S_IRUGO, show_in_alarms, NULL);
 
 #define show_and_set_temp(offset) \
-static ssize_t show_temp##offset##_input(struct device *dev, char *buf) \
+static ssize_t show_temp##offset##_input(struct device *dev, struct device_attribute *attr, char *buf) \
 { \
        struct pc87360_data *data = pc87360_update_device(dev); \
        return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp[offset-1])); \
 } \
-static ssize_t show_temp##offset##_min(struct device *dev, char *buf) \
+static ssize_t show_temp##offset##_min(struct device *dev, struct device_attribute *attr, char *buf) \
 { \
        struct pc87360_data *data = pc87360_update_device(dev); \
        return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_min[offset-1])); \
 } \
-static ssize_t show_temp##offset##_max(struct device *dev, char *buf) \
+static ssize_t show_temp##offset##_max(struct device *dev, struct device_attribute *attr, char *buf) \
 { \
        struct pc87360_data *data = pc87360_update_device(dev); \
        return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_max[offset-1])); \
 }\
-static ssize_t show_temp##offset##_crit(struct device *dev, char *buf) \
+static ssize_t show_temp##offset##_crit(struct device *dev, struct device_attribute *attr, char *buf) \
 { \
        struct pc87360_data *data = pc87360_update_device(dev); \
        return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_crit[offset-1])); \
 }\
-static ssize_t show_temp##offset##_status(struct device *dev, char *buf) \
+static ssize_t show_temp##offset##_status(struct device *dev, struct device_attribute *attr, char *buf) \
 { \
        struct pc87360_data *data = pc87360_update_device(dev); \
        return sprintf(buf, "%d\n", data->temp_status[offset-1]); \
 }\
-static ssize_t set_temp##offset##_min(struct device *dev, const char *buf, \
+static ssize_t set_temp##offset##_min(struct device *dev, struct device_attribute *attr, const char *buf, \
        size_t count) \
 { \
        struct i2c_client *client = to_i2c_client(dev); \
        up(&data->update_lock); \
        return count; \
 } \
-static ssize_t set_temp##offset##_max(struct device *dev, const char *buf, \
+static ssize_t set_temp##offset##_max(struct device *dev, struct device_attribute *attr, const char *buf, \
        size_t count) \
 { \
        struct i2c_client *client = to_i2c_client(dev); \
        up(&data->update_lock); \
        return count; \
 } \
-static ssize_t set_temp##offset##_crit(struct device *dev, const char *buf, \
+static ssize_t set_temp##offset##_crit(struct device *dev, struct device_attribute *attr, const char *buf, \
        size_t count) \
 { \
        struct i2c_client *client = to_i2c_client(dev); \
 show_and_set_temp(2)
 show_and_set_temp(3)
 
-static ssize_t show_temp_alarms(struct device *dev, char *buf)
+static ssize_t show_temp_alarms(struct device *dev, struct device_attribute *attr, char *buf)
 {
        struct pc87360_data *data = pc87360_update_device(dev);
        return sprintf(buf, "%u\n", data->temp_alarms);
 
 };
 
 /* following are the sysfs callback functions */
-static ssize_t show_read(struct device *dev, char *buf)
+static ssize_t show_read(struct device *dev, struct device_attribute *attr, char *buf)
 {
        struct i2c_client *client = to_i2c_client(dev);
        struct pcf8574_data *data = i2c_get_clientdata(client);
 
 static DEVICE_ATTR(read, S_IRUGO, show_read, NULL);
 
-static ssize_t show_write(struct device *dev, char *buf)
+static ssize_t show_write(struct device *dev, struct device_attribute *attr, char *buf)
 {
        struct pcf8574_data *data = i2c_get_clientdata(to_i2c_client(dev));
        return sprintf(buf, "%u\n", data->write);
 }
 
-static ssize_t set_write(struct device *dev, const char *buf,
+static ssize_t set_write(struct device *dev, struct device_attribute *attr, const char *buf,
                         size_t count)
 {
        struct i2c_client *client = to_i2c_client(dev);
 
 
 /* following are the sysfs callback functions */
 #define show_in_channel(channel)                                       \
-static ssize_t show_in##channel##_input(struct device *dev, char *buf) \
+static ssize_t show_in##channel##_input(struct device *dev, struct device_attribute *attr, char *buf)  \
 {                                                                      \
        return sprintf(buf, "%d\n", pcf8591_read_channel(dev, channel));\
 }                                                                      \
 show_in_channel(2);
 show_in_channel(3);
 
-static ssize_t show_out0_ouput(struct device *dev, char *buf)
+static ssize_t show_out0_ouput(struct device *dev, struct device_attribute *attr, char *buf)
 {
        struct pcf8591_data *data = i2c_get_clientdata(to_i2c_client(dev));
        return sprintf(buf, "%d\n", data->aout * 10);
 }
 
-static ssize_t set_out0_output(struct device *dev, const char *buf, size_t count)
+static ssize_t set_out0_output(struct device *dev, struct device_attribute *attr, const char *buf, size_t count)
 {
        unsigned int value;
        struct i2c_client *client = to_i2c_client(dev);
 static DEVICE_ATTR(out0_output, S_IWUSR | S_IRUGO, 
                   show_out0_ouput, set_out0_output);
 
-static ssize_t show_out0_enable(struct device *dev, char *buf)
+static ssize_t show_out0_enable(struct device *dev, struct device_attribute *attr, char *buf)
 {
        struct pcf8591_data *data = i2c_get_clientdata(to_i2c_client(dev));
        return sprintf(buf, "%u\n", !(!(data->control & PCF8591_CONTROL_AOEF)));
 }
 
-static ssize_t set_out0_enable(struct device *dev, const char *buf, size_t count)
+static ssize_t set_out0_enable(struct device *dev, struct device_attribute *attr, const char *buf, size_t count)
 {
        struct i2c_client *client = to_i2c_client(dev);
        struct pcf8591_data *data = i2c_get_clientdata(client);
 
 
 #define show_in_offset(offset)                                 \
 static ssize_t                                                 \
-       show_in##offset (struct device *dev, char *buf)         \
+       show_in##offset (struct device *dev, struct device_attribute *attr, char *buf)          \
 {                                                              \
        return show_in(dev, buf, offset);                       \
 }                                                              \
 static DEVICE_ATTR(in##offset##_input, S_IRUGO,                \
                show_in##offset, NULL);                         \
 static ssize_t                                                 \
-       show_in##offset##_min (struct device *dev, char *buf)   \
+       show_in##offset##_min (struct device *dev, struct device_attribute *attr, char *buf)    \
 {                                                              \
        return show_in_min(dev, buf, offset);                   \
 }                                                              \
 static ssize_t                                                 \
-       show_in##offset##_max (struct device *dev, char *buf)   \
+       show_in##offset##_max (struct device *dev, struct device_attribute *attr, char *buf)    \
 {                                                              \
        return show_in_max(dev, buf, offset);                   \
 }                                                              \
-static ssize_t set_in##offset##_min (struct device *dev,       \
+static ssize_t set_in##offset##_min (struct device *dev, struct device_attribute *attr,        \
                const char *buf, size_t count)                  \
 {                                                              \
        return set_in_min(dev, buf, count, offset);             \
 }                                                              \
-static ssize_t set_in##offset##_max (struct device *dev,       \
+static ssize_t set_in##offset##_max (struct device *dev, struct device_attribute *attr,        \
                const char *buf, size_t count)                  \
 {                                                              \
        return set_in_max(dev, buf, count, offset);             \
 show_in_offset(4);
 
 /* Temperature */
-static ssize_t show_temp(struct device *dev, char *buf)
+static ssize_t show_temp(struct device *dev, struct device_attribute *attr, char *buf)
 {
        struct sis5595_data *data = sis5595_update_device(dev);
        return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp));
 }
 
-static ssize_t show_temp_over(struct device *dev, char *buf)
+static ssize_t show_temp_over(struct device *dev, struct device_attribute *attr, char *buf)
 {
        struct sis5595_data *data = sis5595_update_device(dev);
        return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_over));
 }
 
-static ssize_t set_temp_over(struct device *dev, const char *buf, size_t count)
+static ssize_t set_temp_over(struct device *dev, struct device_attribute *attr, const char *buf, size_t count)
 {
        struct i2c_client *client = to_i2c_client(dev);
        struct sis5595_data *data = i2c_get_clientdata(client);
        return count;
 }
 
-static ssize_t show_temp_hyst(struct device *dev, char *buf)
+static ssize_t show_temp_hyst(struct device *dev, struct device_attribute *attr, char *buf)
 {
        struct sis5595_data *data = sis5595_update_device(dev);
        return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_hyst));
 }
 
-static ssize_t set_temp_hyst(struct device *dev, const char *buf, size_t count)
+static ssize_t set_temp_hyst(struct device *dev, struct device_attribute *attr, const char *buf, size_t count)
 {
        struct i2c_client *client = to_i2c_client(dev);
        struct sis5595_data *data = i2c_get_clientdata(client);
 }
 
 #define show_fan_offset(offset)                                                \
-static ssize_t show_fan_##offset (struct device *dev, char *buf)       \
+static ssize_t show_fan_##offset (struct device *dev, struct device_attribute *attr, char *buf)        \
 {                                                                      \
        return show_fan(dev, buf, offset - 1);                  \
 }                                                                      \
-static ssize_t show_fan_##offset##_min (struct device *dev, char *buf) \
+static ssize_t show_fan_##offset##_min (struct device *dev, struct device_attribute *attr, char *buf)  \
 {                                                                      \
        return show_fan_min(dev, buf, offset - 1);                      \
 }                                                                      \
-static ssize_t show_fan_##offset##_div (struct device *dev, char *buf) \
+static ssize_t show_fan_##offset##_div (struct device *dev, struct device_attribute *attr, char *buf)  \
 {                                                                      \
        return show_fan_div(dev, buf, offset - 1);                      \
 }                                                                      \
-static ssize_t set_fan_##offset##_min (struct device *dev,             \
+static ssize_t set_fan_##offset##_min (struct device *dev, struct device_attribute *attr,              \
                const char *buf, size_t count)                          \
 {                                                                      \
        return set_fan_min(dev, buf, count, offset - 1);                \
 show_fan_offset(1);
 show_fan_offset(2);
 
-static ssize_t set_fan_1_div(struct device *dev, const char *buf,
+static ssize_t set_fan_1_div(struct device *dev, struct device_attribute *attr, const char *buf,
                size_t count)
 {
        return set_fan_div(dev, buf, count, 0) ;
 }
 
-static ssize_t set_fan_2_div(struct device *dev, const char *buf,
+static ssize_t set_fan_2_div(struct device *dev, struct device_attribute *attr, const char *buf,
                size_t count)
 {
        return set_fan_div(dev, buf, count, 1) ;
                show_fan_2_div, set_fan_2_div);
 
 /* Alarms */
-static ssize_t show_alarms(struct device *dev, char *buf)
+static ssize_t show_alarms(struct device *dev, struct device_attribute *attr, char *buf)
 {
        struct sis5595_data *data = sis5595_update_device(dev);
        return sprintf(buf, "%d\n", data->alarms);
 
 }
 
 #define sysfs_temp(num) \
-static ssize_t show_temp##num(struct device *dev, char *buf) \
+static ssize_t show_temp##num(struct device *dev, struct device_attribute *attr, char *buf) \
 { \
        return show_temp(dev, buf, num-1); \
 } \
 }
 
 #define sysfs_fan(num) \
-static ssize_t show_fan##num(struct device *dev, char *buf) \
+static ssize_t show_fan##num(struct device *dev, struct device_attribute *attr, char *buf) \
 { \
        return show_fan(dev, buf, num-1); \
 } \
 
        return sprintf(buf, "%d\n", PWM_EN_FROM_REG(data->pwm[nr]));
 }
 
-static ssize_t get_alarms(struct device *dev, char *buf)
+static ssize_t get_alarms(struct device *dev, struct device_attribute *attr, char *buf)
 {
        struct smsc47m1_data *data = smsc47m1_update_device(dev, 0);
        return sprintf(buf, "%d\n", data->alarms);
 }
 
 #define fan_present(offset)                                            \
-static ssize_t get_fan##offset (struct device *dev, char *buf)         \
+static ssize_t get_fan##offset (struct device *dev, struct device_attribute *attr, char *buf)          \
 {                                                                      \
        return get_fan(dev, buf, offset - 1);                           \
 }                                                                      \
-static ssize_t get_fan##offset##_min (struct device *dev, char *buf)   \
+static ssize_t get_fan##offset##_min (struct device *dev, struct device_attribute *attr, char *buf)    \
 {                                                                      \
        return get_fan_min(dev, buf, offset - 1);                       \
 }                                                                      \
-static ssize_t set_fan##offset##_min (struct device *dev,              \
+static ssize_t set_fan##offset##_min (struct device *dev, struct device_attribute *attr,               \
                const char *buf, size_t count)                          \
 {                                                                      \
        return set_fan_min(dev, buf, count, offset - 1);                \
 }                                                                      \
-static ssize_t get_fan##offset##_div (struct device *dev, char *buf)   \
+static ssize_t get_fan##offset##_div (struct device *dev, struct device_attribute *attr, char *buf)    \
 {                                                                      \
        return get_fan_div(dev, buf, offset - 1);                       \
 }                                                                      \
-static ssize_t set_fan##offset##_div (struct device *dev,              \
+static ssize_t set_fan##offset##_div (struct device *dev, struct device_attribute *attr,               \
                const char *buf, size_t count)                          \
 {                                                                      \
        return set_fan_div(dev, buf, count, offset - 1);                \
 }                                                                      \
-static ssize_t get_pwm##offset (struct device *dev, char *buf)         \
+static ssize_t get_pwm##offset (struct device *dev, struct device_attribute *attr, char *buf)          \
 {                                                                      \
        return get_pwm(dev, buf, offset - 1);                           \
 }                                                                      \
-static ssize_t set_pwm##offset (struct device *dev,                    \
+static ssize_t set_pwm##offset (struct device *dev, struct device_attribute *attr,                     \
                const char *buf, size_t count)                          \
 {                                                                      \
        return set_pwm(dev, buf, count, offset - 1);                    \
 }                                                                      \
-static ssize_t get_pwm##offset##_en (struct device *dev, char *buf)    \
+static ssize_t get_pwm##offset##_en (struct device *dev, struct device_attribute *attr, char *buf)     \
 {                                                                      \
        return get_pwm_en(dev, buf, offset - 1);                        \
 }                                                                      \
-static ssize_t set_pwm##offset##_en (struct device *dev,               \
+static ssize_t set_pwm##offset##_en (struct device *dev, struct device_attribute *attr,                \
                const char *buf, size_t count)                          \
 {                                                                      \
        return set_pwm_en(dev, buf, count, offset - 1);                 \
 
 }
 #define show_in_offset(offset)                                 \
 static ssize_t                                                         \
-       show_in##offset (struct device *dev, char *buf)         \
+       show_in##offset (struct device *dev, struct device_attribute *attr, char *buf)          \
 {                                                              \
        return show_in(dev, buf, offset);                       \
 }                                                              \
 static ssize_t                                                         \
-       show_in##offset##_min (struct device *dev, char *buf)   \
+       show_in##offset##_min (struct device *dev, struct device_attribute *attr, char *buf)    \
 {                                                              \
        return show_in_min(dev, buf, offset);           \
 }                                                              \
 static ssize_t                                                         \
-       show_in##offset##_max (struct device *dev, char *buf)   \
+       show_in##offset##_max (struct device *dev, struct device_attribute *attr, char *buf)    \
 {                                                              \
        return show_in_max(dev, buf, offset);           \
 }                                                              \
-static ssize_t set_in##offset##_min (struct device *dev,       \
+static ssize_t set_in##offset##_min (struct device *dev, struct device_attribute *attr,        \
                const char *buf, size_t count)                  \
 {                                                              \
        return set_in_min(dev, buf, count, offset);             \
 }                                                              \
-static ssize_t set_in##offset##_max (struct device *dev,       \
+static ssize_t set_in##offset##_max (struct device *dev, struct device_attribute *attr,        \
                        const char *buf, size_t count)          \
 {                                                              \
        return set_in_max(dev, buf, count, offset);             \
        return count;
 }
 #define show_temp_offset(offset)                                       \
-static ssize_t show_temp_##offset (struct device *dev, char *buf)      \
+static ssize_t show_temp_##offset (struct device *dev, struct device_attribute *attr, char *buf)       \
 {                                                                      \
        return show_temp(dev, buf, offset - 1);                         \
 }                                                                      \
 static ssize_t                                                         \
-show_temp_##offset##_over (struct device *dev, char *buf)              \
+show_temp_##offset##_over (struct device *dev, struct device_attribute *attr, char *buf)               \
 {                                                                      \
        return show_temp_over(dev, buf, offset - 1);                    \
 }                                                                      \
 static ssize_t                                                         \
-show_temp_##offset##_hyst (struct device *dev, char *buf)              \
+show_temp_##offset##_hyst (struct device *dev, struct device_attribute *attr, char *buf)               \
 {                                                                      \
        return show_temp_hyst(dev, buf, offset - 1);                    \
 }                                                                      \
-static ssize_t set_temp_##offset##_over (struct device *dev,           \
+static ssize_t set_temp_##offset##_over (struct device *dev, struct device_attribute *attr,            \
                const char *buf, size_t count)                          \
 {                                                                      \
        return set_temp_over(dev, buf, count, offset - 1);              \
 }                                                                      \
-static ssize_t set_temp_##offset##_hyst (struct device *dev,           \
+static ssize_t set_temp_##offset##_hyst (struct device *dev, struct device_attribute *attr,            \
                const char *buf, size_t count)                          \
 {                                                                      \
        return set_temp_hyst(dev, buf, count, offset - 1);              \
 }
 
 #define show_fan_offset(offset)                                                \
-static ssize_t show_fan_##offset (struct device *dev, char *buf)       \
+static ssize_t show_fan_##offset (struct device *dev, struct device_attribute *attr, char *buf)        \
 {                                                                      \
        return show_fan(dev, buf, offset - 1);                          \
 }                                                                      \
-static ssize_t show_fan_##offset##_min (struct device *dev, char *buf) \
+static ssize_t show_fan_##offset##_min (struct device *dev, struct device_attribute *attr, char *buf)  \
 {                                                                      \
        return show_fan_min(dev, buf, offset - 1);                      \
 }                                                                      \
-static ssize_t show_fan_##offset##_div (struct device *dev, char *buf) \
+static ssize_t show_fan_##offset##_div (struct device *dev, struct device_attribute *attr, char *buf)  \
 {                                                                      \
        return show_fan_div(dev, buf, offset - 1);                      \
 }                                                                      \
-static ssize_t set_fan_##offset##_min (struct device *dev,             \
+static ssize_t set_fan_##offset##_min (struct device *dev, struct device_attribute *attr,              \
        const char *buf, size_t count)                                  \
 {                                                                      \
        return set_fan_min(dev, buf, count, offset - 1);                \
 }                                                                      \
-static ssize_t set_fan_##offset##_div (struct device *dev,             \
+static ssize_t set_fan_##offset##_div (struct device *dev, struct device_attribute *attr,              \
                const char *buf, size_t count)                          \
 {                                                                      \
        return set_fan_div(dev, buf, count, offset - 1);                \
 show_fan_offset(2);
 
 /* Alarms */
-static ssize_t show_alarms(struct device *dev, char *buf) {
+static ssize_t show_alarms(struct device *dev, struct device_attribute *attr, char *buf) {
        struct via686a_data *data = via686a_update_device(dev);
        return sprintf(buf,"%d\n", ALARMS_FROM_REG(data->alarms));
 }
 
 
 #define sysfs_in_offset(offset) \
 static ssize_t \
-show_regs_in_##offset (struct device *dev, char *buf) \
+show_regs_in_##offset (struct device *dev, struct device_attribute *attr, char *buf) \
 { \
         return show_in(dev, buf, offset); \
 } \
 static DEVICE_ATTR(in##offset##_input, S_IRUGO, show_regs_in_##offset, NULL);
 
 #define sysfs_in_reg_offset(reg, offset) \
-static ssize_t show_regs_in_##reg##offset (struct device *dev, char *buf) \
+static ssize_t show_regs_in_##reg##offset (struct device *dev, struct device_attribute *attr, char *buf) \
 { \
        return show_in_##reg (dev, buf, offset); \
 } \
 static ssize_t \
-store_regs_in_##reg##offset (struct device *dev, \
+store_regs_in_##reg##offset (struct device *dev, struct device_attribute *attr, \
                            const char *buf, size_t count) \
 { \
        return store_in_##reg (dev, buf, count, offset); \
        return sprintf(buf,"%ld\n", in0);
 }
 
-static ssize_t show_regs_in_0(struct device *dev, char *buf)
+static ssize_t show_regs_in_0(struct device *dev, struct device_attribute *attr, char *buf)
 {
        struct w83627hf_data *data = w83627hf_update_device(dev);
        return show_in_0(data, buf, data->in[0]);
 }
 
-static ssize_t show_regs_in_min0(struct device *dev, char *buf)
+static ssize_t show_regs_in_min0(struct device *dev, struct device_attribute *attr, char *buf)
 {
        struct w83627hf_data *data = w83627hf_update_device(dev);
        return show_in_0(data, buf, data->in_min[0]);
 }
 
-static ssize_t show_regs_in_max0(struct device *dev, char *buf)
+static ssize_t show_regs_in_max0(struct device *dev, struct device_attribute *attr, char *buf)
 {
        struct w83627hf_data *data = w83627hf_update_device(dev);
        return show_in_0(data, buf, data->in_max[0]);
 }
 
-static ssize_t store_regs_in_min0(struct device *dev,
+static ssize_t store_regs_in_min0(struct device *dev, struct device_attribute *attr,
        const char *buf, size_t count)
 {
        struct i2c_client *client = to_i2c_client(dev);
        return count;
 }
 
-static ssize_t store_regs_in_max0(struct device *dev,
+static ssize_t store_regs_in_max0(struct device *dev, struct device_attribute *attr,
        const char *buf, size_t count)
 {
        struct i2c_client *client = to_i2c_client(dev);
 }
 
 #define sysfs_fan_offset(offset) \
-static ssize_t show_regs_fan_##offset (struct device *dev, char *buf) \
+static ssize_t show_regs_fan_##offset (struct device *dev, struct device_attribute *attr, char *buf) \
 { \
        return show_fan(dev, buf, offset); \
 } \
 static DEVICE_ATTR(fan##offset##_input, S_IRUGO, show_regs_fan_##offset, NULL);
 
 #define sysfs_fan_min_offset(offset) \
-static ssize_t show_regs_fan_min##offset (struct device *dev, char *buf) \
+static ssize_t show_regs_fan_min##offset (struct device *dev, struct device_attribute *attr, char *buf) \
 { \
        return show_fan_min(dev, buf, offset); \
 } \
 static ssize_t \
-store_regs_fan_min##offset (struct device *dev, const char *buf, size_t count) \
+store_regs_fan_min##offset (struct device *dev, struct device_attribute *attr, const char *buf, size_t count) \
 { \
        return store_fan_min(dev, buf, count, offset); \
 } \
 
 #define sysfs_temp_offset(offset) \
 static ssize_t \
-show_regs_temp_##offset (struct device *dev, char *buf) \
+show_regs_temp_##offset (struct device *dev, struct device_attribute *attr, char *buf) \
 { \
        return show_temp(dev, buf, offset); \
 } \
 static DEVICE_ATTR(temp##offset##_input, S_IRUGO, show_regs_temp_##offset, NULL);
 
 #define sysfs_temp_reg_offset(reg, offset) \
-static ssize_t show_regs_temp_##reg##offset (struct device *dev, char *buf) \
+static ssize_t show_regs_temp_##reg##offset (struct device *dev, struct device_attribute *attr, char *buf) \
 { \
        return show_temp_##reg (dev, buf, offset); \
 } \
 static ssize_t \
-store_regs_temp_##reg##offset (struct device *dev, \
+store_regs_temp_##reg##offset (struct device *dev, struct device_attribute *attr, \
                              const char *buf, size_t count) \
 { \
        return store_temp_##reg (dev, buf, count, offset); \
 } while (0)
 
 static ssize_t
-show_vid_reg(struct device *dev, char *buf)
+show_vid_reg(struct device *dev, struct device_attribute *attr, char *buf)
 {
        struct w83627hf_data *data = w83627hf_update_device(dev);
        return sprintf(buf, "%ld\n", (long) vid_from_reg(data->vid, data->vrm));
 device_create_file(&client->dev, &dev_attr_cpu0_vid)
 
 static ssize_t
-show_vrm_reg(struct device *dev, char *buf)
+show_vrm_reg(struct device *dev, struct device_attribute *attr, char *buf)
 {
        struct w83627hf_data *data = w83627hf_update_device(dev);
        return sprintf(buf, "%ld\n", (long) data->vrm);
 }
 static ssize_t
-store_vrm_reg(struct device *dev, const char *buf, size_t count)
+store_vrm_reg(struct device *dev, struct device_attribute *attr, const char *buf, size_t count)
 {
        struct i2c_client *client = to_i2c_client(dev);
        struct w83627hf_data *data = i2c_get_clientdata(client);
 device_create_file(&client->dev, &dev_attr_vrm)
 
 static ssize_t
-show_alarms_reg(struct device *dev, char *buf)
+show_alarms_reg(struct device *dev, struct device_attribute *attr, char *buf)
 {
        struct w83627hf_data *data = w83627hf_update_device(dev);
        return sprintf(buf, "%ld\n", (long) data->alarms);
 device_create_file(&client->dev, &dev_attr_alarms)
 
 #define show_beep_reg(REG, reg) \
-static ssize_t show_beep_##reg (struct device *dev, char *buf) \
+static ssize_t show_beep_##reg (struct device *dev, struct device_attribute *attr, char *buf) \
 { \
        struct w83627hf_data *data = w83627hf_update_device(dev); \
        return sprintf(buf,"%ld\n", \
 }
 
 #define sysfs_beep(REG, reg) \
-static ssize_t show_regs_beep_##reg (struct device *dev, char *buf) \
+static ssize_t show_regs_beep_##reg (struct device *dev, struct device_attribute *attr, char *buf) \
 { \
-       return show_beep_##reg(dev, buf); \
+       return show_beep_##reg(dev, attr, buf); \
 } \
 static ssize_t \
-store_regs_beep_##reg (struct device *dev, const char *buf, size_t count) \
+store_regs_beep_##reg (struct device *dev, struct device_attribute *attr, const char *buf, size_t count) \
 { \
        return store_beep_reg(dev, buf, count, BEEP_##REG); \
 } \
 }
 
 #define sysfs_fan_div(offset) \
-static ssize_t show_regs_fan_div_##offset (struct device *dev, char *buf) \
+static ssize_t show_regs_fan_div_##offset (struct device *dev, struct device_attribute *attr, char *buf) \
 { \
        return show_fan_div_reg(dev, buf, offset); \
 } \
 static ssize_t \
-store_regs_fan_div_##offset (struct device *dev, \
+store_regs_fan_div_##offset (struct device *dev, struct device_attribute *attr, \
                            const char *buf, size_t count) \
 { \
        return store_fan_div_reg(dev, buf, count, offset - 1); \
 }
 
 #define sysfs_pwm(offset) \
-static ssize_t show_regs_pwm_##offset (struct device *dev, char *buf) \
+static ssize_t show_regs_pwm_##offset (struct device *dev, struct device_attribute *attr, char *buf) \
 { \
        return show_pwm_reg(dev, buf, offset); \
 } \
 static ssize_t \
-store_regs_pwm_##offset (struct device *dev, const char *buf, size_t count) \
+store_regs_pwm_##offset (struct device *dev, struct device_attribute *attr, const char *buf, size_t count) \
 { \
        return store_pwm_reg(dev, buf, count, offset); \
 } \
 }
 
 #define sysfs_sensor(offset) \
-static ssize_t show_regs_sensor_##offset (struct device *dev, char *buf) \
+static ssize_t show_regs_sensor_##offset (struct device *dev, struct device_attribute *attr, char *buf) \
 { \
     return show_sensor_reg(dev, buf, offset); \
 } \
 static ssize_t \
-store_regs_sensor_##offset (struct device *dev, const char *buf, size_t count) \
+store_regs_sensor_##offset (struct device *dev, struct device_attribute *attr, const char *buf, size_t count) \
 { \
     return store_sensor_reg(dev, buf, count, offset); \
 } \