/* read routines for temperature limits */
 #define show(value)    \
-static ssize_t show_##value(struct device *dev, char *buf)     \
+static ssize_t show_##value(struct device *dev, struct device_attribute *attr, char *buf)      \
 {                                                              \
        struct lm77_data *data = lm77_update_device(dev);       \
        return sprintf(buf, "%d\n", data->value);               \
 show(alarms);
 
 /* read routines for hysteresis values */
-static ssize_t show_temp_crit_hyst(struct device *dev, char *buf)
+static ssize_t show_temp_crit_hyst(struct device *dev, struct device_attribute *attr, char *buf)
 {
        struct lm77_data *data = lm77_update_device(dev);
        return sprintf(buf, "%d\n", data->temp_crit - data->temp_hyst);
 }
-static ssize_t show_temp_min_hyst(struct device *dev, char *buf)
+static ssize_t show_temp_min_hyst(struct device *dev, struct device_attribute *attr, char *buf)
 {
        struct lm77_data *data = lm77_update_device(dev);
        return sprintf(buf, "%d\n", data->temp_min + data->temp_hyst);
 }
-static ssize_t show_temp_max_hyst(struct device *dev, char *buf)
+static ssize_t show_temp_max_hyst(struct device *dev, struct device_attribute *attr, char *buf)
 {
        struct lm77_data *data = lm77_update_device(dev);
        return sprintf(buf, "%d\n", data->temp_max - data->temp_hyst);
 
 /* write routines */
 #define set(value, reg)        \
-static ssize_t set_##value(struct device *dev, const char *buf, size_t count)  \
+static ssize_t set_##value(struct device *dev, struct device_attribute *attr, const char *buf, size_t count)   \
 {                                                                              \
        struct i2c_client *client = to_i2c_client(dev);                         \
        struct lm77_data *data = i2c_get_clientdata(client);                    \
 
 /* hysteresis is stored as a relative value on the chip, so it has to be
    converted first */
-static ssize_t set_temp_crit_hyst(struct device *dev, const char *buf, size_t count)
+static ssize_t set_temp_crit_hyst(struct device *dev, struct device_attribute *attr, const char *buf, size_t count)
 {
        struct i2c_client *client = to_i2c_client(dev);
        struct lm77_data *data = i2c_get_clientdata(client);
 }
 
 /* preserve hysteresis when setting T_crit */
-static ssize_t set_temp_crit(struct device *dev, const char *buf, size_t count)
+static ssize_t set_temp_crit(struct device *dev, struct device_attribute *attr, const char *buf, size_t count)
 {
        struct i2c_client *client = to_i2c_client(dev);
        struct lm77_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(6);
 
 /* 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 lm78_data *data = lm78_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 lm78_data *data = lm78_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 lm78_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 lm78_data *data = lm78_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 lm78_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);                \
 static DEVICE_ATTR(fan##offset##_min, S_IRUGO | S_IWUSR,               \
                show_fan_##offset##_min, set_fan_##offset##_min);
 
-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) ;
 static DEVICE_ATTR(fan3_div, S_IRUGO, show_fan_3_div, NULL);
 
 /* VID */
-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 lm78_data *data = lm78_update_device(dev);
        return sprintf(buf, "%d\n", VID_FROM_REG(data->vid));
 static DEVICE_ATTR(cpu0_vid, S_IRUGO, show_vid, NULL);
 
 /* 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 lm78_data *data = lm78_update_device(dev);
        return sprintf(buf, "%u\n", data->alarms);
 
  */
 
 #define show_in(suffix, value) \
-static ssize_t show_in_##suffix(struct device *dev, char *buf) \
+static ssize_t show_in_##suffix(struct device *dev, struct device_attribute *attr, char *buf) \
 { \
        struct lm80_data *data = lm80_update_device(dev); \
        return sprintf(buf, "%d\n", IN_FROM_REG(data->value)); \
 show_in(input6, in[6]);
 
 #define set_in(suffix, value, reg) \
-static ssize_t set_in_##suffix(struct device *dev, const char *buf, \
+static ssize_t set_in_##suffix(struct device *dev, struct device_attribute *attr, const char *buf, \
        size_t count) \
 { \
        struct i2c_client *client = to_i2c_client(dev); \
 set_in(max6, in_max[6], LM80_REG_IN_MAX(6));
 
 #define show_fan(suffix, value, div) \
-static ssize_t show_fan_##suffix(struct device *dev, char *buf) \
+static ssize_t show_fan_##suffix(struct device *dev, struct device_attribute *attr, char *buf) \
 { \
        struct lm80_data *data = lm80_update_device(dev); \
        return sprintf(buf, "%d\n", FAN_FROM_REG(data->value, \
 show_fan(input2, fan[1], fan_div[1]);
 
 #define show_fan_div(suffix, value) \
-static ssize_t show_fan_div##suffix(struct device *dev, char *buf) \
+static ssize_t show_fan_div##suffix(struct device *dev, struct device_attribute *attr, char *buf) \
 { \
        struct lm80_data *data = lm80_update_device(dev); \
        return sprintf(buf, "%d\n", DIV_FROM_REG(data->value)); \
 show_fan_div(2, fan_div[1]);
 
 #define set_fan(suffix, value, reg, div) \
-static ssize_t set_fan_##suffix(struct device *dev, const char *buf, \
+static ssize_t set_fan_##suffix(struct device *dev, struct device_attribute *attr, const char *buf, \
        size_t count) \
 { \
        struct i2c_client *client = to_i2c_client(dev); \
 }
 
 #define set_fan_div(number) \
-static ssize_t set_fan_div##number(struct device *dev, const char *buf, \
+static ssize_t set_fan_div##number(struct device *dev, struct device_attribute *attr, const char *buf, \
        size_t count) \
 { \
        return set_fan_div(dev, buf, count, number - 1); \
 set_fan_div(1);
 set_fan_div(2);
 
-static ssize_t show_temp_input1(struct device *dev, char *buf)
+static ssize_t show_temp_input1(struct device *dev, struct device_attribute *attr, char *buf)
 {
        struct lm80_data *data = lm80_update_device(dev);
        return sprintf(buf, "%ld\n", TEMP_FROM_REG(data->temp));
 }
 
 #define show_temp(suffix, value) \
-static ssize_t show_temp_##suffix(struct device *dev, char *buf) \
+static ssize_t show_temp_##suffix(struct device *dev, struct device_attribute *attr, char *buf) \
 { \
        struct lm80_data *data = lm80_update_device(dev); \
        return sprintf(buf, "%d\n", TEMP_LIMIT_FROM_REG(data->value)); \
 show_temp(os_hyst, temp_os_hyst);
 
 #define set_temp(suffix, value, reg) \
-static ssize_t set_temp_##suffix(struct device *dev, const char *buf, \
+static ssize_t set_temp_##suffix(struct device *dev, struct device_attribute *attr, const char *buf, \
        size_t count) \
 { \
        struct i2c_client *client = to_i2c_client(dev); \
 set_temp(os_max, temp_os_max, LM80_REG_TEMP_OS_MAX);
 set_temp(os_hyst, temp_os_hyst, LM80_REG_TEMP_OS_HYST);
 
-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 lm80_data *data = lm80_update_device(dev);
        return sprintf(buf, "%u\n", data->alarms);
 
  */
 
 #define show_temp(suffix, value) \
-static ssize_t show_temp_##suffix(struct device *dev, char *buf) \
+static ssize_t show_temp_##suffix(struct device *dev, struct device_attribute *attr, char *buf) \
 { \
        struct lm83_data *data = lm83_update_device(dev); \
        return sprintf(buf, "%d\n", TEMP_FROM_REG(data->value)); \
 show_temp(crit, temp_crit);
 
 #define set_temp(suffix, value, reg) \
-static ssize_t set_temp_##suffix(struct device *dev, const char *buf, \
+static ssize_t set_temp_##suffix(struct device *dev, struct device_attribute *attr, const char *buf, \
        size_t count) \
 { \
        struct i2c_client *client = to_i2c_client(dev); \
 set_temp(high4, temp_high[3], LM83_REG_W_REMOTE3_HIGH);
 set_temp(crit, temp_crit, LM83_REG_W_TCRIT);
 
-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 lm83_data *data = lm83_update_device(dev);
        return sprintf(buf, "%d\n", data->alarms);
 
 }
 
 #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 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);                \
 
 /* vid, vrm, alarms */
 
-static ssize_t show_vid_reg(struct device *dev, char *buf)
+static ssize_t show_vid_reg(struct device *dev, struct device_attribute *attr, char *buf)
 {
        struct lm85_data *data = lm85_update_device(dev);
        return sprintf(buf, "%ld\n", (long) vid_from_reg(data->vid, data->vrm));
 
 static DEVICE_ATTR(cpu0_vid, S_IRUGO, show_vid_reg, NULL);
 
-static ssize_t show_vrm_reg(struct device *dev, char *buf)
+static ssize_t show_vrm_reg(struct device *dev, struct device_attribute *attr, char *buf)
 {
        struct lm85_data *data = lm85_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)
+static ssize_t 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 lm85_data *data = i2c_get_clientdata(client);
 
 static DEVICE_ATTR(vrm, S_IRUGO | S_IWUSR, show_vrm_reg, store_vrm_reg);
 
-static ssize_t show_alarms_reg(struct device *dev, char *buf)
+static ssize_t show_alarms_reg(struct device *dev, struct device_attribute *attr, char *buf)
 {
        struct lm85_data *data = lm85_update_device(dev);
        return sprintf(buf, "%ld\n", (long) ALARMS_FROM_REG(data->alarms));
 }
 
 #define show_pwm_reg(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)        \
 {                                                                      \
        return show_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 show_pwm_enable##offset (struct device *dev, char *buf) \
+static ssize_t show_pwm_enable##offset (struct device *dev, struct device_attribute *attr, char *buf)  \
 {                                                                      \
        return show_pwm_enable(dev, buf, offset - 1);                   \
 }                                                                      \
        return count;
 }
 #define show_in_reg(offset)                                            \
-static ssize_t show_in_##offset (struct device *dev, char *buf)                \
+static ssize_t 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)  \
+static ssize_t 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)  \
+static ssize_t 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_reg(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##_min (struct device *dev, char *buf)        \
+static ssize_t show_temp_##offset##_min (struct device *dev, struct device_attribute *attr, char *buf) \
 {                                                                      \
        return show_temp_min(dev, buf, 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) \
 {                                                                      \
        return show_temp_max(dev, buf, offset - 1);                     \
 }                                                                      \
-static ssize_t set_temp_##offset##_min (struct device *dev,            \
+static ssize_t set_temp_##offset##_min (struct device *dev, struct device_attribute *attr,             \
        const char *buf, size_t count)                                  \
 {                                                                      \
        return set_temp_min(dev, buf, count, offset - 1);               \
 }                                                                      \
-static ssize_t set_temp_##offset##_max (struct device *dev,            \
+static ssize_t set_temp_##offset##_max (struct device *dev, struct device_attribute *attr,             \
        const char *buf, size_t count)                                  \
 {                                                                      \
        return set_temp_max(dev, buf, count, offset - 1);               \
        return count;
 }
 #define pwm_auto(offset)                                               \
-static ssize_t show_pwm##offset##_auto_channels (struct device *dev,   \
+static ssize_t show_pwm##offset##_auto_channels (struct device *dev, struct device_attribute *attr,    \
        char *buf)                                                      \
 {                                                                      \
        return show_pwm_auto_channels(dev, buf, offset - 1);            \
 }                                                                      \
-static ssize_t set_pwm##offset##_auto_channels (struct device *dev,    \
+static ssize_t set_pwm##offset##_auto_channels (struct device *dev, struct device_attribute *attr,     \
        const char *buf, size_t count)                                  \
 {                                                                      \
        return set_pwm_auto_channels(dev, buf, count, offset - 1);      \
 }                                                                      \
-static ssize_t show_pwm##offset##_auto_pwm_min (struct device *dev,    \
+static ssize_t show_pwm##offset##_auto_pwm_min (struct device *dev, struct device_attribute *attr,     \
        char *buf)                                                      \
 {                                                                      \
        return show_pwm_auto_pwm_min(dev, buf, offset - 1);             \
 }                                                                      \
-static ssize_t set_pwm##offset##_auto_pwm_min (struct device *dev,     \
+static ssize_t set_pwm##offset##_auto_pwm_min (struct device *dev, struct device_attribute *attr,      \
        const char *buf, size_t count)                                  \
 {                                                                      \
        return set_pwm_auto_pwm_min(dev, buf, count, offset - 1);       \
 }                                                                      \
-static ssize_t show_pwm##offset##_auto_pwm_minctl (struct device *dev, \
+static ssize_t show_pwm##offset##_auto_pwm_minctl (struct device *dev, struct device_attribute *attr,  \
        char *buf)                                                      \
 {                                                                      \
        return show_pwm_auto_pwm_minctl(dev, buf, offset - 1);          \
 }                                                                      \
-static ssize_t set_pwm##offset##_auto_pwm_minctl (struct device *dev,  \
+static ssize_t set_pwm##offset##_auto_pwm_minctl (struct device *dev, struct device_attribute *attr,   \
        const char *buf, size_t count)                                  \
 {                                                                      \
        return set_pwm_auto_pwm_minctl(dev, buf, count, offset - 1);    \
 }                                                                      \
-static ssize_t show_pwm##offset##_auto_pwm_freq (struct device *dev,   \
+static ssize_t show_pwm##offset##_auto_pwm_freq (struct device *dev, struct device_attribute *attr,    \
        char *buf)                                                      \
 {                                                                      \
        return show_pwm_auto_pwm_freq(dev, buf, offset - 1);            \
 }                                                                      \
-static ssize_t set_pwm##offset##_auto_pwm_freq(struct device *dev,     \
+static ssize_t set_pwm##offset##_auto_pwm_freq(struct device *dev, struct device_attribute *attr,      \
        const char *buf, size_t count)                                  \
 {                                                                      \
        return set_pwm_auto_pwm_freq(dev, buf, count, offset - 1);      \
        return count;
 }
 #define temp_auto(offset)                                              \
