Lines Matching refs:data

192 #define NCT6775_AUTO_TEMP(data, nr, p)	((data)->REG_AUTO_TEMP[nr] + (p))  argument
193 #define NCT6775_AUTO_PWM(data, nr, p) ((data)->REG_AUTO_PWM[nr] + (p)) argument
1077 static int nct6775_add_template_attr_group(struct device *dev, struct nct6775_data *data, in nct6775_add_template_attr_group() argument
1148 return nct6775_add_attr_group(data, group); in nct6775_add_template_attr_group()
1151 bool nct6775_reg_is_word_sized(struct nct6775_data *data, u16 reg) in nct6775_reg_is_word_sized() argument
1153 switch (data->kind) { in nct6775_reg_is_word_sized()
1212 static int nct6775_read_temp(struct nct6775_data *data, u16 reg, u16 *val) in nct6775_read_temp() argument
1216 err = nct6775_read_value(data, reg, val); in nct6775_read_temp()
1220 if (!nct6775_reg_is_word_sized(data, reg)) in nct6775_read_temp()
1227 static int nct6775_write_fan_div(struct nct6775_data *data, int nr) in nct6775_write_fan_div() argument
1234 err = nct6775_read_value(data, fandiv_reg, &reg); in nct6775_write_fan_div()
1238 reg |= (data->fan_div[nr] & 0x7) << oddshift; in nct6775_write_fan_div()
1239 return nct6775_write_value(data, fandiv_reg, reg); in nct6775_write_fan_div()
1242 static int nct6775_write_fan_div_common(struct nct6775_data *data, int nr) in nct6775_write_fan_div_common() argument
1244 if (data->kind == nct6775) in nct6775_write_fan_div_common()
1245 return nct6775_write_fan_div(data, nr); in nct6775_write_fan_div_common()
1249 static int nct6775_update_fan_div(struct nct6775_data *data) in nct6775_update_fan_div() argument
1254 err = nct6775_read_value(data, NCT6775_REG_FANDIV1, &i); in nct6775_update_fan_div()
1257 data->fan_div[0] = i & 0x7; in nct6775_update_fan_div()
1258 data->fan_div[1] = (i & 0x70) >> 4; in nct6775_update_fan_div()
1259 err = nct6775_read_value(data, NCT6775_REG_FANDIV2, &i); in nct6775_update_fan_div()
1262 data->fan_div[2] = i & 0x7; in nct6775_update_fan_div()
1263 if (data->has_fan & BIT(3)) in nct6775_update_fan_div()
1264 data->fan_div[3] = (i & 0x70) >> 4; in nct6775_update_fan_div()
1269 static int nct6775_update_fan_div_common(struct nct6775_data *data) in nct6775_update_fan_div_common() argument
1271 if (data->kind == nct6775) in nct6775_update_fan_div_common()
1272 return nct6775_update_fan_div(data); in nct6775_update_fan_div_common()
1276 static int nct6775_init_fan_div(struct nct6775_data *data) in nct6775_init_fan_div() argument
1280 err = nct6775_update_fan_div_common(data); in nct6775_init_fan_div()
1290 for (i = 0; i < ARRAY_SIZE(data->fan_div); i++) { in nct6775_init_fan_div()
1291 if (!(data->has_fan & BIT(i))) in nct6775_init_fan_div()
1293 if (data->fan_div[i] == 0) { in nct6775_init_fan_div()
1294 data->fan_div[i] = 7; in nct6775_init_fan_div()
1295 err = nct6775_write_fan_div_common(data, i); in nct6775_init_fan_div()
1305 struct nct6775_data *data) in nct6775_init_fan_common() argument
1310 if (data->has_fan_div) { in nct6775_init_fan_common()
1311 err = nct6775_init_fan_div(data); in nct6775_init_fan_common()
1320 for (i = 0; i < ARRAY_SIZE(data->fan_min); i++) { in nct6775_init_fan_common()
1321 if (data->has_fan_min & BIT(i)) { in nct6775_init_fan_common()
1322 err = nct6775_read_value(data, data->REG_FAN_MIN[i], &reg); in nct6775_init_fan_common()
1326 err = nct6775_write_value(data, data->REG_FAN_MIN[i], in nct6775_init_fan_common()
1327 data->has_fan_div ? 0xff : 0xff1f); in nct6775_init_fan_common()
1338 struct nct6775_data *data, int nr, u16 reg) in nct6775_select_fan_div() argument
1341 u8 fan_div = data->fan_div[nr]; in nct6775_select_fan_div()
1344 if (!data->has_fan_div) in nct6775_select_fan_div()
1357 if (fan_div != data->fan_div[nr]) { in nct6775_select_fan_div()
1359 nr + 1, div_from_reg(data->fan_div[nr]), in nct6775_select_fan_div()
1363 if (data->has_fan_min & BIT(nr)) { in nct6775_select_fan_div()
1364 fan_min = data->fan_min[nr]; in nct6775_select_fan_div()
1365 if (fan_div > data->fan_div[nr]) { in nct6775_select_fan_div()
1375 if (fan_min != data->fan_min[nr]) { in nct6775_select_fan_div()
1376 data->fan_min[nr] = fan_min; in nct6775_select_fan_div()
1377 err = nct6775_write_value(data, data->REG_FAN_MIN[nr], fan_min); in nct6775_select_fan_div()
1382 data->fan_div[nr] = fan_div; in nct6775_select_fan_div()
1383 err = nct6775_write_fan_div_common(data, nr); in nct6775_select_fan_div()
1393 struct nct6775_data *data = dev_get_drvdata(dev); in nct6775_update_pwm() local
1398 for (i = 0; i < data->pwm_num; i++) { in nct6775_update_pwm()
1399 if (!(data->has_pwm & BIT(i))) in nct6775_update_pwm()
1402 err = nct6775_read_value(data, data->REG_PWM_MODE[i], &reg); in nct6775_update_pwm()
1405 duty_is_dc = data->REG_PWM_MODE[i] && (reg & data->PWM_MODE_MASK[i]); in nct6775_update_pwm()
1406 data->pwm_mode[i] = !duty_is_dc; in nct6775_update_pwm()
1408 err = nct6775_read_value(data, data->REG_FAN_MODE[i], &fanmodecfg); in nct6775_update_pwm()
1411 for (j = 0; j < ARRAY_SIZE(data->REG_PWM); j++) { in nct6775_update_pwm()
1412 if (data->REG_PWM[j] && data->REG_PWM[j][i]) { in nct6775_update_pwm()
1413 err = nct6775_read_value(data, data->REG_PWM[j][i], &reg); in nct6775_update_pwm()
1416 data->pwm[j][i] = reg; in nct6775_update_pwm()
1420 data->pwm_enable[i] = reg_to_pwm_enable(data->pwm[0][i], in nct6775_update_pwm()
1423 if (!data->temp_tolerance[0][i] || in nct6775_update_pwm()
1424 data->pwm_enable[i] != speed_cruise) in nct6775_update_pwm()
1425 data->temp_tolerance[0][i] = fanmodecfg & 0x0f; in nct6775_update_pwm()
1426 if (!data->target_speed_tolerance[i] || in nct6775_update_pwm()
1427 data->pwm_enable[i] == speed_cruise) { in nct6775_update_pwm()
1430 if (data->REG_TOLERANCE_H) { in nct6775_update_pwm()
1431 err = nct6775_read_value(data, data->REG_TOLERANCE_H[i], &reg); in nct6775_update_pwm()
1436 data->target_speed_tolerance[i] = t; in nct6775_update_pwm()
1439 err = nct6775_read_value(data, data->REG_CRITICAL_TEMP_TOLERANCE[i], &reg); in nct6775_update_pwm()
1442 data->temp_tolerance[1][i] = reg; in nct6775_update_pwm()
1444 err = nct6775_read_value(data, data->REG_TEMP_SEL[i], &reg); in nct6775_update_pwm()
1447 data->pwm_temp_sel[i] = reg & 0x1f; in nct6775_update_pwm()
1450 data->pwm[2][i] = 0; in nct6775_update_pwm()
1452 if (!data->REG_WEIGHT_TEMP_SEL[i]) in nct6775_update_pwm()
1455 err = nct6775_read_value(data, data->REG_WEIGHT_TEMP_SEL[i], &reg); in nct6775_update_pwm()
1458 data->pwm_weight_temp_sel[i] = reg & 0x1f; in nct6775_update_pwm()
1461 data->pwm_weight_temp_sel[i] = 0; in nct6775_update_pwm()
1464 for (j = 0; j < ARRAY_SIZE(data->weight_temp); j++) { in nct6775_update_pwm()
1465 err = nct6775_read_value(data, data->REG_WEIGHT_TEMP[j][i], &reg); in nct6775_update_pwm()
1468 data->weight_temp[j][i] = reg; in nct6775_update_pwm()
1477 struct nct6775_data *data = dev_get_drvdata(dev); in nct6775_update_pwm_limits() local
1481 for (i = 0; i < data->pwm_num; i++) { in nct6775_update_pwm_limits()
1482 if (!(data->has_pwm & BIT(i))) in nct6775_update_pwm_limits()
1485 for (j = 0; j < ARRAY_SIZE(data->fan_time); j++) { in nct6775_update_pwm_limits()
1486 err = nct6775_read_value(data, data->REG_FAN_TIME[j][i], &reg); in nct6775_update_pwm_limits()
1489 data->fan_time[j][i] = reg; in nct6775_update_pwm_limits()
1492 err = nct6775_read_value(data, data->REG_TARGET[i], &reg_t); in nct6775_update_pwm_limits()
1497 if (!data->target_temp[i] || in nct6775_update_pwm_limits()
1498 data->pwm_enable[i] == thermal_cruise) in nct6775_update_pwm_limits()
1499 data->target_temp[i] = reg_t & data->target_temp_mask; in nct6775_update_pwm_limits()
1500 if (!data->target_speed[i] || in nct6775_update_pwm_limits()
1501 data->pwm_enable[i] == speed_cruise) { in nct6775_update_pwm_limits()
1502 if (data->REG_TOLERANCE_H) { in nct6775_update_pwm_limits()
1503 err = nct6775_read_value(data, data->REG_TOLERANCE_H[i], &reg); in nct6775_update_pwm_limits()
1508 data->target_speed[i] = reg_t; in nct6775_update_pwm_limits()
1511 for (j = 0; j < data->auto_pwm_num; j++) { in nct6775_update_pwm_limits()
1512 err = nct6775_read_value(data, NCT6775_AUTO_PWM(data, i, j), &reg); in nct6775_update_pwm_limits()
1515 data->auto_pwm[i][j] = reg; in nct6775_update_pwm_limits()
1517 err = nct6775_read_value(data, NCT6775_AUTO_TEMP(data, i, j), &reg); in nct6775_update_pwm_limits()
1520 data->auto_temp[i][j] = reg; in nct6775_update_pwm_limits()
1524 err = nct6775_read_value(data, data->REG_CRITICAL_TEMP[i], &reg); in nct6775_update_pwm_limits()
1527 data->auto_temp[i][data->auto_pwm_num] = reg; in nct6775_update_pwm_limits()
1529 switch (data->kind) { in nct6775_update_pwm_limits()
1531 err = nct6775_read_value(data, NCT6775_REG_CRITICAL_ENAB[i], &reg); in nct6775_update_pwm_limits()
1534 data->auto_pwm[i][data->auto_pwm_num] = in nct6775_update_pwm_limits()
1538 data->auto_pwm[i][data->auto_pwm_num] = 0xff; in nct6775_update_pwm_limits()
1551 err = nct6775_read_value(data, data->REG_CRITICAL_PWM_ENABLE[i], &reg); in nct6775_update_pwm_limits()
1554 if (reg & data->CRITICAL_PWM_ENABLE_MASK) { in nct6775_update_pwm_limits()
1555 err = nct6775_read_value(data, data->REG_CRITICAL_PWM[i], &reg); in nct6775_update_pwm_limits()
1561 data->auto_pwm[i][data->auto_pwm_num] = reg; in nct6775_update_pwm_limits()
1571 struct nct6775_data *data = dev_get_drvdata(dev); in nct6775_update_device() local
1575 mutex_lock(&data->update_lock); in nct6775_update_device()
1577 if (time_after(jiffies, data->last_updated + HZ + HZ / 2) in nct6775_update_device()
1578 || !data->valid) { in nct6775_update_device()
1580 err = nct6775_update_fan_div_common(data); in nct6775_update_device()
1585 for (i = 0; i < data->in_num; i++) { in nct6775_update_device()
1586 if (!(data->have_in & BIT(i))) in nct6775_update_device()
1589 err = nct6775_read_value(data, data->REG_VIN[i], &reg); in nct6775_update_device()
1592 data->in[i][0] = reg; in nct6775_update_device()
1594 err = nct6775_read_value(data, data->REG_IN_MINMAX[0][i], &reg); in nct6775_update_device()
1597 data->in[i][1] = reg; in nct6775_update_device()
1599 err = nct6775_read_value(data, data->REG_IN_MINMAX[1][i], &reg); in nct6775_update_device()
1602 data->in[i][2] = reg; in nct6775_update_device()
1606 for (i = 0; i < ARRAY_SIZE(data->rpm); i++) { in nct6775_update_device()
1607 if (!(data->has_fan & BIT(i))) in nct6775_update_device()
1610 err = nct6775_read_value(data, data->REG_FAN[i], &reg); in nct6775_update_device()
1613 data->rpm[i] = data->fan_from_reg(reg, in nct6775_update_device()
1614 data->fan_div[i]); in nct6775_update_device()
1616 if (data->has_fan_min & BIT(i)) { in nct6775_update_device()
1617 err = nct6775_read_value(data, data->REG_FAN_MIN[i], &reg); in nct6775_update_device()
1620 data->fan_min[i] = reg; in nct6775_update_device()
1623 if (data->REG_FAN_PULSES[i]) { in nct6775_update_device()
1624 err = nct6775_read_value(data, data->REG_FAN_PULSES[i], &reg); in nct6775_update_device()
1627 data->fan_pulses[i] = (reg >> data->FAN_PULSE_SHIFT[i]) & 0x03; in nct6775_update_device()
1630 err = nct6775_select_fan_div(dev, data, i, reg); in nct6775_update_device()
1645 if (!(data->have_temp & BIT(i))) in nct6775_update_device()
1647 for (j = 0; j < ARRAY_SIZE(data->reg_temp); j++) { in nct6775_update_device()
1648 if (data->reg_temp[j][i]) { in nct6775_update_device()
1649 err = nct6775_read_temp(data, data->reg_temp[j][i], &reg); in nct6775_update_device()
1652 data->temp[j][i] = reg; in nct6775_update_device()
1656 !(data->have_temp_fixed & BIT(i))) in nct6775_update_device()
1658 err = nct6775_read_value(data, data->REG_TEMP_OFFSET[i], &reg); in nct6775_update_device()
1661 data->temp_offset[i] = reg; in nct6775_update_device()
1665 if (!(data->have_tsi_temp & BIT(i))) in nct6775_update_device()
1667 err = nct6775_read_value(data, data->REG_TSI_TEMP[i], &reg); in nct6775_update_device()
1670 data->tsi_temp[i] = reg; in nct6775_update_device()
1673 data->alarms = 0; in nct6775_update_device()
1677 if (!data->REG_ALARM[i]) in nct6775_update_device()
1679 err = nct6775_read_value(data, data->REG_ALARM[i], &alarm); in nct6775_update_device()
1682 data->alarms |= ((u64)alarm) << (i << 3); in nct6775_update_device()
1685 data->beeps = 0; in nct6775_update_device()
1689 if (!data->REG_BEEP[i]) in nct6775_update_device()
1691 err = nct6775_read_value(data, data->REG_BEEP[i], &beep); in nct6775_update_device()
1694 data->beeps |= ((u64)beep) << (i << 3); in nct6775_update_device()
1697 data->last_updated = jiffies; in nct6775_update_device()
1698 data->valid = true; in nct6775_update_device()
1701 mutex_unlock(&data->update_lock); in nct6775_update_device()
1702 return err ? ERR_PTR(err) : data; in nct6775_update_device()
1712 struct nct6775_data *data = nct6775_update_device(dev); in show_in_reg() local
1717 if (IS_ERR(data)) in show_in_reg()
1718 return PTR_ERR(data); in show_in_reg()
1721 in_from_reg(data->in[nr][index], nr, data->scale_in)); in show_in_reg()
1728 struct nct6775_data *data = dev_get_drvdata(dev); in store_in_reg() local
1738 mutex_lock(&data->update_lock); in store_in_reg()
1739 data->in[nr][index] = in_to_reg(val, nr, data->scale_in); in store_in_reg()
1740 err = nct6775_write_value(data, data->REG_IN_MINMAX[index - 1][nr], data->in[nr][index]); in store_in_reg()
1741 mutex_unlock(&data->update_lock); in store_in_reg()
1748 struct nct6775_data *data = nct6775_update_device(dev); in nct6775_show_alarm() local
1752 if (IS_ERR(data)) in nct6775_show_alarm()
1753 return PTR_ERR(data); in nct6775_show_alarm()
1755 nr = data->ALARM_BITS[sattr->index]; in nct6775_show_alarm()
1757 (unsigned int)((data->alarms >> nr) & 0x01)); in nct6775_show_alarm()
1761 static int find_temp_source(struct nct6775_data *data, int index, int count) in find_temp_source() argument
1763 int source = data->temp_src[index]; in find_temp_source()
1769 err = nct6775_read_value(data, data->REG_TEMP_SOURCE[nr], &src); in find_temp_source()
1782 struct nct6775_data *data = nct6775_update_device(dev); in show_temp_alarm() local
1786 if (IS_ERR(data)) in show_temp_alarm()
1787 return PTR_ERR(data); in show_temp_alarm()
1793 nr = find_temp_source(data, sattr->index, data->num_temp_alarms); in show_temp_alarm()
1795 int bit = data->ALARM_BITS[nr + TEMP_ALARM_BASE]; in show_temp_alarm()
1797 alarm = (data->alarms >> bit) & 0x01; in show_temp_alarm()
1806 struct nct6775_data *data = nct6775_update_device(dev); in nct6775_show_beep() local
1809 if (IS_ERR(data)) in nct6775_show_beep()
1810 return PTR_ERR(data); in nct6775_show_beep()
1812 nr = data->BEEP_BITS[sattr->index]; in nct6775_show_beep()
1815 (unsigned int)((data->beeps >> nr) & 0x01)); in nct6775_show_beep()
1823 struct nct6775_data *data = dev_get_drvdata(dev); in nct6775_store_beep() local
1824 int nr = data->BEEP_BITS[sattr->index]; in nct6775_store_beep()
1835 mutex_lock(&data->update_lock); in nct6775_store_beep()
1837 data->beeps |= (1ULL << nr); in nct6775_store_beep()
1839 data->beeps &= ~(1ULL << nr); in nct6775_store_beep()
1840 err = nct6775_write_value(data, data->REG_BEEP[regindex], in nct6775_store_beep()
1841 (data->beeps >> (regindex << 3)) & 0xff); in nct6775_store_beep()
1842 mutex_unlock(&data->update_lock); in nct6775_store_beep()
1851 struct nct6775_data *data = nct6775_update_device(dev); in show_temp_beep() local
1855 if (IS_ERR(data)) in show_temp_beep()
1856 return PTR_ERR(data); in show_temp_beep()
1863 nr = find_temp_source(data, sattr->index, data->num_temp_beeps); in show_temp_beep()
1865 int bit = data->BEEP_BITS[nr + TEMP_ALARM_BASE]; in show_temp_beep()
1867 beep = (data->beeps >> bit) & 0x01; in show_temp_beep()
1877 struct nct6775_data *data = dev_get_drvdata(dev); in store_temp_beep() local
1888 nr = find_temp_source(data, sattr->index, data->num_temp_beeps); in store_temp_beep()
1892 bit = data->BEEP_BITS[nr + TEMP_ALARM_BASE]; in store_temp_beep()
1895 mutex_lock(&data->update_lock); in store_temp_beep()
1897 data->beeps |= (1ULL << bit); in store_temp_beep()
1899 data->beeps &= ~(1ULL << bit); in store_temp_beep()
1900 err = nct6775_write_value(data, data->REG_BEEP[regindex], in store_temp_beep()
1901 (data->beeps >> (regindex << 3)) & 0xff); in store_temp_beep()
1902 mutex_unlock(&data->update_lock); in store_temp_beep()
1911 struct nct6775_data *data = dev_get_drvdata(dev); in nct6775_in_is_visible() local
1915 if (nr == 1 && data->ALARM_BITS[in] == -1) in nct6775_in_is_visible()
1918 if (!(data->have_in & BIT(in))) in nct6775_in_is_visible()
1921 return nct6775_attr_mode(data, attr); in nct6775_in_is_visible()
1952 struct nct6775_data *data = nct6775_update_device(dev); in show_fan() local
1956 if (IS_ERR(data)) in show_fan()
1957 return PTR_ERR(data); in show_fan()
1959 return sprintf(buf, "%d\n", data->rpm[nr]); in show_fan()
1965 struct nct6775_data *data = nct6775_update_device(dev); in show_fan_min() local
1969 if (IS_ERR(data)) in show_fan_min()
1970 return PTR_ERR(data); in show_fan_min()
1973 data->fan_from_reg_min(data->fan_min[nr], in show_fan_min()
1974 data->fan_div[nr])); in show_fan_min()
1980 struct nct6775_data *data = nct6775_update_device(dev); in show_fan_div() local
1984 if (IS_ERR(data)) in show_fan_div()
1985 return PTR_ERR(data); in show_fan_div()
1987 return sprintf(buf, "%u\n", div_from_reg(data->fan_div[nr])); in show_fan_div()
1994 struct nct6775_data *data = dev_get_drvdata(dev); in store_fan_min() local
2006 mutex_lock(&data->update_lock); in store_fan_min()
2007 if (!data->has_fan_div) { in store_fan_min()
2017 data->fan_min[nr] = val; in store_fan_min()
2022 data->fan_min[nr] = 255; in store_fan_min()
2023 new_div = data->fan_div[nr]; /* No change */ in store_fan_min()
2033 data->fan_min[nr] = 254; in store_fan_min()
2037 nr + 1, val, data->fan_from_reg_min(254, 7)); in store_fan_min()
2043 data->fan_min[nr] = 1; in store_fan_min()
2047 nr + 1, val, data->fan_from_reg_min(1, 0)); in store_fan_min()
2059 data->fan_min[nr] = reg; in store_fan_min()
2067 if (new_div != data->fan_div[nr]) { in store_fan_min()
2069 nr + 1, div_from_reg(data->fan_div[nr]), in store_fan_min()
2071 data->fan_div[nr] = new_div; in store_fan_min()
2072 err = nct6775_write_fan_div_common(data, nr); in store_fan_min()
2076 data->last_updated = jiffies; in store_fan_min()
2080 err = nct6775_write_value(data, data->REG_FAN_MIN[nr], data->fan_min[nr]); in store_fan_min()
2081 mutex_unlock(&data->update_lock); in store_fan_min()
2089 struct nct6775_data *data = nct6775_update_device(dev); in show_fan_pulses() local
2093 if (IS_ERR(data)) in show_fan_pulses()
2094 return PTR_ERR(data); in show_fan_pulses()
2096 p = data->fan_pulses[sattr->index]; in show_fan_pulses()
2104 struct nct6775_data *data = dev_get_drvdata(dev); in store_fan_pulses() local
2118 mutex_lock(&data->update_lock); in store_fan_pulses()
2119 data->fan_pulses[nr] = val & 3; in store_fan_pulses()
2120 err = nct6775_read_value(data, data->REG_FAN_PULSES[nr], &reg); in store_fan_pulses()
2123 reg &= ~(0x03 << data->FAN_PULSE_SHIFT[nr]); in store_fan_pulses()
2124 reg |= (val & 3) << data->FAN_PULSE_SHIFT[nr]; in store_fan_pulses()
2125 err = nct6775_write_value(data, data->REG_FAN_PULSES[nr], reg); in store_fan_pulses()
2127 mutex_unlock(&data->update_lock); in store_fan_pulses()
2136 struct nct6775_data *data = dev_get_drvdata(dev); in nct6775_fan_is_visible() local
2140 if (!(data->has_fan & BIT(fan))) in nct6775_fan_is_visible()
2143 if (nr == 1 && data->ALARM_BITS[FAN_ALARM_BASE + fan] == -1) in nct6775_fan_is_visible()
2145 if (nr == 2 && data->BEEP_BITS[FAN_ALARM_BASE + fan] == -1) in nct6775_fan_is_visible()
2147 if (nr == 3 && !data->REG_FAN_PULSES[fan]) in nct6775_fan_is_visible()
2149 if (nr == 4 && !(data->has_fan_min & BIT(fan))) in nct6775_fan_is_visible()
2151 if (nr == 5 && data->kind != nct6775) in nct6775_fan_is_visible()
2154 return nct6775_attr_mode(data, attr); in nct6775_fan_is_visible()
2189 struct nct6775_data *data = nct6775_update_device(dev); in show_temp_label() local
2193 if (IS_ERR(data)) in show_temp_label()
2194 return PTR_ERR(data); in show_temp_label()
2196 return sprintf(buf, "%s\n", data->temp_label[data->temp_src[nr]]); in show_temp_label()
2202 struct nct6775_data *data = nct6775_update_device(dev); in show_temp() local
2207 if (IS_ERR(data)) in show_temp()
2208 return PTR_ERR(data); in show_temp()
2210 return sprintf(buf, "%d\n", LM75_TEMP_FROM_REG(data->temp[index][nr])); in show_temp()
2217 struct nct6775_data *data = dev_get_drvdata(dev); in store_temp() local
2228 mutex_lock(&data->update_lock); in store_temp()
2229 data->temp[index][nr] = LM75_TEMP_TO_REG(val); in store_temp()
2230 err = nct6775_write_temp(data, data->reg_temp[index][nr], data->temp[index][nr]); in store_temp()
2231 mutex_unlock(&data->update_lock); in store_temp()
2238 struct nct6775_data *data = nct6775_update_device(dev); in show_temp_offset() local
2241 if (IS_ERR(data)) in show_temp_offset()
2242 return PTR_ERR(data); in show_temp_offset()
2244 return sprintf(buf, "%d\n", data->temp_offset[sattr->index] * 1000); in show_temp_offset()
2251 struct nct6775_data *data = dev_get_drvdata(dev); in store_temp_offset() local
2263 mutex_lock(&data->update_lock); in store_temp_offset()
2264 data->temp_offset[nr] = val; in store_temp_offset()
2265 err = nct6775_write_value(data, data->REG_TEMP_OFFSET[nr], val); in store_temp_offset()
2266 mutex_unlock(&data->update_lock); in store_temp_offset()
2274 struct nct6775_data *data = nct6775_update_device(dev); in show_temp_type() local
2278 if (IS_ERR(data)) in show_temp_type()
2279 return PTR_ERR(data); in show_temp_type()
2281 return sprintf(buf, "%d\n", (int)data->temp_type[nr]); in show_temp_type()
2288 struct nct6775_data *data = nct6775_update_device(dev); in store_temp_type() local
2296 if (IS_ERR(data)) in store_temp_type()
2297 return PTR_ERR(data); in store_temp_type()
2306 mutex_lock(&data->update_lock); in store_temp_type()
2308 data->temp_type[nr] = val; in store_temp_type()
2310 dbit = data->DIODE_MASK << nr; in store_temp_type()
2312 err = nct6775_read_value(data, data->REG_VBAT, &vbat); in store_temp_type()
2317 err = nct6775_read_value(data, data->REG_DIODE, &diode); in store_temp_type()
2333 err = nct6775_write_value(data, data->REG_VBAT, vbat); in store_temp_type()
2336 err = nct6775_write_value(data, data->REG_DIODE, diode); in store_temp_type()
2338 mutex_unlock(&data->update_lock); in store_temp_type()
2346 struct nct6775_data *data = dev_get_drvdata(dev); in nct6775_temp_is_visible() local
2350 if (!(data->have_temp & BIT(temp))) in nct6775_temp_is_visible()
2353 if (nr == 1 && !data->temp_label) in nct6775_temp_is_visible()
2356 if (nr == 2 && find_temp_source(data, temp, data->num_temp_alarms) < 0) in nct6775_temp_is_visible()
2359 if (nr == 3 && find_temp_source(data, temp, data->num_temp_beeps) < 0) in nct6775_temp_is_visible()
2362 if (nr == 4 && !data->reg_temp[1][temp]) /* max */ in nct6775_temp_is_visible()
2365 if (nr == 5 && !data->reg_temp[2][temp]) /* max_hyst */ in nct6775_temp_is_visible()
2368 if (nr == 6 && !data->reg_temp[3][temp]) /* crit */ in nct6775_temp_is_visible()
2371 if (nr == 7 && !data->reg_temp[4][temp]) /* lcrit */ in nct6775_temp_is_visible()
2375 if (nr > 7 && !(data->have_temp_fixed & BIT(temp))) in nct6775_temp_is_visible()
2378 return nct6775_attr_mode(data, attr); in nct6775_temp_is_visible()
2419 struct nct6775_data *data = nct6775_update_device(dev); in show_tsi_temp() local
2422 if (IS_ERR(data)) in show_tsi_temp()
2423 return PTR_ERR(data); in show_tsi_temp()
2425 return sysfs_emit(buf, "%u\n", tsi_temp_from_reg(data->tsi_temp[sattr->index])); in show_tsi_temp()
2442 struct nct6775_data *data = dev_get_drvdata(dev); in nct6775_tsi_temp_is_visible() local
2445 return (data->have_tsi_temp & BIT(temp)) ? nct6775_attr_mode(data, attr) : 0; in nct6775_tsi_temp_is_visible()
2461 struct nct6775_data *data = nct6775_update_device(dev); in show_pwm_mode() local
2464 if (IS_ERR(data)) in show_pwm_mode()
2465 return PTR_ERR(data); in show_pwm_mode()
2467 return sprintf(buf, "%d\n", data->pwm_mode[sattr->index]); in show_pwm_mode()
2474 struct nct6775_data *data = dev_get_drvdata(dev); in store_pwm_mode() local
2489 if (data->REG_PWM_MODE[nr] == 0) { in store_pwm_mode()
2495 mutex_lock(&data->update_lock); in store_pwm_mode()
2496 data->pwm_mode[nr] = val; in store_pwm_mode()
2497 err = nct6775_read_value(data, data->REG_PWM_MODE[nr], &reg); in store_pwm_mode()
2500 reg &= ~data->PWM_MODE_MASK[nr]; in store_pwm_mode()
2502 reg |= data->PWM_MODE_MASK[nr]; in store_pwm_mode()
2503 err = nct6775_write_value(data, data->REG_PWM_MODE[nr], reg); in store_pwm_mode()
2505 mutex_unlock(&data->update_lock); in store_pwm_mode()
2512 struct nct6775_data *data = nct6775_update_device(dev); in show_pwm() local
2519 if (IS_ERR(data)) in show_pwm()
2520 return PTR_ERR(data); in show_pwm()
2526 if (index == 0 && data->pwm_enable[nr] > manual) { in show_pwm()
2527 err = nct6775_read_value(data, data->REG_PWM_READ[nr], &pwm); in show_pwm()
2531 pwm = data->pwm[index][nr]; in show_pwm()
2541 struct nct6775_data *data = dev_get_drvdata(dev); in store_pwm() local
2546 int minval[7] = { 0, 1, 1, data->pwm[2][nr], 0, 0, 0 }; in store_pwm()
2548 = { 255, 255, data->pwm[3][nr] ? : 255, 255, 255, 255, 255 }; in store_pwm()
2557 mutex_lock(&data->update_lock); in store_pwm()
2558 data->pwm[index][nr] = val; in store_pwm()
2559 err = nct6775_write_value(data, data->REG_PWM[index][nr], val); in store_pwm()
2563 err = nct6775_read_value(data, data->REG_TEMP_SEL[nr], &reg); in store_pwm()
2569 err = nct6775_write_value(data, data->REG_TEMP_SEL[nr], reg); in store_pwm()
2572 mutex_unlock(&data->update_lock); in store_pwm()
2577 static int check_trip_points(struct nct6775_data *data, int nr) in check_trip_points() argument
2581 for (i = 0; i < data->auto_pwm_num - 1; i++) { in check_trip_points()
2582 if (data->auto_temp[nr][i] > data->auto_temp[nr][i + 1]) in check_trip_points()
2585 for (i = 0; i < data->auto_pwm_num - 1; i++) { in check_trip_points()
2586 if (data->auto_pwm[nr][i] > data->auto_pwm[nr][i + 1]) in check_trip_points()
2590 if (data->auto_pwm[nr][data->auto_pwm_num]) { in check_trip_points()
2591 if (data->auto_temp[nr][data->auto_pwm_num - 1] > in check_trip_points()
2592 data->auto_temp[nr][data->auto_pwm_num] || in check_trip_points()
2593 data->auto_pwm[nr][data->auto_pwm_num - 1] > in check_trip_points()
2594 data->auto_pwm[nr][data->auto_pwm_num]) in check_trip_points()
2600 static int pwm_update_registers(struct nct6775_data *data, int nr) in pwm_update_registers() argument
2605 switch (data->pwm_enable[nr]) { in pwm_update_registers()
2610 err = nct6775_read_value(data, data->REG_FAN_MODE[nr], &reg); in pwm_update_registers()
2613 reg = (reg & ~data->tolerance_mask) | in pwm_update_registers()
2614 (data->target_speed_tolerance[nr] & data->tolerance_mask); in pwm_update_registers()
2615 err = nct6775_write_value(data, data->REG_FAN_MODE[nr], reg); in pwm_update_registers()
2618 err = nct6775_write_value(data, data->REG_TARGET[nr], in pwm_update_registers()
2619 data->target_speed[nr] & 0xff); in pwm_update_registers()
2622 if (data->REG_TOLERANCE_H) { in pwm_update_registers()
2623 reg = (data->target_speed[nr] >> 8) & 0x0f; in pwm_update_registers()
2624 reg |= (data->target_speed_tolerance[nr] & 0x38) << 1; in pwm_update_registers()
2625 err = nct6775_write_value(data, data->REG_TOLERANCE_H[nr], reg); in pwm_update_registers()
2631 err = nct6775_write_value(data, data->REG_TARGET[nr], data->target_temp[nr]); in pwm_update_registers()
2636 err = nct6775_read_value(data, data->REG_FAN_MODE[nr], &reg); in pwm_update_registers()
2639 reg = (reg & ~data->tolerance_mask) | in pwm_update_registers()
2640 data->temp_tolerance[0][nr]; in pwm_update_registers()
2641 err = nct6775_write_value(data, data->REG_FAN_MODE[nr], reg); in pwm_update_registers()
2653 struct nct6775_data *data = nct6775_update_device(dev); in show_pwm_enable() local
2656 if (IS_ERR(data)) in show_pwm_enable()
2657 return PTR_ERR(data); in show_pwm_enable()
2659 return sprintf(buf, "%d\n", data->pwm_enable[sattr->index]); in show_pwm_enable()
2666 struct nct6775_data *data = dev_get_drvdata(dev); in store_pwm_enable() local
2680 if (val == sf3 && data->kind != nct6775) in store_pwm_enable()
2683 if (val == sf4 && check_trip_points(data, nr)) { in store_pwm_enable()
2689 mutex_lock(&data->update_lock); in store_pwm_enable()
2690 data->pwm_enable[nr] = val; in store_pwm_enable()
2695 data->pwm[0][nr] = 255; in store_pwm_enable()
2696 err = nct6775_write_value(data, data->REG_PWM[0][nr], 255); in store_pwm_enable()
2700 err = pwm_update_registers(data, nr); in store_pwm_enable()
2703 err = nct6775_read_value(data, data->REG_FAN_MODE[nr], &reg); in store_pwm_enable()
2708 err = nct6775_write_value(data, data->REG_FAN_MODE[nr], reg); in store_pwm_enable()
2710 mutex_unlock(&data->update_lock); in store_pwm_enable()
2715 show_pwm_temp_sel_common(struct nct6775_data *data, char *buf, int src) in show_pwm_temp_sel_common() argument
2720 if (!(data->have_temp & BIT(i))) in show_pwm_temp_sel_common()
2722 if (src == data->temp_src[i]) { in show_pwm_temp_sel_common()
2734 struct nct6775_data *data = nct6775_update_device(dev); in show_pwm_temp_sel() local
2738 if (IS_ERR(data)) in show_pwm_temp_sel()
2739 return PTR_ERR(data); in show_pwm_temp_sel()
2741 return show_pwm_temp_sel_common(data, buf, data->pwm_temp_sel[index]); in show_pwm_temp_sel()
2748 struct nct6775_data *data = nct6775_update_device(dev); in store_pwm_temp_sel() local
2755 if (IS_ERR(data)) in store_pwm_temp_sel()
2756 return PTR_ERR(data); in store_pwm_temp_sel()
2763 if (!(data->have_temp & BIT(val - 1)) || !data->temp_src[val - 1]) in store_pwm_temp_sel()
2766 mutex_lock(&data->update_lock); in store_pwm_temp_sel()
2767 src = data->temp_src[val - 1]; in store_pwm_temp_sel()
2768 data->pwm_temp_sel[nr] = src; in store_pwm_temp_sel()
2769 err = nct6775_read_value(data, data->REG_TEMP_SEL[nr], &reg); in store_pwm_temp_sel()
2774 err = nct6775_write_value(data, data->REG_TEMP_SEL[nr], reg); in store_pwm_temp_sel()
2776 mutex_unlock(&data->update_lock); in store_pwm_temp_sel()
2785 struct nct6775_data *data = nct6775_update_device(dev); in show_pwm_weight_temp_sel() local
2789 if (IS_ERR(data)) in show_pwm_weight_temp_sel()
2790 return PTR_ERR(data); in show_pwm_weight_temp_sel()
2792 return show_pwm_temp_sel_common(data, buf, in show_pwm_weight_temp_sel()
2793 data->pwm_weight_temp_sel[index]); in show_pwm_weight_temp_sel()
2800 struct nct6775_data *data = nct6775_update_device(dev); in store_pwm_weight_temp_sel() local
2807 if (IS_ERR(data)) in store_pwm_weight_temp_sel()
2808 return PTR_ERR(data); in store_pwm_weight_temp_sel()
2816 if (val && (!(data->have_temp & BIT(val - 1)) || in store_pwm_weight_temp_sel()
2817 !data->temp_src[val - 1])) in store_pwm_weight_temp_sel()
2820 mutex_lock(&data->update_lock); in store_pwm_weight_temp_sel()
2822 src = data->temp_src[val - 1]; in store_pwm_weight_temp_sel()
2823 data->pwm_weight_temp_sel[nr] = src; in store_pwm_weight_temp_sel()
2824 err = nct6775_read_value(data, data->REG_WEIGHT_TEMP_SEL[nr], &reg); in store_pwm_weight_temp_sel()
2829 err = nct6775_write_value(data, data->REG_WEIGHT_TEMP_SEL[nr], reg); in store_pwm_weight_temp_sel()
2831 data->pwm_weight_temp_sel[nr] = 0; in store_pwm_weight_temp_sel()
2832 err = nct6775_read_value(data, data->REG_WEIGHT_TEMP_SEL[nr], &reg); in store_pwm_weight_temp_sel()
2836 err = nct6775_write_value(data, data->REG_WEIGHT_TEMP_SEL[nr], reg); in store_pwm_weight_temp_sel()
2839 mutex_unlock(&data->update_lock); in store_pwm_weight_temp_sel()
2847 struct nct6775_data *data = nct6775_update_device(dev); in show_target_temp() local
2850 if (IS_ERR(data)) in show_target_temp()
2851 return PTR_ERR(data); in show_target_temp()
2853 return sprintf(buf, "%d\n", data->target_temp[sattr->index] * 1000); in show_target_temp()
2860 struct nct6775_data *data = dev_get_drvdata(dev); in store_target_temp() local
2871 data->target_temp_mask); in store_target_temp()
2873 mutex_lock(&data->update_lock); in store_target_temp()
2874 data->target_temp[nr] = val; in store_target_temp()
2875 err = pwm_update_registers(data, nr); in store_target_temp()
2876 mutex_unlock(&data->update_lock); in store_target_temp()
2883 struct nct6775_data *data = nct6775_update_device(dev); in show_target_speed() local
2887 if (IS_ERR(data)) in show_target_speed()
2888 return PTR_ERR(data); in show_target_speed()
2891 fan_from_reg16(data->target_speed[nr], in show_target_speed()
2892 data->fan_div[nr])); in show_target_speed()
2899 struct nct6775_data *data = dev_get_drvdata(dev); in store_target_speed() local
2911 speed = fan_to_reg(val, data->fan_div[nr]); in store_target_speed()
2913 mutex_lock(&data->update_lock); in store_target_speed()
2914 data->target_speed[nr] = speed; in store_target_speed()
2915 err = pwm_update_registers(data, nr); in store_target_speed()
2916 mutex_unlock(&data->update_lock); in store_target_speed()
2924 struct nct6775_data *data = nct6775_update_device(dev); in show_temp_tolerance() local
2929 if (IS_ERR(data)) in show_temp_tolerance()
2930 return PTR_ERR(data); in show_temp_tolerance()
2932 return sprintf(buf, "%d\n", data->temp_tolerance[index][nr] * 1000); in show_temp_tolerance()
2939 struct nct6775_data *data = dev_get_drvdata(dev); in store_temp_tolerance() local
2951 val = clamp_val(DIV_ROUND_CLOSEST(val, 1000), 0, data->tolerance_mask); in store_temp_tolerance()
2953 mutex_lock(&data->update_lock); in store_temp_tolerance()
2954 data->temp_tolerance[index][nr] = val; in store_temp_tolerance()
2956 err = pwm_update_registers(data, nr); in store_temp_tolerance()
2958 err = nct6775_write_value(data, data->REG_CRITICAL_TEMP_TOLERANCE[nr], val); in store_temp_tolerance()
2959 mutex_unlock(&data->update_lock); in store_temp_tolerance()
2974 struct nct6775_data *data = nct6775_update_device(dev); in show_speed_tolerance() local
2979 if (IS_ERR(data)) in show_speed_tolerance()
2980 return PTR_ERR(data); in show_speed_tolerance()
2982 target = data->target_speed[nr]; in show_speed_tolerance()
2985 int low = target - data->target_speed_tolerance[nr]; in show_speed_tolerance()
2986 int high = target + data->target_speed_tolerance[nr]; in show_speed_tolerance()
2995 tolerance = (fan_from_reg16(low, data->fan_div[nr]) in show_speed_tolerance()
2996 - fan_from_reg16(high, data->fan_div[nr])) / 2; in show_speed_tolerance()
3006 struct nct6775_data *data = dev_get_drvdata(dev); in store_speed_tolerance() local
3017 high = fan_from_reg16(data->target_speed[nr], data->fan_div[nr]) + val; in store_speed_tolerance()
3018 low = fan_from_reg16(data->target_speed[nr], data->fan_div[nr]) - val; in store_speed_tolerance()
3024 val = (fan_to_reg(low, data->fan_div[nr]) - in store_speed_tolerance()
3025 fan_to_reg(high, data->fan_div[nr])) / 2; in store_speed_tolerance()
3028 val = clamp_val(val, 0, data->speed_tolerance_limit); in store_speed_tolerance()
3030 mutex_lock(&data->update_lock); in store_speed_tolerance()
3031 data->target_speed_tolerance[nr] = val; in store_speed_tolerance()
3032 err = pwm_update_registers(data, nr); in store_speed_tolerance()
3033 mutex_unlock(&data->update_lock); in store_speed_tolerance()
3051 struct nct6775_data *data = nct6775_update_device(dev); in show_weight_temp() local
3056 if (IS_ERR(data)) in show_weight_temp()
3057 return PTR_ERR(data); in show_weight_temp()
3059 return sprintf(buf, "%d\n", data->weight_temp[index][nr] * 1000); in show_weight_temp()
3066 struct nct6775_data *data = dev_get_drvdata(dev); in store_weight_temp() local
3079 mutex_lock(&data->update_lock); in store_weight_temp()
3080 data->weight_temp[index][nr] = val; in store_weight_temp()
3081 err = nct6775_write_value(data, data->REG_WEIGHT_TEMP[index][nr], val); in store_weight_temp()
3082 mutex_unlock(&data->update_lock); in store_weight_temp()
3100 struct nct6775_data *data = nct6775_update_device(dev); in show_fan_time() local
3105 if (IS_ERR(data)) in show_fan_time()
3106 return PTR_ERR(data); in show_fan_time()
3109 step_time_from_reg(data->fan_time[index][nr], in show_fan_time()
3110 data->pwm_mode[nr])); in show_fan_time()
3117 struct nct6775_data *data = dev_get_drvdata(dev); in store_fan_time() local
3128 val = step_time_to_reg(val, data->pwm_mode[nr]); in store_fan_time()
3129 mutex_lock(&data->update_lock); in store_fan_time()
3130 data->fan_time[index][nr] = val; in store_fan_time()
3131 err = nct6775_write_value(data, data->REG_FAN_TIME[index][nr], val); in store_fan_time()
3132 mutex_unlock(&data->update_lock); in store_fan_time()
3139 struct nct6775_data *data = nct6775_update_device(dev); in show_auto_pwm() local
3142 if (IS_ERR(data)) in show_auto_pwm()
3143 return PTR_ERR(data); in show_auto_pwm()
3145 return sprintf(buf, "%d\n", data->auto_pwm[sattr->nr][sattr->index]); in show_auto_pwm()
3152 struct nct6775_data *data = dev_get_drvdata(dev); in store_auto_pwm() local
3166 if (point == data->auto_pwm_num) { in store_auto_pwm()
3167 if (data->kind != nct6775 && !val) in store_auto_pwm()
3169 if (data->kind != nct6779 && val) in store_auto_pwm()
3173 mutex_lock(&data->update_lock); in store_auto_pwm()
3174 data->auto_pwm[nr][point] = val; in store_auto_pwm()
3175 if (point < data->auto_pwm_num) { in store_auto_pwm()
3176 err = nct6775_write_value(data, NCT6775_AUTO_PWM(data, nr, point), in store_auto_pwm()
3177 data->auto_pwm[nr][point]); in store_auto_pwm()
3179 switch (data->kind) { in store_auto_pwm()
3182 err = nct6775_read_value(data, NCT6775_REG_CRITICAL_ENAB[nr], &reg); in store_auto_pwm()
3189 err = nct6775_write_value(data, NCT6775_REG_CRITICAL_ENAB[nr], reg); in store_auto_pwm()
3204 err = nct6775_write_value(data, data->REG_CRITICAL_PWM[nr], val); in store_auto_pwm()
3207 err = nct6775_read_value(data, data->REG_CRITICAL_PWM_ENABLE[nr], &reg); in store_auto_pwm()
3211 reg &= ~data->CRITICAL_PWM_ENABLE_MASK; in store_auto_pwm()
3213 reg |= data->CRITICAL_PWM_ENABLE_MASK; in store_auto_pwm()
3214 err = nct6775_write_value(data, data->REG_CRITICAL_PWM_ENABLE[nr], reg); in store_auto_pwm()
3218 mutex_unlock(&data->update_lock); in store_auto_pwm()
3225 struct nct6775_data *data = nct6775_update_device(dev); in show_auto_temp() local
3230 if (IS_ERR(data)) in show_auto_temp()
3231 return PTR_ERR(data); in show_auto_temp()
3237 return sprintf(buf, "%d\n", data->auto_temp[nr][point] * 1000); in show_auto_temp()
3244 struct nct6775_data *data = dev_get_drvdata(dev); in store_auto_temp() local
3257 mutex_lock(&data->update_lock); in store_auto_temp()
3258 data->auto_temp[nr][point] = DIV_ROUND_CLOSEST(val, 1000); in store_auto_temp()
3259 if (point < data->auto_pwm_num) { in store_auto_temp()
3260 err = nct6775_write_value(data, NCT6775_AUTO_TEMP(data, nr, point), in store_auto_temp()
3261 data->auto_temp[nr][point]); in store_auto_temp()
3263 err = nct6775_write_value(data, data->REG_CRITICAL_TEMP[nr], in store_auto_temp()
3264 data->auto_temp[nr][point]); in store_auto_temp()
3266 mutex_unlock(&data->update_lock); in store_auto_temp()
3274 struct nct6775_data *data = dev_get_drvdata(dev); in nct6775_pwm_is_visible() local
3278 if (!(data->has_pwm & BIT(pwm))) in nct6775_pwm_is_visible()
3282 if (!data->REG_WEIGHT_TEMP_SEL[pwm]) in nct6775_pwm_is_visible()
3284 if (nr == 19 && data->REG_PWM[3] == NULL) /* pwm_max */ in nct6775_pwm_is_visible()
3286 if (nr == 20 && data->REG_PWM[4] == NULL) /* pwm_step */ in nct6775_pwm_is_visible()
3288 if (nr == 21 && data->REG_PWM[6] == NULL) /* weight_duty_base */ in nct6775_pwm_is_visible()
3294 if (api > data->auto_pwm_num) in nct6775_pwm_is_visible()
3297 return nct6775_attr_mode(data, attr); in nct6775_pwm_is_visible()
3403 static inline int nct6775_init_device(struct nct6775_data *data) in nct6775_init_device() argument
3409 if (data->REG_CONFIG) { in nct6775_init_device()
3410 err = nct6775_read_value(data, data->REG_CONFIG, &tmp); in nct6775_init_device()
3414 err = nct6775_write_value(data, data->REG_CONFIG, tmp | 0x01); in nct6775_init_device()
3422 if (!(data->have_temp & BIT(i))) in nct6775_init_device()
3424 if (!data->reg_temp_config[i]) in nct6775_init_device()
3426 err = nct6775_read_value(data, data->reg_temp_config[i], &tmp); in nct6775_init_device()
3430 err = nct6775_write_value(data, data->reg_temp_config[i], tmp & 0xfe); in nct6775_init_device()
3437 err = nct6775_read_value(data, data->REG_VBAT, &tmp); in nct6775_init_device()
3441 err = nct6775_write_value(data, data->REG_VBAT, tmp | 0x01); in nct6775_init_device()
3446 err = nct6775_read_value(data, data->REG_DIODE, &diode); in nct6775_init_device()
3450 for (i = 0; i < data->temp_fixed_num; i++) { in nct6775_init_device()
3451 if (!(data->have_temp_fixed & BIT(i))) in nct6775_init_device()
3453 if ((tmp & (data->DIODE_MASK << i))) /* diode */ in nct6775_init_device()
3454 data->temp_type[i] in nct6775_init_device()
3455 = 3 - ((diode >> i) & data->DIODE_MASK); in nct6775_init_device()
3457 data->temp_type[i] = 4; in nct6775_init_device()
3463 static int add_temp_sensors(struct nct6775_data *data, const u16 *regp, in add_temp_sensors() argument
3469 for (i = 0; i < data->pwm_num && *available; i++) { in add_temp_sensors()
3474 err = nct6775_read_value(data, regp[i], &src); in add_temp_sensors()
3480 if (!(data->temp_mask & BIT(src))) in add_temp_sensors()
3484 err = nct6775_write_value(data, data->REG_TEMP_SOURCE[index], src); in add_temp_sensors()
3494 int nct6775_probe(struct device *dev, struct nct6775_data *data, in nct6775_probe() argument
3507 data->regmap = devm_regmap_init(dev, NULL, data, regmapcfg); in nct6775_probe()
3508 if (IS_ERR(data->regmap)) in nct6775_probe()
3509 return PTR_ERR(data->regmap); in nct6775_probe()
3511 mutex_init(&data->update_lock); in nct6775_probe()
3512 data->name = nct6775_device_names[data->kind]; in nct6775_probe()
3513 data->bank = 0xff; /* Force initial bank selection */ in nct6775_probe()
3514 data->scale_in = scale_in; in nct6775_probe()
3516 switch (data->kind) { in nct6775_probe()
3518 data->in_num = 9; in nct6775_probe()
3519 data->pwm_num = 3; in nct6775_probe()
3520 data->auto_pwm_num = 4; in nct6775_probe()
3521 data->temp_fixed_num = 3; in nct6775_probe()
3522 data->num_temp_alarms = 6; in nct6775_probe()
3523 data->num_temp_beeps = 6; in nct6775_probe()
3525 data->fan_from_reg = fan_from_reg13; in nct6775_probe()
3526 data->fan_from_reg_min = fan_from_reg13; in nct6775_probe()
3528 data->temp_label = nct6776_temp_label; in nct6775_probe()
3529 data->temp_mask = NCT6776_TEMP_MASK; in nct6775_probe()
3530 data->virt_temp_mask = NCT6776_VIRT_TEMP_MASK; in nct6775_probe()
3532 data->REG_VBAT = NCT6106_REG_VBAT; in nct6775_probe()
3533 data->REG_DIODE = NCT6106_REG_DIODE; in nct6775_probe()
3534 data->DIODE_MASK = NCT6106_DIODE_MASK; in nct6775_probe()
3535 data->REG_VIN = NCT6106_REG_IN; in nct6775_probe()
3536 data->REG_IN_MINMAX[0] = NCT6106_REG_IN_MIN; in nct6775_probe()
3537 data->REG_IN_MINMAX[1] = NCT6106_REG_IN_MAX; in nct6775_probe()
3538 data->REG_TARGET = NCT6106_REG_TARGET; in nct6775_probe()
3539 data->REG_FAN = NCT6106_REG_FAN; in nct6775_probe()
3540 data->REG_FAN_MODE = NCT6106_REG_FAN_MODE; in nct6775_probe()
3541 data->REG_FAN_MIN = NCT6106_REG_FAN_MIN; in nct6775_probe()
3542 data->REG_FAN_PULSES = NCT6106_REG_FAN_PULSES; in nct6775_probe()
3543 data->FAN_PULSE_SHIFT = NCT6106_FAN_PULSE_SHIFT; in nct6775_probe()
3544 data->REG_FAN_TIME[0] = NCT6106_REG_FAN_STOP_TIME; in nct6775_probe()
3545 data->REG_FAN_TIME[1] = NCT6106_REG_FAN_STEP_UP_TIME; in nct6775_probe()
3546 data->REG_FAN_TIME[2] = NCT6106_REG_FAN_STEP_DOWN_TIME; in nct6775_probe()
3547 data->REG_TOLERANCE_H = NCT6106_REG_TOLERANCE_H; in nct6775_probe()
3548 data->REG_PWM[0] = NCT6116_REG_PWM; in nct6775_probe()
3549 data->REG_PWM[1] = NCT6106_REG_FAN_START_OUTPUT; in nct6775_probe()
3550 data->REG_PWM[2] = NCT6106_REG_FAN_STOP_OUTPUT; in nct6775_probe()
3551 data->REG_PWM[5] = NCT6106_REG_WEIGHT_DUTY_STEP; in nct6775_probe()
3552 data->REG_PWM[6] = NCT6106_REG_WEIGHT_DUTY_BASE; in nct6775_probe()
3553 data->REG_PWM_READ = NCT6106_REG_PWM_READ; in nct6775_probe()
3554 data->REG_PWM_MODE = NCT6106_REG_PWM_MODE; in nct6775_probe()
3555 data->PWM_MODE_MASK = NCT6106_PWM_MODE_MASK; in nct6775_probe()
3556 data->REG_AUTO_TEMP = NCT6106_REG_AUTO_TEMP; in nct6775_probe()
3557 data->REG_AUTO_PWM = NCT6106_REG_AUTO_PWM; in nct6775_probe()
3558 data->REG_CRITICAL_TEMP = NCT6106_REG_CRITICAL_TEMP; in nct6775_probe()
3559 data->REG_CRITICAL_TEMP_TOLERANCE in nct6775_probe()
3561 data->REG_CRITICAL_PWM_ENABLE = NCT6106_REG_CRITICAL_PWM_ENABLE; in nct6775_probe()
3562 data->CRITICAL_PWM_ENABLE_MASK in nct6775_probe()
3564 data->REG_CRITICAL_PWM = NCT6106_REG_CRITICAL_PWM; in nct6775_probe()
3565 data->REG_TEMP_OFFSET = NCT6106_REG_TEMP_OFFSET; in nct6775_probe()
3566 data->REG_TEMP_SOURCE = NCT6106_REG_TEMP_SOURCE; in nct6775_probe()
3567 data->REG_TEMP_SEL = NCT6116_REG_TEMP_SEL; in nct6775_probe()
3568 data->REG_WEIGHT_TEMP_SEL = NCT6106_REG_WEIGHT_TEMP_SEL; in nct6775_probe()
3569 data->REG_WEIGHT_TEMP[0] = NCT6106_REG_WEIGHT_TEMP_STEP; in nct6775_probe()
3570 data->REG_WEIGHT_TEMP[1] = NCT6106_REG_WEIGHT_TEMP_STEP_TOL; in nct6775_probe()
3571 data->REG_WEIGHT_TEMP[2] = NCT6106_REG_WEIGHT_TEMP_BASE; in nct6775_probe()
3572 data->REG_ALARM = NCT6106_REG_ALARM; in nct6775_probe()
3573 data->ALARM_BITS = NCT6106_ALARM_BITS; in nct6775_probe()
3574 data->REG_BEEP = NCT6106_REG_BEEP; in nct6775_probe()
3575 data->BEEP_BITS = NCT6106_BEEP_BITS; in nct6775_probe()
3576 data->REG_TSI_TEMP = NCT6106_REG_TSI_TEMP; in nct6775_probe()
3593 data->in_num = 9; in nct6775_probe()
3594 data->pwm_num = 3; in nct6775_probe()
3595 data->auto_pwm_num = 4; in nct6775_probe()
3596 data->temp_fixed_num = 3; in nct6775_probe()
3597 data->num_temp_alarms = 3; in nct6775_probe()
3598 data->num_temp_beeps = 3; in nct6775_probe()
3600 data->fan_from_reg = fan_from_reg13; in nct6775_probe()
3601 data->fan_from_reg_min = fan_from_reg13; in nct6775_probe()
3603 data->temp_label = nct6776_temp_label; in nct6775_probe()
3604 data->temp_mask = NCT6776_TEMP_MASK; in nct6775_probe()
3605 data->virt_temp_mask = NCT6776_VIRT_TEMP_MASK; in nct6775_probe()
3607 data->REG_VBAT = NCT6106_REG_VBAT; in nct6775_probe()
3608 data->REG_DIODE = NCT6106_REG_DIODE; in nct6775_probe()
3609 data->DIODE_MASK = NCT6106_DIODE_MASK; in nct6775_probe()
3610 data->REG_VIN = NCT6106_REG_IN; in nct6775_probe()
3611 data->REG_IN_MINMAX[0] = NCT6106_REG_IN_MIN; in nct6775_probe()
3612 data->REG_IN_MINMAX[1] = NCT6106_REG_IN_MAX; in nct6775_probe()
3613 data->REG_TARGET = NCT6116_REG_TARGET; in nct6775_probe()
3614 data->REG_FAN = NCT6116_REG_FAN; in nct6775_probe()
3615 data->REG_FAN_MODE = NCT6116_REG_FAN_MODE; in nct6775_probe()
3616 data->REG_FAN_MIN = NCT6116_REG_FAN_MIN; in nct6775_probe()
3617 data->REG_FAN_PULSES = NCT6116_REG_FAN_PULSES; in nct6775_probe()
3618 data->FAN_PULSE_SHIFT = NCT6116_FAN_PULSE_SHIFT; in nct6775_probe()
3619 data->REG_FAN_TIME[0] = NCT6116_REG_FAN_STOP_TIME; in nct6775_probe()
3620 data->REG_FAN_TIME[1] = NCT6116_REG_FAN_STEP_UP_TIME; in nct6775_probe()
3621 data->REG_FAN_TIME[2] = NCT6116_REG_FAN_STEP_DOWN_TIME; in nct6775_probe()
3622 data->REG_TOLERANCE_H = NCT6116_REG_TOLERANCE_H; in nct6775_probe()
3623 data->REG_PWM[0] = NCT6116_REG_PWM; in nct6775_probe()
3624 data->REG_PWM[1] = NCT6116_REG_FAN_START_OUTPUT; in nct6775_probe()
3625 data->REG_PWM[2] = NCT6116_REG_FAN_STOP_OUTPUT; in nct6775_probe()
3626 data->REG_PWM[5] = NCT6106_REG_WEIGHT_DUTY_STEP; in nct6775_probe()
3627 data->REG_PWM[6] = NCT6106_REG_WEIGHT_DUTY_BASE; in nct6775_probe()
3628 data->REG_PWM_READ = NCT6106_REG_PWM_READ; in nct6775_probe()
3629 data->REG_PWM_MODE = NCT6106_REG_PWM_MODE; in nct6775_probe()
3630 data->PWM_MODE_MASK = NCT6106_PWM_MODE_MASK; in nct6775_probe()
3631 data->REG_AUTO_TEMP = NCT6116_REG_AUTO_TEMP; in nct6775_probe()
3632 data->REG_AUTO_PWM = NCT6116_REG_AUTO_PWM; in nct6775_probe()
3633 data->REG_CRITICAL_TEMP = NCT6116_REG_CRITICAL_TEMP; in nct6775_probe()
3634 data->REG_CRITICAL_TEMP_TOLERANCE in nct6775_probe()
3636 data->REG_CRITICAL_PWM_ENABLE = NCT6116_REG_CRITICAL_PWM_ENABLE; in nct6775_probe()
3637 data->CRITICAL_PWM_ENABLE_MASK in nct6775_probe()
3639 data->REG_CRITICAL_PWM = NCT6116_REG_CRITICAL_PWM; in nct6775_probe()
3640 data->REG_TEMP_OFFSET = NCT6106_REG_TEMP_OFFSET; in nct6775_probe()
3641 data->REG_TEMP_SOURCE = NCT6116_REG_TEMP_SOURCE; in nct6775_probe()
3642 data->REG_TEMP_SEL = NCT6116_REG_TEMP_SEL; in nct6775_probe()
3643 data->REG_WEIGHT_TEMP_SEL = NCT6106_REG_WEIGHT_TEMP_SEL; in nct6775_probe()
3644 data->REG_WEIGHT_TEMP[0] = NCT6106_REG_WEIGHT_TEMP_STEP; in nct6775_probe()
3645 data->REG_WEIGHT_TEMP[1] = NCT6106_REG_WEIGHT_TEMP_STEP_TOL; in nct6775_probe()
3646 data->REG_WEIGHT_TEMP[2] = NCT6106_REG_WEIGHT_TEMP_BASE; in nct6775_probe()
3647 data->REG_ALARM = NCT6106_REG_ALARM; in nct6775_probe()
3648 data->ALARM_BITS = NCT6116_ALARM_BITS; in nct6775_probe()
3649 data->REG_BEEP = NCT6106_REG_BEEP; in nct6775_probe()
3650 data->BEEP_BITS = NCT6116_BEEP_BITS; in nct6775_probe()
3651 data->REG_TSI_TEMP = NCT6116_REG_TSI_TEMP; in nct6775_probe()
3668 data->in_num = 9; in nct6775_probe()
3669 data->pwm_num = 3; in nct6775_probe()
3670 data->auto_pwm_num = 6; in nct6775_probe()
3671 data->has_fan_div = true; in nct6775_probe()
3672 data->temp_fixed_num = 3; in nct6775_probe()
3673 data->num_temp_alarms = 3; in nct6775_probe()
3674 data->num_temp_beeps = 3; in nct6775_probe()
3676 data->ALARM_BITS = NCT6775_ALARM_BITS; in nct6775_probe()
3677 data->BEEP_BITS = NCT6775_BEEP_BITS; in nct6775_probe()
3679 data->fan_from_reg = fan_from_reg16; in nct6775_probe()
3680 data->fan_from_reg_min = fan_from_reg8; in nct6775_probe()
3681 data->target_temp_mask = 0x7f; in nct6775_probe()
3682 data->tolerance_mask = 0x0f; in nct6775_probe()
3683 data->speed_tolerance_limit = 15; in nct6775_probe()
3685 data->temp_label = nct6775_temp_label; in nct6775_probe()
3686 data->temp_mask = NCT6775_TEMP_MASK; in nct6775_probe()
3687 data->virt_temp_mask = NCT6775_VIRT_TEMP_MASK; in nct6775_probe()
3689 data->REG_CONFIG = NCT6775_REG_CONFIG; in nct6775_probe()
3690 data->REG_VBAT = NCT6775_REG_VBAT; in nct6775_probe()
3691 data->REG_DIODE = NCT6775_REG_DIODE; in nct6775_probe()
3692 data->DIODE_MASK = NCT6775_DIODE_MASK; in nct6775_probe()
3693 data->REG_VIN = NCT6775_REG_IN; in nct6775_probe()
3694 data->REG_IN_MINMAX[0] = NCT6775_REG_IN_MIN; in nct6775_probe()
3695 data->REG_IN_MINMAX[1] = NCT6775_REG_IN_MAX; in nct6775_probe()
3696 data->REG_TARGET = NCT6775_REG_TARGET; in nct6775_probe()
3697 data->REG_FAN = NCT6775_REG_FAN; in nct6775_probe()
3698 data->REG_FAN_MODE = NCT6775_REG_FAN_MODE; in nct6775_probe()
3699 data->REG_FAN_MIN = NCT6775_REG_FAN_MIN; in nct6775_probe()
3700 data->REG_FAN_PULSES = NCT6775_REG_FAN_PULSES; in nct6775_probe()
3701 data->FAN_PULSE_SHIFT = NCT6775_FAN_PULSE_SHIFT; in nct6775_probe()
3702 data->REG_FAN_TIME[0] = NCT6775_REG_FAN_STOP_TIME; in nct6775_probe()
3703 data->REG_FAN_TIME[1] = NCT6775_REG_FAN_STEP_UP_TIME; in nct6775_probe()
3704 data->REG_FAN_TIME[2] = NCT6775_REG_FAN_STEP_DOWN_TIME; in nct6775_probe()
3705 data->REG_PWM[0] = NCT6775_REG_PWM; in nct6775_probe()
3706 data->REG_PWM[1] = NCT6775_REG_FAN_START_OUTPUT; in nct6775_probe()
3707 data->REG_PWM[2] = NCT6775_REG_FAN_STOP_OUTPUT; in nct6775_probe()
3708 data->REG_PWM[3] = NCT6775_REG_FAN_MAX_OUTPUT; in nct6775_probe()
3709 data->REG_PWM[4] = NCT6775_REG_FAN_STEP_OUTPUT; in nct6775_probe()
3710 data->REG_PWM[5] = NCT6775_REG_WEIGHT_DUTY_STEP; in nct6775_probe()
3711 data->REG_PWM_READ = NCT6775_REG_PWM_READ; in nct6775_probe()
3712 data->REG_PWM_MODE = NCT6775_REG_PWM_MODE; in nct6775_probe()
3713 data->PWM_MODE_MASK = NCT6775_PWM_MODE_MASK; in nct6775_probe()
3714 data->REG_AUTO_TEMP = NCT6775_REG_AUTO_TEMP; in nct6775_probe()
3715 data->REG_AUTO_PWM = NCT6775_REG_AUTO_PWM; in nct6775_probe()
3716 data->REG_CRITICAL_TEMP = NCT6775_REG_CRITICAL_TEMP; in nct6775_probe()
3717 data->REG_CRITICAL_TEMP_TOLERANCE in nct6775_probe()
3719 data->REG_TEMP_OFFSET = NCT6775_REG_TEMP_OFFSET; in nct6775_probe()
3720 data->REG_TEMP_SOURCE = NCT6775_REG_TEMP_SOURCE; in nct6775_probe()
3721 data->REG_TEMP_SEL = NCT6775_REG_TEMP_SEL; in nct6775_probe()
3722 data->REG_WEIGHT_TEMP_SEL = NCT6775_REG_WEIGHT_TEMP_SEL; in nct6775_probe()
3723 data->REG_WEIGHT_TEMP[0] = NCT6775_REG_WEIGHT_TEMP_STEP; in nct6775_probe()
3724 data->REG_WEIGHT_TEMP[1] = NCT6775_REG_WEIGHT_TEMP_STEP_TOL; in nct6775_probe()
3725 data->REG_WEIGHT_TEMP[2] = NCT6775_REG_WEIGHT_TEMP_BASE; in nct6775_probe()
3726 data->REG_ALARM = NCT6775_REG_ALARM; in nct6775_probe()
3727 data->REG_BEEP = NCT6775_REG_BEEP; in nct6775_probe()
3728 data->REG_TSI_TEMP = NCT6775_REG_TSI_TEMP; in nct6775_probe()
3743 data->in_num = 9; in nct6775_probe()
3744 data->pwm_num = 3; in nct6775_probe()
3745 data->auto_pwm_num = 4; in nct6775_probe()
3746 data->has_fan_div = false; in nct6775_probe()
3747 data->temp_fixed_num = 3; in nct6775_probe()
3748 data->num_temp_alarms = 3; in nct6775_probe()
3749 data->num_temp_beeps = 6; in nct6775_probe()
3751 data->ALARM_BITS = NCT6776_ALARM_BITS; in nct6775_probe()
3752 data->BEEP_BITS = NCT6776_BEEP_BITS; in nct6775_probe()
3754 data->fan_from_reg = fan_from_reg13; in nct6775_probe()
3755 data->fan_from_reg_min = fan_from_reg13; in nct6775_probe()
3756 data->target_temp_mask = 0xff; in nct6775_probe()
3757 data->tolerance_mask = 0x07; in nct6775_probe()
3758 data->speed_tolerance_limit = 63; in nct6775_probe()
3760 data->temp_label = nct6776_temp_label; in nct6775_probe()
3761 data->temp_mask = NCT6776_TEMP_MASK; in nct6775_probe()
3762 data->virt_temp_mask = NCT6776_VIRT_TEMP_MASK; in nct6775_probe()
3764 data->REG_CONFIG = NCT6775_REG_CONFIG; in nct6775_probe()
3765 data->REG_VBAT = NCT6775_REG_VBAT; in nct6775_probe()
3766 data->REG_DIODE = NCT6775_REG_DIODE; in nct6775_probe()
3767 data->DIODE_MASK = NCT6775_DIODE_MASK; in nct6775_probe()
3768 data->REG_VIN = NCT6775_REG_IN; in nct6775_probe()
3769 data->REG_IN_MINMAX[0] = NCT6775_REG_IN_MIN; in nct6775_probe()
3770 data->REG_IN_MINMAX[1] = NCT6775_REG_IN_MAX; in nct6775_probe()
3771 data->REG_TARGET = NCT6775_REG_TARGET; in nct6775_probe()
3772 data->REG_FAN = NCT6775_REG_FAN; in nct6775_probe()
3773 data->REG_FAN_MODE = NCT6775_REG_FAN_MODE; in nct6775_probe()
3774 data->REG_FAN_MIN = NCT6776_REG_FAN_MIN; in nct6775_probe()
3775 data->REG_FAN_PULSES = NCT6776_REG_FAN_PULSES; in nct6775_probe()
3776 data->FAN_PULSE_SHIFT = NCT6775_FAN_PULSE_SHIFT; in nct6775_probe()
3777 data->REG_FAN_TIME[0] = NCT6775_REG_FAN_STOP_TIME; in nct6775_probe()
3778 data->REG_FAN_TIME[1] = NCT6776_REG_FAN_STEP_UP_TIME; in nct6775_probe()
3779 data->REG_FAN_TIME[2] = NCT6776_REG_FAN_STEP_DOWN_TIME; in nct6775_probe()
3780 data->REG_TOLERANCE_H = NCT6776_REG_TOLERANCE_H; in nct6775_probe()
3781 data->REG_PWM[0] = NCT6775_REG_PWM; in nct6775_probe()
3782 data->REG_PWM[1] = NCT6775_REG_FAN_START_OUTPUT; in nct6775_probe()
3783 data->REG_PWM[2] = NCT6775_REG_FAN_STOP_OUTPUT; in nct6775_probe()
3784 data->REG_PWM[5] = NCT6775_REG_WEIGHT_DUTY_STEP; in nct6775_probe()
3785 data->REG_PWM[6] = NCT6776_REG_WEIGHT_DUTY_BASE; in nct6775_probe()
3786 data->REG_PWM_READ = NCT6775_REG_PWM_READ; in nct6775_probe()
3787 data->REG_PWM_MODE = NCT6776_REG_PWM_MODE; in nct6775_probe()
3788 data->PWM_MODE_MASK = NCT6776_PWM_MODE_MASK; in nct6775_probe()
3789 data->REG_AUTO_TEMP = NCT6775_REG_AUTO_TEMP; in nct6775_probe()
3790 data->REG_AUTO_PWM = NCT6775_REG_AUTO_PWM; in nct6775_probe()
3791 data->REG_CRITICAL_TEMP = NCT6775_REG_CRITICAL_TEMP; in nct6775_probe()
3792 data->REG_CRITICAL_TEMP_TOLERANCE in nct6775_probe()
3794 data->REG_TEMP_OFFSET = NCT6775_REG_TEMP_OFFSET; in nct6775_probe()
3795 data->REG_TEMP_SOURCE = NCT6775_REG_TEMP_SOURCE; in nct6775_probe()
3796 data->REG_TEMP_SEL = NCT6775_REG_TEMP_SEL; in nct6775_probe()
3797 data->REG_WEIGHT_TEMP_SEL = NCT6775_REG_WEIGHT_TEMP_SEL; in nct6775_probe()
3798 data->REG_WEIGHT_TEMP[0] = NCT6775_REG_WEIGHT_TEMP_STEP; in nct6775_probe()
3799 data->REG_WEIGHT_TEMP[1] = NCT6775_REG_WEIGHT_TEMP_STEP_TOL; in nct6775_probe()
3800 data->REG_WEIGHT_TEMP[2] = NCT6775_REG_WEIGHT_TEMP_BASE; in nct6775_probe()
3801 data->REG_ALARM = NCT6775_REG_ALARM; in nct6775_probe()
3802 data->REG_BEEP = NCT6776_REG_BEEP; in nct6775_probe()
3803 data->REG_TSI_TEMP = NCT6776_REG_TSI_TEMP; in nct6775_probe()
3818 data->in_num = 15; in nct6775_probe()
3819 data->pwm_num = 5; in nct6775_probe()
3820 data->auto_pwm_num = 4; in nct6775_probe()
3821 data->has_fan_div = false; in nct6775_probe()
3822 data->temp_fixed_num = 6; in nct6775_probe()
3823 data->num_temp_alarms = 2; in nct6775_probe()
3824 data->num_temp_beeps = 2; in nct6775_probe()
3826 data->ALARM_BITS = NCT6779_ALARM_BITS; in nct6775_probe()
3827 data->BEEP_BITS = NCT6779_BEEP_BITS; in nct6775_probe()
3829 data->fan_from_reg = fan_from_reg_rpm; in nct6775_probe()
3830 data->fan_from_reg_min = fan_from_reg13; in nct6775_probe()
3831 data->target_temp_mask = 0xff; in nct6775_probe()
3832 data->tolerance_mask = 0x07; in nct6775_probe()
3833 data->speed_tolerance_limit = 63; in nct6775_probe()
3835 data->temp_label = nct6779_temp_label; in nct6775_probe()
3836 data->temp_mask = NCT6779_TEMP_MASK; in nct6775_probe()
3837 data->virt_temp_mask = NCT6779_VIRT_TEMP_MASK; in nct6775_probe()
3839 data->REG_CONFIG = NCT6775_REG_CONFIG; in nct6775_probe()
3840 data->REG_VBAT = NCT6775_REG_VBAT; in nct6775_probe()
3841 data->REG_DIODE = NCT6775_REG_DIODE; in nct6775_probe()
3842 data->DIODE_MASK = NCT6775_DIODE_MASK; in nct6775_probe()
3843 data->REG_VIN = NCT6779_REG_IN; in nct6775_probe()
3844 data->REG_IN_MINMAX[0] = NCT6775_REG_IN_MIN; in nct6775_probe()
3845 data->REG_IN_MINMAX[1] = NCT6775_REG_IN_MAX; in nct6775_probe()
3846 data->REG_TARGET = NCT6775_REG_TARGET; in nct6775_probe()
3847 data->REG_FAN = NCT6779_REG_FAN; in nct6775_probe()
3848 data->REG_FAN_MODE = NCT6775_REG_FAN_MODE; in nct6775_probe()
3849 data->REG_FAN_MIN = NCT6776_REG_FAN_MIN; in nct6775_probe()
3850 data->REG_FAN_PULSES = NCT6779_REG_FAN_PULSES; in nct6775_probe()
3851 data->FAN_PULSE_SHIFT = NCT6775_FAN_PULSE_SHIFT; in nct6775_probe()
3852 data->REG_FAN_TIME[0] = NCT6775_REG_FAN_STOP_TIME; in nct6775_probe()
3853 data->REG_FAN_TIME[1] = NCT6776_REG_FAN_STEP_UP_TIME; in nct6775_probe()
3854 data->REG_FAN_TIME[2] = NCT6776_REG_FAN_STEP_DOWN_TIME; in nct6775_probe()
3855 data->REG_TOLERANCE_H = NCT6776_REG_TOLERANCE_H; in nct6775_probe()
3856 data->REG_PWM[0] = NCT6775_REG_PWM; in nct6775_probe()
3857 data->REG_PWM[1] = NCT6775_REG_FAN_START_OUTPUT; in nct6775_probe()
3858 data->REG_PWM[2] = NCT6775_REG_FAN_STOP_OUTPUT; in nct6775_probe()
3859 data->REG_PWM[5] = NCT6775_REG_WEIGHT_DUTY_STEP; in nct6775_probe()
3860 data->REG_PWM[6] = NCT6776_REG_WEIGHT_DUTY_BASE; in nct6775_probe()
3861 data->REG_PWM_READ = NCT6775_REG_PWM_READ; in nct6775_probe()
3862 data->REG_PWM_MODE = NCT6776_REG_PWM_MODE; in nct6775_probe()
3863 data->PWM_MODE_MASK = NCT6776_PWM_MODE_MASK; in nct6775_probe()
3864 data->REG_AUTO_TEMP = NCT6775_REG_AUTO_TEMP; in nct6775_probe()
3865 data->REG_AUTO_PWM = NCT6775_REG_AUTO_PWM; in nct6775_probe()
3866 data->REG_CRITICAL_TEMP = NCT6775_REG_CRITICAL_TEMP; in nct6775_probe()
3867 data->REG_CRITICAL_TEMP_TOLERANCE in nct6775_probe()
3869 data->REG_CRITICAL_PWM_ENABLE = NCT6779_REG_CRITICAL_PWM_ENABLE; in nct6775_probe()
3870 data->CRITICAL_PWM_ENABLE_MASK in nct6775_probe()
3872 data->REG_CRITICAL_PWM = NCT6779_REG_CRITICAL_PWM; in nct6775_probe()
3873 data->REG_TEMP_OFFSET = NCT6779_REG_TEMP_OFFSET; in nct6775_probe()
3874 data->REG_TEMP_SOURCE = NCT6775_REG_TEMP_SOURCE; in nct6775_probe()
3875 data->REG_TEMP_SEL = NCT6775_REG_TEMP_SEL; in nct6775_probe()
3876 data->REG_WEIGHT_TEMP_SEL = NCT6775_REG_WEIGHT_TEMP_SEL; in nct6775_probe()
3877 data->REG_WEIGHT_TEMP[0] = NCT6775_REG_WEIGHT_TEMP_STEP; in nct6775_probe()
3878 data->REG_WEIGHT_TEMP[1] = NCT6775_REG_WEIGHT_TEMP_STEP_TOL; in nct6775_probe()
3879 data->REG_WEIGHT_TEMP[2] = NCT6775_REG_WEIGHT_TEMP_BASE; in nct6775_probe()
3880 data->REG_ALARM = NCT6779_REG_ALARM; in nct6775_probe()
3881 data->REG_BEEP = NCT6776_REG_BEEP; in nct6775_probe()
3882 data->REG_TSI_TEMP = NCT6776_REG_TSI_TEMP; in nct6775_probe()
3902 data->in_num = 15; in nct6775_probe()
3903 data->pwm_num = (data->kind == nct6796 || in nct6775_probe()
3904 data->kind == nct6797) ? 7 : 6; in nct6775_probe()
3905 data->auto_pwm_num = 4; in nct6775_probe()
3906 data->has_fan_div = false; in nct6775_probe()
3907 data->temp_fixed_num = 6; in nct6775_probe()
3908 data->num_temp_alarms = 2; in nct6775_probe()
3909 data->num_temp_beeps = 2; in nct6775_probe()
3911 data->ALARM_BITS = NCT6791_ALARM_BITS; in nct6775_probe()
3912 data->BEEP_BITS = NCT6779_BEEP_BITS; in nct6775_probe()
3914 data->fan_from_reg = fan_from_reg_rpm; in nct6775_probe()
3915 data->fan_from_reg_min = fan_from_reg13; in nct6775_probe()
3916 data->target_temp_mask = 0xff; in nct6775_probe()
3917 data->tolerance_mask = 0x07; in nct6775_probe()
3918 data->speed_tolerance_limit = 63; in nct6775_probe()
3920 switch (data->kind) { in nct6775_probe()
3923 data->temp_label = nct6779_temp_label; in nct6775_probe()
3924 data->temp_mask = NCT6791_TEMP_MASK; in nct6775_probe()
3925 data->virt_temp_mask = NCT6791_VIRT_TEMP_MASK; in nct6775_probe()
3928 data->temp_label = nct6792_temp_label; in nct6775_probe()
3929 data->temp_mask = NCT6792_TEMP_MASK; in nct6775_probe()
3930 data->virt_temp_mask = NCT6792_VIRT_TEMP_MASK; in nct6775_probe()
3933 data->temp_label = nct6793_temp_label; in nct6775_probe()
3934 data->temp_mask = NCT6793_TEMP_MASK; in nct6775_probe()
3935 data->virt_temp_mask = NCT6793_VIRT_TEMP_MASK; in nct6775_probe()
3939 data->temp_label = nct6795_temp_label; in nct6775_probe()
3940 data->temp_mask = NCT6795_TEMP_MASK; in nct6775_probe()
3941 data->virt_temp_mask = NCT6795_VIRT_TEMP_MASK; in nct6775_probe()
3944 data->temp_label = nct6796_temp_label; in nct6775_probe()
3945 data->temp_mask = NCT6796_TEMP_MASK; in nct6775_probe()
3946 data->virt_temp_mask = NCT6796_VIRT_TEMP_MASK; in nct6775_probe()
3950 data->REG_CONFIG = NCT6775_REG_CONFIG; in nct6775_probe()
3951 data->REG_VBAT = NCT6775_REG_VBAT; in nct6775_probe()
3952 data->REG_DIODE = NCT6775_REG_DIODE; in nct6775_probe()
3953 data->DIODE_MASK = NCT6775_DIODE_MASK; in nct6775_probe()
3954 data->REG_VIN = NCT6779_REG_IN; in nct6775_probe()
3955 data->REG_IN_MINMAX[0] = NCT6775_REG_IN_MIN; in nct6775_probe()
3956 data->REG_IN_MINMAX[1] = NCT6775_REG_IN_MAX; in nct6775_probe()
3957 data->REG_TARGET = NCT6775_REG_TARGET; in nct6775_probe()
3958 data->REG_FAN = NCT6779_REG_FAN; in nct6775_probe()
3959 data->REG_FAN_MODE = NCT6775_REG_FAN_MODE; in nct6775_probe()
3960 data->REG_FAN_MIN = NCT6776_REG_FAN_MIN; in nct6775_probe()
3961 data->REG_FAN_PULSES = NCT6779_REG_FAN_PULSES; in nct6775_probe()
3962 data->FAN_PULSE_SHIFT = NCT6775_FAN_PULSE_SHIFT; in nct6775_probe()
3963 data->REG_FAN_TIME[0] = NCT6775_REG_FAN_STOP_TIME; in nct6775_probe()
3964 data->REG_FAN_TIME[1] = NCT6776_REG_FAN_STEP_UP_TIME; in nct6775_probe()
3965 data->REG_FAN_TIME[2] = NCT6776_REG_FAN_STEP_DOWN_TIME; in nct6775_probe()
3966 data->REG_TOLERANCE_H = NCT6776_REG_TOLERANCE_H; in nct6775_probe()
3967 data->REG_PWM[0] = NCT6775_REG_PWM; in nct6775_probe()
3968 data->REG_PWM[1] = NCT6775_REG_FAN_START_OUTPUT; in nct6775_probe()
3969 data->REG_PWM[2] = NCT6775_REG_FAN_STOP_OUTPUT; in nct6775_probe()
3970 data->REG_PWM[5] = NCT6791_REG_WEIGHT_DUTY_STEP; in nct6775_probe()
3971 data->REG_PWM[6] = NCT6791_REG_WEIGHT_DUTY_BASE; in nct6775_probe()
3972 data->REG_PWM_READ = NCT6775_REG_PWM_READ; in nct6775_probe()
3973 data->REG_PWM_MODE = NCT6776_REG_PWM_MODE; in nct6775_probe()
3974 data->PWM_MODE_MASK = NCT6776_PWM_MODE_MASK; in nct6775_probe()
3975 data->REG_AUTO_TEMP = NCT6775_REG_AUTO_TEMP; in nct6775_probe()
3976 data->REG_AUTO_PWM = NCT6775_REG_AUTO_PWM; in nct6775_probe()
3977 data->REG_CRITICAL_TEMP = NCT6775_REG_CRITICAL_TEMP; in nct6775_probe()
3978 data->REG_CRITICAL_TEMP_TOLERANCE in nct6775_probe()
3980 data->REG_CRITICAL_PWM_ENABLE = NCT6779_REG_CRITICAL_PWM_ENABLE; in nct6775_probe()
3981 data->CRITICAL_PWM_ENABLE_MASK in nct6775_probe()
3983 data->REG_CRITICAL_PWM = NCT6779_REG_CRITICAL_PWM; in nct6775_probe()
3984 data->REG_TEMP_OFFSET = NCT6779_REG_TEMP_OFFSET; in nct6775_probe()
3985 data->REG_TEMP_SOURCE = NCT6775_REG_TEMP_SOURCE; in nct6775_probe()
3986 data->REG_TEMP_SEL = NCT6775_REG_TEMP_SEL; in nct6775_probe()
3987 data->REG_WEIGHT_TEMP_SEL = NCT6791_REG_WEIGHT_TEMP_SEL; in nct6775_probe()
3988 data->REG_WEIGHT_TEMP[0] = NCT6791_REG_WEIGHT_TEMP_STEP; in nct6775_probe()
3989 data->REG_WEIGHT_TEMP[1] = NCT6791_REG_WEIGHT_TEMP_STEP_TOL; in nct6775_probe()
3990 data->REG_WEIGHT_TEMP[2] = NCT6791_REG_WEIGHT_TEMP_BASE; in nct6775_probe()
3991 data->REG_ALARM = NCT6791_REG_ALARM; in nct6775_probe()
3992 if (data->kind == nct6791) in nct6775_probe()
3993 data->REG_BEEP = NCT6776_REG_BEEP; in nct6775_probe()
3995 data->REG_BEEP = NCT6792_REG_BEEP; in nct6775_probe()
3996 switch (data->kind) { in nct6775_probe()
4000 data->REG_TSI_TEMP = NCT6776_REG_TSI_TEMP; in nct6775_probe()
4006 data->REG_TSI_TEMP = NCT6796_REG_TSI_TEMP; in nct6775_probe()
4016 if (data->kind == nct6791) { in nct6775_probe()
4032 data->in_num = data->kind == nct6799 ? 18 : 15; in nct6775_probe()
4033 data->scale_in = scale_in_6798; in nct6775_probe()
4034 data->pwm_num = 7; in nct6775_probe()
4035 data->auto_pwm_num = 4; in nct6775_probe()
4036 data->has_fan_div = false; in nct6775_probe()
4037 data->temp_fixed_num = 6; in nct6775_probe()
4038 data->num_temp_alarms = 7; in nct6775_probe()
4039 data->num_temp_beeps = 8; in nct6775_probe()
4041 data->ALARM_BITS = NCT6799_ALARM_BITS; in nct6775_probe()
4042 data->BEEP_BITS = NCT6799_BEEP_BITS; in nct6775_probe()
4044 data->fan_from_reg = fan_from_reg_rpm; in nct6775_probe()
4045 data->fan_from_reg_min = fan_from_reg13; in nct6775_probe()
4046 data->target_temp_mask = 0xff; in nct6775_probe()
4047 data->tolerance_mask = 0x07; in nct6775_probe()
4048 data->speed_tolerance_limit = 63; in nct6775_probe()
4050 switch (data->kind) { in nct6775_probe()
4053 data->temp_label = nct6798_temp_label; in nct6775_probe()
4054 data->temp_mask = NCT6798_TEMP_MASK; in nct6775_probe()
4055 data->virt_temp_mask = NCT6798_VIRT_TEMP_MASK; in nct6775_probe()
4058 data->temp_label = nct6799_temp_label; in nct6775_probe()
4059 data->temp_mask = NCT6799_TEMP_MASK; in nct6775_probe()
4060 data->virt_temp_mask = NCT6799_VIRT_TEMP_MASK; in nct6775_probe()
4064 data->REG_CONFIG = NCT6775_REG_CONFIG; in nct6775_probe()
4065 data->REG_VBAT = NCT6775_REG_VBAT; in nct6775_probe()
4066 data->REG_DIODE = NCT6775_REG_DIODE; in nct6775_probe()
4067 data->DIODE_MASK = NCT6775_DIODE_MASK; in nct6775_probe()
4068 data->REG_VIN = NCT6779_REG_IN; in nct6775_probe()
4069 data->REG_IN_MINMAX[0] = NCT6775_REG_IN_MIN; in nct6775_probe()
4070 data->REG_IN_MINMAX[1] = NCT6775_REG_IN_MAX; in nct6775_probe()
4071 data->REG_TARGET = NCT6775_REG_TARGET; in nct6775_probe()
4072 data->REG_FAN = NCT6779_REG_FAN; in nct6775_probe()
4073 data->REG_FAN_MODE = NCT6775_REG_FAN_MODE; in nct6775_probe()
4074 data->REG_FAN_MIN = NCT6776_REG_FAN_MIN; in nct6775_probe()
4075 data->REG_FAN_PULSES = NCT6779_REG_FAN_PULSES; in nct6775_probe()
4076 data->FAN_PULSE_SHIFT = NCT6775_FAN_PULSE_SHIFT; in nct6775_probe()
4077 data->REG_FAN_TIME[0] = NCT6775_REG_FAN_STOP_TIME; in nct6775_probe()
4078 data->REG_FAN_TIME[1] = NCT6776_REG_FAN_STEP_UP_TIME; in nct6775_probe()
4079 data->REG_FAN_TIME[2] = NCT6776_REG_FAN_STEP_DOWN_TIME; in nct6775_probe()
4080 data->REG_TOLERANCE_H = NCT6776_REG_TOLERANCE_H; in nct6775_probe()
4081 data->REG_PWM[0] = NCT6775_REG_PWM; in nct6775_probe()
4082 data->REG_PWM[1] = NCT6775_REG_FAN_START_OUTPUT; in nct6775_probe()
4083 data->REG_PWM[2] = NCT6775_REG_FAN_STOP_OUTPUT; in nct6775_probe()
4084 data->REG_PWM[5] = NCT6791_REG_WEIGHT_DUTY_STEP; in nct6775_probe()
4085 data->REG_PWM[6] = NCT6791_REG_WEIGHT_DUTY_BASE; in nct6775_probe()
4086 data->REG_PWM_READ = NCT6775_REG_PWM_READ; in nct6775_probe()
4087 data->REG_PWM_MODE = NCT6776_REG_PWM_MODE; in nct6775_probe()
4088 data->PWM_MODE_MASK = NCT6776_PWM_MODE_MASK; in nct6775_probe()
4089 data->REG_AUTO_TEMP = NCT6775_REG_AUTO_TEMP; in nct6775_probe()
4090 data->REG_AUTO_PWM = NCT6775_REG_AUTO_PWM; in nct6775_probe()
4091 data->REG_CRITICAL_TEMP = NCT6775_REG_CRITICAL_TEMP; in nct6775_probe()
4092 data->REG_CRITICAL_TEMP_TOLERANCE = NCT6775_REG_CRITICAL_TEMP_TOLERANCE; in nct6775_probe()
4093 data->REG_CRITICAL_PWM_ENABLE = NCT6779_REG_CRITICAL_PWM_ENABLE; in nct6775_probe()
4094 data->CRITICAL_PWM_ENABLE_MASK = NCT6779_CRITICAL_PWM_ENABLE_MASK; in nct6775_probe()
4095 data->REG_CRITICAL_PWM = NCT6779_REG_CRITICAL_PWM; in nct6775_probe()
4096 data->REG_TEMP_OFFSET = NCT6779_REG_TEMP_OFFSET; in nct6775_probe()
4097 data->REG_TEMP_SOURCE = NCT6798_REG_TEMP_SOURCE; in nct6775_probe()
4098 data->REG_TEMP_SEL = NCT6775_REG_TEMP_SEL; in nct6775_probe()
4099 data->REG_WEIGHT_TEMP_SEL = NCT6791_REG_WEIGHT_TEMP_SEL; in nct6775_probe()
4100 data->REG_WEIGHT_TEMP[0] = NCT6791_REG_WEIGHT_TEMP_STEP; in nct6775_probe()
4101 data->REG_WEIGHT_TEMP[1] = NCT6791_REG_WEIGHT_TEMP_STEP_TOL; in nct6775_probe()
4102 data->REG_WEIGHT_TEMP[2] = NCT6791_REG_WEIGHT_TEMP_BASE; in nct6775_probe()
4103 data->REG_ALARM = NCT6799_REG_ALARM; in nct6775_probe()
4104 data->REG_BEEP = NCT6792_REG_BEEP; in nct6775_probe()
4105 data->REG_TSI_TEMP = NCT6796_REG_TSI_TEMP; in nct6775_probe()
4122 data->have_in = BIT(data->in_num) - 1; in nct6775_probe()
4123 data->have_temp = 0; in nct6775_probe()
4139 err = nct6775_read_value(data, data->REG_TEMP_SOURCE[i], &src); in nct6775_probe()
4153 err = add_temp_sensors(data, data->REG_TEMP_SEL, &available, &mask); in nct6775_probe()
4156 err = add_temp_sensors(data, data->REG_WEIGHT_TEMP_SEL, &available, &mask); in nct6775_probe()
4166 err = nct6775_read_value(data, data->REG_TEMP_SOURCE[i], &src); in nct6775_probe()
4173 if (!(data->temp_mask & BIT(src))) { in nct6775_probe()
4176 src, i, data->REG_TEMP_SOURCE[i], reg_temp[i]); in nct6775_probe()
4183 if (src <= data->temp_fixed_num) { in nct6775_probe()
4184 data->have_temp |= BIT(src - 1); in nct6775_probe()
4185 data->have_temp_fixed |= BIT(src - 1); in nct6775_probe()
4186 data->reg_temp[0][src - 1] = reg_temp[i]; in nct6775_probe()
4187 data->reg_temp[1][src - 1] = reg_temp_over[i]; in nct6775_probe()
4188 data->reg_temp[2][src - 1] = reg_temp_hyst[i]; in nct6775_probe()
4190 data->reg_temp[3][src - 1] = reg_temp_crit_h[i]; in nct6775_probe()
4192 data->reg_temp[3][src - 1] in nct6775_probe()
4195 data->reg_temp[4][src - 1] = reg_temp_crit_l[i]; in nct6775_probe()
4196 data->reg_temp_config[src - 1] = reg_temp_config[i]; in nct6775_probe()
4197 data->temp_src[src - 1] = src; in nct6775_probe()
4205 data->have_temp |= BIT(s); in nct6775_probe()
4206 data->reg_temp[0][s] = reg_temp[i]; in nct6775_probe()
4207 data->reg_temp[1][s] = reg_temp_over[i]; in nct6775_probe()
4208 data->reg_temp[2][s] = reg_temp_hyst[i]; in nct6775_probe()
4209 data->reg_temp_config[s] = reg_temp_config[i]; in nct6775_probe()
4211 data->reg_temp[3][s] = reg_temp_crit_h[i]; in nct6775_probe()
4213 data->reg_temp[3][s] = reg_temp_crit[src - 1]; in nct6775_probe()
4215 data->reg_temp[4][s] = reg_temp_crit_l[i]; in nct6775_probe()
4217 data->temp_src[s] = src; in nct6775_probe()
4229 err = nct6775_read_value(data, data->REG_TEMP_SEL[i], &src); in nct6775_probe()
4236 if (!(data->temp_mask & BIT(src))) { in nct6775_probe()
4239 src, i, data->REG_TEMP_SEL[i], in nct6775_probe()
4249 if (!(data->virt_temp_mask & BIT(src))) { in nct6775_probe()
4256 if (src <= data->temp_fixed_num) { in nct6775_probe()
4257 if (data->have_temp & BIT(src - 1)) in nct6775_probe()
4259 data->have_temp |= BIT(src - 1); in nct6775_probe()
4260 data->have_temp_fixed |= BIT(src - 1); in nct6775_probe()
4261 data->reg_temp[0][src - 1] = reg_temp_mon[i]; in nct6775_probe()
4262 data->temp_src[src - 1] = src; in nct6775_probe()
4270 data->have_temp |= BIT(s); in nct6775_probe()
4271 data->reg_temp[0][s] = reg_temp_mon[i]; in nct6775_probe()
4272 data->temp_src[s] = src; in nct6775_probe()
4284 if (!(data->temp_mask & BIT(i + 1))) in nct6775_probe()
4290 if (i < data->temp_fixed_num) { in nct6775_probe()
4291 if (data->have_temp & BIT(i)) in nct6775_probe()
4293 data->have_temp |= BIT(i); in nct6775_probe()
4294 data->have_temp_fixed |= BIT(i); in nct6775_probe()
4295 data->reg_temp[0][i] = reg_temp_alternate[i]; in nct6775_probe()
4297 data->reg_temp[1][i] = reg_temp_over[i]; in nct6775_probe()
4298 data->reg_temp[2][i] = reg_temp_hyst[i]; in nct6775_probe()
4300 data->temp_src[i] = i + 1; in nct6775_probe()
4307 data->have_temp |= BIT(s); in nct6775_probe()
4308 data->reg_temp[0][s] = reg_temp_alternate[i]; in nct6775_probe()
4309 data->temp_src[s] = i + 1; in nct6775_probe()
4318 err = nct6775_read_value(data, data->REG_TSI_TEMP[i], &tmp); in nct6775_probe()
4322 data->have_tsi_temp |= BIT(i); in nct6775_probe()
4326 err = nct6775_init_device(data); in nct6775_probe()
4330 if (data->driver_init) { in nct6775_probe()
4331 err = data->driver_init(data); in nct6775_probe()
4337 err = nct6775_init_fan_common(dev, data); in nct6775_probe()
4342 err = nct6775_add_template_attr_group(dev, data, &nct6775_pwm_template_group, in nct6775_probe()
4343 data->pwm_num); in nct6775_probe()
4347 err = nct6775_add_template_attr_group(dev, data, &nct6775_in_template_group, in nct6775_probe()
4348 fls(data->have_in)); in nct6775_probe()
4352 err = nct6775_add_template_attr_group(dev, data, &nct6775_fan_template_group, in nct6775_probe()
4353 fls(data->has_fan)); in nct6775_probe()
4357 err = nct6775_add_template_attr_group(dev, data, &nct6775_temp_template_group, in nct6775_probe()
4358 fls(data->have_temp)); in nct6775_probe()
4362 if (data->have_tsi_temp) { in nct6775_probe()
4365 tsi_temp_tg.base = fls(data->have_temp) + 1; in nct6775_probe()
4366 err = nct6775_add_template_attr_group(dev, data, &tsi_temp_tg, in nct6775_probe()
4367 fls(data->have_tsi_temp)); in nct6775_probe()
4372 hwmon_dev = devm_hwmon_device_register_with_groups(dev, data->name, in nct6775_probe()
4373 data, data->groups); in nct6775_probe()