Loading drivers/hwmon/it87.c +56 −68 Original line number Diff line number Diff line Loading @@ -471,6 +471,7 @@ struct it87_data { unsigned long last_updated; /* In jiffies */ u16 in_scaled; /* Internal voltage sensors are scaled */ u16 has_in; /* Bitfield, voltage sensors enabled */ u8 in[10][3]; /* [nr][0]=in, [1]=min, [2]=max */ u8 has_fan; /* Bitfield, fans enabled */ u16 fan[6][2]; /* Register values, [nr][0]=fan, [1]=min */ Loading @@ -482,6 +483,7 @@ struct it87_data { u8 vid; /* Register encoding, combined */ u8 vrm; u32 alarms; /* Register encoding, combined */ bool has_beep; /* true if beep supported */ u8 beeps; /* Register encoding */ u8 fan_main_ctrl; /* Register value */ u8 fan_ctl; /* Register value */ Loading Loading @@ -1751,74 +1753,85 @@ static ssize_t show_name(struct device *dev, struct device_attribute } static DEVICE_ATTR(name, S_IRUGO, show_name, NULL); static struct attribute *it87_attributes_in[10][5] = { static umode_t it87_in_is_visible(struct kobject *kobj, struct attribute *attr, int index) { struct device *dev = container_of(kobj, struct device, kobj); struct it87_data *data = dev_get_drvdata(dev); int i = index / 5; /* voltage index */ int a = index % 5; /* attribute index */ if (index >= 40) { /* in8, in9 only have input attributes */ i = index - 40 + 8; a = 0; } if (!(data->has_in & (1 << i))) return 0; if (a == 4 && !data->has_beep) return 0; return attr->mode; } static struct attribute *it87_attributes_in[] = { &sensor_dev_attr_in0_input.dev_attr.attr, &sensor_dev_attr_in0_min.dev_attr.attr, &sensor_dev_attr_in0_max.dev_attr.attr, &sensor_dev_attr_in0_alarm.dev_attr.attr, NULL }, { &sensor_dev_attr_in0_beep.dev_attr.attr, /* 4 */ &sensor_dev_attr_in1_input.dev_attr.attr, &sensor_dev_attr_in1_min.dev_attr.attr, &sensor_dev_attr_in1_max.dev_attr.attr, &sensor_dev_attr_in1_alarm.dev_attr.attr, NULL }, { &sensor_dev_attr_in1_beep.dev_attr.attr, /* 9 */ &sensor_dev_attr_in2_input.dev_attr.attr, &sensor_dev_attr_in2_min.dev_attr.attr, &sensor_dev_attr_in2_max.dev_attr.attr, &sensor_dev_attr_in2_alarm.dev_attr.attr, NULL }, { &sensor_dev_attr_in2_beep.dev_attr.attr, /* 14 */ &sensor_dev_attr_in3_input.dev_attr.attr, &sensor_dev_attr_in3_min.dev_attr.attr, &sensor_dev_attr_in3_max.dev_attr.attr, &sensor_dev_attr_in3_alarm.dev_attr.attr, NULL }, { &sensor_dev_attr_in3_beep.dev_attr.attr, /* 19 */ &sensor_dev_attr_in4_input.dev_attr.attr, &sensor_dev_attr_in4_min.dev_attr.attr, &sensor_dev_attr_in4_max.dev_attr.attr, &sensor_dev_attr_in4_alarm.dev_attr.attr, NULL }, { &sensor_dev_attr_in4_beep.dev_attr.attr, /* 24 */ &sensor_dev_attr_in5_input.dev_attr.attr, &sensor_dev_attr_in5_min.dev_attr.attr, &sensor_dev_attr_in5_max.dev_attr.attr, &sensor_dev_attr_in5_alarm.dev_attr.attr, NULL }, { &sensor_dev_attr_in5_beep.dev_attr.attr, /* 29 */ &sensor_dev_attr_in6_input.dev_attr.attr, &sensor_dev_attr_in6_min.dev_attr.attr, &sensor_dev_attr_in6_max.dev_attr.attr, &sensor_dev_attr_in6_alarm.dev_attr.attr, NULL }, { &sensor_dev_attr_in6_beep.dev_attr.attr, /* 34 */ &sensor_dev_attr_in7_input.dev_attr.attr, &sensor_dev_attr_in7_min.dev_attr.attr, &sensor_dev_attr_in7_max.dev_attr.attr, &sensor_dev_attr_in7_alarm.dev_attr.attr, NULL }, { &sensor_dev_attr_in8_input.dev_attr.attr, NULL }, { &sensor_dev_attr_in9_input.dev_attr.attr, NULL } }; &sensor_dev_attr_in7_beep.dev_attr.attr, /* 39 */ &sensor_dev_attr_in8_input.dev_attr.attr, /* 40 */ &sensor_dev_attr_in9_input.dev_attr.attr, /* 41 */ }; static const struct attribute_group it87_group_in[10] = { { .attrs = it87_attributes_in[0] }, { .attrs = it87_attributes_in[1] }, { .attrs = it87_attributes_in[2] }, { .attrs = it87_attributes_in[3] }, { .attrs = it87_attributes_in[4] }, { .attrs = it87_attributes_in[5] }, { .attrs = it87_attributes_in[6] }, { .attrs = it87_attributes_in[7] }, { .attrs = it87_attributes_in[8] }, { .attrs = it87_attributes_in[9] }, static const struct attribute_group it87_group_in = { .attrs = it87_attributes_in, .is_visible = it87_in_is_visible, }; static struct attribute *it87_attributes_temp[3][6] = { Loading Loading @@ -1868,19 +1881,6 @@ static const struct attribute_group it87_group = { .attrs = it87_attributes, }; static struct attribute *it87_attributes_in_beep[] = { &sensor_dev_attr_in0_beep.dev_attr.attr, &sensor_dev_attr_in1_beep.dev_attr.attr, &sensor_dev_attr_in2_beep.dev_attr.attr, &sensor_dev_attr_in3_beep.dev_attr.attr, &sensor_dev_attr_in4_beep.dev_attr.attr, &sensor_dev_attr_in5_beep.dev_attr.attr, &sensor_dev_attr_in6_beep.dev_attr.attr, &sensor_dev_attr_in7_beep.dev_attr.attr, NULL, NULL, }; static struct attribute *it87_attributes_temp_beep[] = { &sensor_dev_attr_temp1_beep.dev_attr.attr, &sensor_dev_attr_temp2_beep.dev_attr.attr, Loading Loading @@ -2435,14 +2435,8 @@ static void it87_remove_files(struct device *dev) int i; sysfs_remove_group(&dev->kobj, &it87_group); for (i = 0; i < 10; i++) { if (sio_data->skip_in & (1 << i)) continue; sysfs_remove_group(&dev->kobj, &it87_group_in[i]); if (it87_attributes_in_beep[i]) sysfs_remove_file(&dev->kobj, it87_attributes_in_beep[i]); } sysfs_remove_group(&dev->kobj, &it87_group_in); for (i = 0; i < 3; i++) { if (!(data->has_temp & (1 << i))) continue; Loading Loading @@ -2736,6 +2730,10 @@ static int it87_probe(struct platform_device *pdev) data->has_temp &= ~(1 << 2); } data->has_in = 0x3ff & ~sio_data->skip_in; data->has_beep = !!sio_data->beep_pin; /* Initialize the IT87 chip */ it87_init_device(pdev); Loading @@ -2744,19 +2742,9 @@ static int it87_probe(struct platform_device *pdev) if (err) return err; for (i = 0; i < 10; i++) { if (sio_data->skip_in & (1 << i)) continue; err = sysfs_create_group(&dev->kobj, &it87_group_in[i]); err = sysfs_create_group(&dev->kobj, &it87_group_in); if (err) goto error; if (sio_data->beep_pin && it87_attributes_in_beep[i]) { err = sysfs_create_file(&dev->kobj, it87_attributes_in_beep[i]); if (err) goto error; } } for (i = 0; i < 3; i++) { if (!(data->has_temp & (1 << i))) Loading Loading
drivers/hwmon/it87.c +56 −68 Original line number Diff line number Diff line Loading @@ -471,6 +471,7 @@ struct it87_data { unsigned long last_updated; /* In jiffies */ u16 in_scaled; /* Internal voltage sensors are scaled */ u16 has_in; /* Bitfield, voltage sensors enabled */ u8 in[10][3]; /* [nr][0]=in, [1]=min, [2]=max */ u8 has_fan; /* Bitfield, fans enabled */ u16 fan[6][2]; /* Register values, [nr][0]=fan, [1]=min */ Loading @@ -482,6 +483,7 @@ struct it87_data { u8 vid; /* Register encoding, combined */ u8 vrm; u32 alarms; /* Register encoding, combined */ bool has_beep; /* true if beep supported */ u8 beeps; /* Register encoding */ u8 fan_main_ctrl; /* Register value */ u8 fan_ctl; /* Register value */ Loading Loading @@ -1751,74 +1753,85 @@ static ssize_t show_name(struct device *dev, struct device_attribute } static DEVICE_ATTR(name, S_IRUGO, show_name, NULL); static struct attribute *it87_attributes_in[10][5] = { static umode_t it87_in_is_visible(struct kobject *kobj, struct attribute *attr, int index) { struct device *dev = container_of(kobj, struct device, kobj); struct it87_data *data = dev_get_drvdata(dev); int i = index / 5; /* voltage index */ int a = index % 5; /* attribute index */ if (index >= 40) { /* in8, in9 only have input attributes */ i = index - 40 + 8; a = 0; } if (!(data->has_in & (1 << i))) return 0; if (a == 4 && !data->has_beep) return 0; return attr->mode; } static struct attribute *it87_attributes_in[] = { &sensor_dev_attr_in0_input.dev_attr.attr, &sensor_dev_attr_in0_min.dev_attr.attr, &sensor_dev_attr_in0_max.dev_attr.attr, &sensor_dev_attr_in0_alarm.dev_attr.attr, NULL }, { &sensor_dev_attr_in0_beep.dev_attr.attr, /* 4 */ &sensor_dev_attr_in1_input.dev_attr.attr, &sensor_dev_attr_in1_min.dev_attr.attr, &sensor_dev_attr_in1_max.dev_attr.attr, &sensor_dev_attr_in1_alarm.dev_attr.attr, NULL }, { &sensor_dev_attr_in1_beep.dev_attr.attr, /* 9 */ &sensor_dev_attr_in2_input.dev_attr.attr, &sensor_dev_attr_in2_min.dev_attr.attr, &sensor_dev_attr_in2_max.dev_attr.attr, &sensor_dev_attr_in2_alarm.dev_attr.attr, NULL }, { &sensor_dev_attr_in2_beep.dev_attr.attr, /* 14 */ &sensor_dev_attr_in3_input.dev_attr.attr, &sensor_dev_attr_in3_min.dev_attr.attr, &sensor_dev_attr_in3_max.dev_attr.attr, &sensor_dev_attr_in3_alarm.dev_attr.attr, NULL }, { &sensor_dev_attr_in3_beep.dev_attr.attr, /* 19 */ &sensor_dev_attr_in4_input.dev_attr.attr, &sensor_dev_attr_in4_min.dev_attr.attr, &sensor_dev_attr_in4_max.dev_attr.attr, &sensor_dev_attr_in4_alarm.dev_attr.attr, NULL }, { &sensor_dev_attr_in4_beep.dev_attr.attr, /* 24 */ &sensor_dev_attr_in5_input.dev_attr.attr, &sensor_dev_attr_in5_min.dev_attr.attr, &sensor_dev_attr_in5_max.dev_attr.attr, &sensor_dev_attr_in5_alarm.dev_attr.attr, NULL }, { &sensor_dev_attr_in5_beep.dev_attr.attr, /* 29 */ &sensor_dev_attr_in6_input.dev_attr.attr, &sensor_dev_attr_in6_min.dev_attr.attr, &sensor_dev_attr_in6_max.dev_attr.attr, &sensor_dev_attr_in6_alarm.dev_attr.attr, NULL }, { &sensor_dev_attr_in6_beep.dev_attr.attr, /* 34 */ &sensor_dev_attr_in7_input.dev_attr.attr, &sensor_dev_attr_in7_min.dev_attr.attr, &sensor_dev_attr_in7_max.dev_attr.attr, &sensor_dev_attr_in7_alarm.dev_attr.attr, NULL }, { &sensor_dev_attr_in8_input.dev_attr.attr, NULL }, { &sensor_dev_attr_in9_input.dev_attr.attr, NULL } }; &sensor_dev_attr_in7_beep.dev_attr.attr, /* 39 */ &sensor_dev_attr_in8_input.dev_attr.attr, /* 40 */ &sensor_dev_attr_in9_input.dev_attr.attr, /* 41 */ }; static const struct attribute_group it87_group_in[10] = { { .attrs = it87_attributes_in[0] }, { .attrs = it87_attributes_in[1] }, { .attrs = it87_attributes_in[2] }, { .attrs = it87_attributes_in[3] }, { .attrs = it87_attributes_in[4] }, { .attrs = it87_attributes_in[5] }, { .attrs = it87_attributes_in[6] }, { .attrs = it87_attributes_in[7] }, { .attrs = it87_attributes_in[8] }, { .attrs = it87_attributes_in[9] }, static const struct attribute_group it87_group_in = { .attrs = it87_attributes_in, .is_visible = it87_in_is_visible, }; static struct attribute *it87_attributes_temp[3][6] = { Loading Loading @@ -1868,19 +1881,6 @@ static const struct attribute_group it87_group = { .attrs = it87_attributes, }; static struct attribute *it87_attributes_in_beep[] = { &sensor_dev_attr_in0_beep.dev_attr.attr, &sensor_dev_attr_in1_beep.dev_attr.attr, &sensor_dev_attr_in2_beep.dev_attr.attr, &sensor_dev_attr_in3_beep.dev_attr.attr, &sensor_dev_attr_in4_beep.dev_attr.attr, &sensor_dev_attr_in5_beep.dev_attr.attr, &sensor_dev_attr_in6_beep.dev_attr.attr, &sensor_dev_attr_in7_beep.dev_attr.attr, NULL, NULL, }; static struct attribute *it87_attributes_temp_beep[] = { &sensor_dev_attr_temp1_beep.dev_attr.attr, &sensor_dev_attr_temp2_beep.dev_attr.attr, Loading Loading @@ -2435,14 +2435,8 @@ static void it87_remove_files(struct device *dev) int i; sysfs_remove_group(&dev->kobj, &it87_group); for (i = 0; i < 10; i++) { if (sio_data->skip_in & (1 << i)) continue; sysfs_remove_group(&dev->kobj, &it87_group_in[i]); if (it87_attributes_in_beep[i]) sysfs_remove_file(&dev->kobj, it87_attributes_in_beep[i]); } sysfs_remove_group(&dev->kobj, &it87_group_in); for (i = 0; i < 3; i++) { if (!(data->has_temp & (1 << i))) continue; Loading Loading @@ -2736,6 +2730,10 @@ static int it87_probe(struct platform_device *pdev) data->has_temp &= ~(1 << 2); } data->has_in = 0x3ff & ~sio_data->skip_in; data->has_beep = !!sio_data->beep_pin; /* Initialize the IT87 chip */ it87_init_device(pdev); Loading @@ -2744,19 +2742,9 @@ static int it87_probe(struct platform_device *pdev) if (err) return err; for (i = 0; i < 10; i++) { if (sio_data->skip_in & (1 << i)) continue; err = sysfs_create_group(&dev->kobj, &it87_group_in[i]); err = sysfs_create_group(&dev->kobj, &it87_group_in); if (err) goto error; if (sio_data->beep_pin && it87_attributes_in_beep[i]) { err = sysfs_create_file(&dev->kobj, it87_attributes_in_beep[i]); if (err) goto error; } } for (i = 0; i < 3; i++) { if (!(data->has_temp & (1 << i))) Loading