-static ssize_t show_temp##offset##_auto_temp_off (struct device *dev,  \
+static ssize_t show_temp##offset##_auto_temp_off (struct device *dev, struct device_attribute *attr,   \
        char *buf)                                                      \
 {                                                                      \
        return show_temp_auto_temp_off(dev, buf, offset - 1);           \
 }                                                                      \
-static ssize_t set_temp##offset##_auto_temp_off (struct device *dev,   \
+static ssize_t set_temp##offset##_auto_temp_off (struct device *dev, struct device_attribute *attr,    \
        const char *buf, size_t count)                                  \
 {                                                                      \
        return set_temp_auto_temp_off(dev, buf, count, offset - 1);     \
 }                                                                      \
-static ssize_t show_temp##offset##_auto_temp_min (struct device *dev,  \
+static ssize_t show_temp##offset##_auto_temp_min (struct device *dev, struct device_attribute *attr,   \
        char *buf)                                                      \
 {                                                                      \
        return show_temp_auto_temp_min(dev, buf, offset - 1);           \
 }                                                                      \
-static ssize_t set_temp##offset##_auto_temp_min (struct device *dev,   \
+static ssize_t set_temp##offset##_auto_temp_min (struct device *dev, struct device_attribute *attr,    \
        const char *buf, size_t count)                                  \
 {                                                                      \
        return set_temp_auto_temp_min(dev, buf, count, offset - 1);     \
 }                                                                      \
