|
@@ -3364,6 +3364,32 @@ nct6775_check_fan_inputs(const struct nct6775_sio_data *sio_data,
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+static void add_temp_sensors(struct nct6775_data *data, const u16 *regp,
|
|
|
+ int *available, int *mask)
|
|
|
+{
|
|
|
+ int i;
|
|
|
+ u8 src;
|
|
|
+
|
|
|
+ for (i = 0; i < data->pwm_num && *available; i++) {
|
|
|
+ int index;
|
|
|
+
|
|
|
+ if (!regp[i])
|
|
|
+ continue;
|
|
|
+ src = nct6775_read_value(data, regp[i]);
|
|
|
+ src &= 0x1f;
|
|
|
+ if (!src || (*mask & (1 << src)))
|
|
|
+ continue;
|
|
|
+ if (src >= data->temp_label_num ||
|
|
|
+ !strlen(data->temp_label[src]))
|
|
|
+ continue;
|
|
|
+
|
|
|
+ index = __ffs(*available);
|
|
|
+ nct6775_write_value(data, data->REG_TEMP_SOURCE[index], src);
|
|
|
+ *available &= ~(1 << index);
|
|
|
+ *mask |= 1 << src;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
static int nct6775_probe(struct platform_device *pdev)
|
|
|
{
|
|
|
struct device *dev = &pdev->dev;
|
|
@@ -3614,6 +3640,13 @@ static int nct6775_probe(struct platform_device *pdev)
|
|
|
mask |= 1 << src;
|
|
|
}
|
|
|
|
|
|
+ /*
|
|
|
+ * Now find unmonitored temperature registers and enable monitoring
|
|
|
+ * if additional monitoring registers are available.
|
|
|
+ */
|
|
|
+ add_temp_sensors(data, data->REG_TEMP_SEL, &available, &mask);
|
|
|
+ add_temp_sensors(data, data->REG_WEIGHT_TEMP_SEL, &available, &mask);
|
|
|
+
|
|
|
mask = 0;
|
|
|
s = NUM_TEMP_FIXED; /* First dynamic temperature attribute */
|
|
|
for (i = 0; i < num_reg_temp; i++) {
|