-static ssize_t show_temp##offset##_auto_temp_max (struct device *dev,  \
+static ssize_t show_temp##offset##_auto_temp_max (struct device *dev, struct device_attribute *attr,   \
        char *buf)                                                      \
 {                                                                      \
        return show_temp_auto_temp_max(dev, buf, offset - 1);           \
 }                                                                      \
-static ssize_t set_temp##offset##_auto_temp_max (struct device *dev,   \
+static ssize_t set_temp##offset##_auto_temp_max (struct device *dev, struct device_attribute *attr,    \
        const char *buf, size_t count)                                  \
 {                                                                      \
        return set_temp_auto_temp_max(dev, buf, count, offset - 1);     \
 }                                                                      \
-static ssize_t show_temp##offset##_auto_temp_crit (struct device *dev, \
+static ssize_t show_temp##offset##_auto_temp_crit (struct device *dev, struct device_attribute *attr,  \
        char *buf)                                                      \
 {                                                                      \
        return show_temp_auto_temp_crit(dev, buf, offset - 1);          \
 }                                                                      \
-static ssize_t set_temp##offset##_auto_temp_crit (struct device *dev,  \
+static ssize_t set_temp##offset##_auto_temp_crit (struct device *dev, struct device_attribute *attr,   \
        const char *buf, size_t count)                                  \
 {                                                                      \
        return set_temp_auto_temp_crit(dev, buf, count, offset - 1);    \
 
 }
 
 #define show_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 lm87_data *data = lm87_update_device(dev); \
        return sprintf(buf, "%u\n", IN_FROM_REG(data->in[offset], \
                       data->in_scale[offset])); \
 } \
-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 lm87_data *data = lm87_update_device(dev); \
        return sprintf(buf, "%u\n", IN_FROM_REG(data->in_min[offset], \
                       data->in_scale[offset])); \
 } \
-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 lm87_data *data = lm87_update_device(dev); \
        return sprintf(buf, "%u\n", IN_FROM_REG(data->in_max[offset], \
 }
 
 #define set_in(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) \
 { \
        set_in_min(dev, buf, offset); \
        return count; \
 } \
-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) \
 { \
        set_in_max(dev, buf, offset); \
 set_in(7);
 
 #define show_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 lm87_data *data = lm87_update_device(dev); \
        return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp[offset-1])); \
 } \
-static ssize_t show_temp##offset##_low(struct device *dev, char *buf) \
+static ssize_t show_temp##offset##_low(struct device *dev, struct device_attribute *attr, char *buf) \
 { \
        struct lm87_data *data = lm87_update_device(dev); \
        return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_low[offset-1])); \
 } \
-static ssize_t show_temp##offset##_high(struct device *dev, char *buf) \
+static ssize_t show_temp##offset##_high(struct device *dev, struct device_attribute *attr, char *buf) \
 { \
        struct lm87_data *data = lm87_update_device(dev); \
        return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_high[offset-1])); \
 }
 
 #define set_temp(offset) \
-static ssize_t set_temp##offset##_low(struct device *dev, \
+static ssize_t set_temp##offset##_low(struct device *dev, struct device_attribute *attr, \
                const char *buf, size_t count) \
 { \
        set_temp_low(dev, buf, offset-1); \
        return count; \
 } \
-static ssize_t set_temp##offset##_high(struct device *dev, \
+static ssize_t set_temp##offset##_high(struct device *dev, struct device_attribute *attr, \
                const char *buf, size_t count) \
 { \
        set_temp_high(dev, buf, offset-1); \
 set_temp(2);
 set_temp(3);
 
-static ssize_t show_temp_crit_int(struct device *dev, char *buf)
+static ssize_t show_temp_crit_int(struct device *dev, struct device_attribute *attr, char *buf)
 {
        struct lm87_data *data = lm87_update_device(dev);
        return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_crit_int));
 }
 
-static ssize_t show_temp_crit_ext(struct device *dev, char *buf)
+static ssize_t show_temp_crit_ext(struct device *dev, struct device_attribute *attr, char *buf)
 {
        struct lm87_data *data = lm87_update_device(dev);
        return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_crit_ext));
 static DEVICE_ATTR(temp3_crit, S_IRUGO, show_temp_crit_ext, NULL);
 
 #define show_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 lm87_data *data = lm87_update_device(dev); \
        return sprintf(buf, "%d\n", FAN_FROM_REG(data->fan[offset-1], \
                       FAN_DIV_FROM_REG(data->fan_div[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 lm87_data *data = lm87_update_device(dev); \
        return sprintf(buf, "%d\n", FAN_FROM_REG(data->fan_min[offset-1], \
                       FAN_DIV_FROM_REG(data->fan_div[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 lm87_data *data = lm87_update_device(dev); \
        return sprintf(buf, "%d\n", FAN_DIV_FROM_REG(data->fan_div[offset-1])); \
 }
 
 #define set_fan(offset) \
-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) \
 { \
        set_fan_min(dev, buf, offset-1); \
        return count; \
 } \
-static ssize_t set_fan##offset##_div(struct device *dev, const char *buf, \
+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); \
 set_fan(1);
 set_fan(2);
 
-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 lm87_data *data = lm87_update_device(dev);
        return sprintf(buf, "%d\n", data->alarms);
 }
 static DEVICE_ATTR(alarms, S_IRUGO, show_alarms, NULL);
 
-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 lm87_data *data = lm87_update_device(dev);
        return sprintf(buf, "%d\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 lm87_data *data = lm87_update_device(dev);
        return sprintf(buf, "%d\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 lm87_data *data = i2c_get_clientdata(client);
 }
 static DEVICE_ATTR(vrm, S_IRUGO | S_IWUSR, show_vrm, set_vrm);
 
-static ssize_t show_aout(struct device *dev, char *buf)
+static ssize_t show_aout(struct device *dev, struct device_attribute *attr, char *buf)
 {
        struct lm87_data *data = lm87_update_device(dev);
        return sprintf(buf, "%d\n", AOUT_FROM_REG(data->aout));
 }
-static ssize_t set_aout(struct device *dev, const char *buf, size_t count)
+static ssize_t set_aout(struct device *dev, struct device_attribute *attr, const char *buf, size_t count)
 {
        struct i2c_client *client = to_i2c_client(dev);
        struct lm87_data *data = i2c_get_clientdata(client);
 
  */
 
 #define show_temp(value, converter) \
-static ssize_t show_##value(struct device *dev, char *buf) \
+static ssize_t show_##value(struct device *dev, struct device_attribute *attr, char *buf) \
 { \
        struct lm90_data *data = lm90_update_device(dev); \
        return sprintf(buf, "%d\n", converter(data->value)); \
 show_temp(temp_crit2, TEMP1_FROM_REG);
 
 #define set_temp1(value, reg) \
-static ssize_t set_##value(struct device *dev, const char *buf, \
+static ssize_t set_##value(struct device *dev, struct device_attribute *attr, const char *buf, \
        size_t count) \
 { \
        struct i2c_client *client = to_i2c_client(dev); \
        return count; \
 }
 #define set_temp2(value, regh, regl) \
-static ssize_t set_##value(struct device *dev, const char *buf, \
+static ssize_t set_##value(struct device *dev, struct device_attribute *attr, const char *buf, \
        size_t count) \
 { \
        struct i2c_client *client = to_i2c_client(dev); \
 set_temp1(temp_crit2, LM90_REG_W_REMOTE_CRIT);
 
 #define show_temp_hyst(value, basereg) \
-static ssize_t show_##value(struct device *dev, char *buf) \
+static ssize_t show_##value(struct device *dev, struct device_attribute *attr, char *buf) \
 { \
        struct lm90_data *data = lm90_update_device(dev); \
        return sprintf(buf, "%d\n", TEMP1_FROM_REG(data->basereg) \
 show_temp_hyst(temp_hyst1, temp_crit1);
 show_temp_hyst(temp_hyst2, temp_crit2);
 
-static ssize_t set_temp_hyst1(struct device *dev, const char *buf,
+static ssize_t set_temp_hyst1(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 show_alarms(struct device *dev, char *buf)
+static ssize_t show_alarms(struct device *dev, struct device_attribute *attr, char *buf)
 {
        struct lm90_data *data = lm90_update_device(dev);
        return sprintf(buf, "%d\n", data->alarms);
 
 }
 
 #define show_temp(value) \
-static ssize_t show_##value(struct device *dev, char *buf) \
+static ssize_t show_##value(struct device *dev, struct device_attribute *attr, char *buf) \
 { \
        struct lm92_data *data = lm92_update_device(dev); \
        return sprintf(buf, "%d\n", TEMP_FROM_REG(data->value)); \
 show_temp(temp1_max);
 
 #define set_temp(value, reg) \
-static ssize_t set_##value(struct device *dev, const char *buf, \
+static ssize_t set_##value(struct device *dev, struct device_attribute *attr, const char *buf, \
        size_t count) \
 { \
        struct i2c_client *client = to_i2c_client(dev); \
 set_temp(temp1_min, LM92_REG_TEMP_LOW);
 set_temp(temp1_max, LM92_REG_TEMP_HIGH);
 
-static ssize_t show_temp1_crit_hyst(struct device *dev, char *buf)
+static ssize_t show_temp1_crit_hyst(struct device *dev, struct device_attribute *attr, char *buf)
 {
        struct lm92_data *data = lm92_update_device(dev);
        return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp1_crit)
                       - TEMP_FROM_REG(data->temp1_hyst));
 }
-static ssize_t show_temp1_max_hyst(struct device *dev, char *buf)
+static ssize_t show_temp1_max_hyst(struct device *dev, struct device_attribute *attr, char *buf)
 {
        struct lm92_data *data = lm92_update_device(dev);
        return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp1_max)
                       - TEMP_FROM_REG(data->temp1_hyst));
 }
-static ssize_t show_temp1_min_hyst(struct device *dev, char *buf)
+static ssize_t show_temp1_min_hyst(struct device *dev, struct device_attribute *attr, char *buf)
 {
        struct lm92_data *data = lm92_update_device(dev);
        return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp1_min)
                       + TEMP_FROM_REG(data->temp1_hyst));
 }
 
-static ssize_t set_temp1_crit_hyst(struct device *dev, const char *buf,
+static ssize_t set_temp1_crit_hyst(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 show_alarms(struct device *dev, char *buf)
+static ssize_t show_alarms(struct device *dev, struct device_attribute *attr, char *buf)
 {
        struct lm92_data *data = lm92_update_device(dev);
        return sprintf(buf, "%d\n", ALARMS_FROM_REG(data->temp1_input));
 
  */
 
 #define show_temp(value) \
-static ssize_t show_##value(struct device *dev, char *buf) \
+static ssize_t show_##value(struct device *dev, struct device_attribute *attr, char *buf) \
 { \
        struct max1619_data *data = max1619_update_device(dev); \
        return sprintf(buf, "%d\n", TEMP_FROM_REG(data->value)); \
 show_temp(temp_hyst2);
 
 #define set_temp2(value, reg) \
-static ssize_t set_##value(struct device *dev, const char *buf, \
+static ssize_t set_##value(struct device *dev, struct device_attribute *attr, const char *buf, \
        size_t count) \
 { \
        struct i2c_client *client = to_i2c_client(dev); \
 set_temp2(temp_crit2, MAX1619_REG_W_REMOTE_CRIT);
 set_temp2(temp_hyst2, MAX1619_REG_W_TCRIT_HYST);
 
-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 max1619_data *data = max1619_update_device(dev);
        return sprintf(buf, "%d\n", data->alarms);