diff options
author | Jean Delvare <khali@linux-fr.org> | 2007-11-29 17:47:54 -0500 |
---|---|---|
committer | Mark M. Hoffman <mhoffman@lightlink.com> | 2008-02-07 20:39:43 -0500 |
commit | 5b34dbcd88251508d02e48ad9b0f9b8232a13ee0 (patch) | |
tree | fdc0d9d1cfbf22240a73a13b08dae3ecf91cb33d /drivers/hwmon | |
parent | f67fdabfb94b0bb96623a4b48d22be5329a06277 (diff) |
hwmon: (adm1026) Don't create files for missing inputs
On the ADM1026, pins 27 and 28 can be used for two different functions:
either temp3, or in8+in9. We should only create the sysfs files for the
function that is configured, otherwise it is confusing for the user.
Signed-off-by: Jean Delvare <khali@linux-fr.org>
Signed-off-by: Mark M. Hoffman <mhoffman@lightlink.com>
Diffstat (limited to 'drivers/hwmon')
-rw-r--r-- | drivers/hwmon/adm1026.c | 70 |
1 files changed, 50 insertions, 20 deletions
diff --git a/drivers/hwmon/adm1026.c b/drivers/hwmon/adm1026.c index a20af03f4fc6..8002f68240c4 100644 --- a/drivers/hwmon/adm1026.c +++ b/drivers/hwmon/adm1026.c | |||
@@ -1507,14 +1507,6 @@ static struct attribute *adm1026_attributes[] = { | |||
1507 | &sensor_dev_attr_in7_max.dev_attr.attr, | 1507 | &sensor_dev_attr_in7_max.dev_attr.attr, |
1508 | &sensor_dev_attr_in7_min.dev_attr.attr, | 1508 | &sensor_dev_attr_in7_min.dev_attr.attr, |
1509 | &sensor_dev_attr_in7_alarm.dev_attr.attr, | 1509 | &sensor_dev_attr_in7_alarm.dev_attr.attr, |
1510 | &sensor_dev_attr_in8_input.dev_attr.attr, | ||
1511 | &sensor_dev_attr_in8_max.dev_attr.attr, | ||
1512 | &sensor_dev_attr_in8_min.dev_attr.attr, | ||
1513 | &sensor_dev_attr_in8_alarm.dev_attr.attr, | ||
1514 | &sensor_dev_attr_in9_input.dev_attr.attr, | ||
1515 | &sensor_dev_attr_in9_max.dev_attr.attr, | ||
1516 | &sensor_dev_attr_in9_min.dev_attr.attr, | ||
1517 | &sensor_dev_attr_in9_alarm.dev_attr.attr, | ||
1518 | &sensor_dev_attr_in10_input.dev_attr.attr, | 1510 | &sensor_dev_attr_in10_input.dev_attr.attr, |
1519 | &sensor_dev_attr_in10_max.dev_attr.attr, | 1511 | &sensor_dev_attr_in10_max.dev_attr.attr, |
1520 | &sensor_dev_attr_in10_min.dev_attr.attr, | 1512 | &sensor_dev_attr_in10_min.dev_attr.attr, |
@@ -1583,28 +1575,18 @@ static struct attribute *adm1026_attributes[] = { | |||
1583 | &sensor_dev_attr_temp2_max.dev_attr.attr, | 1575 | &sensor_dev_attr_temp2_max.dev_attr.attr, |
1584 | &sensor_dev_attr_temp2_min.dev_attr.attr, | 1576 | &sensor_dev_attr_temp2_min.dev_attr.attr, |
1585 | &sensor_dev_attr_temp2_alarm.dev_attr.attr, | 1577 | &sensor_dev_attr_temp2_alarm.dev_attr.attr, |
1586 | &sensor_dev_attr_temp3_input.dev_attr.attr, | ||
1587 | &sensor_dev_attr_temp3_max.dev_attr.attr, | ||
1588 | &sensor_dev_attr_temp3_min.dev_attr.attr, | ||
1589 | &sensor_dev_attr_temp3_alarm.dev_attr.attr, | ||
1590 | &sensor_dev_attr_temp1_offset.dev_attr.attr, | 1578 | &sensor_dev_attr_temp1_offset.dev_attr.attr, |
1591 | &sensor_dev_attr_temp2_offset.dev_attr.attr, | 1579 | &sensor_dev_attr_temp2_offset.dev_attr.attr, |
1592 | &sensor_dev_attr_temp3_offset.dev_attr.attr, | ||
1593 | &sensor_dev_attr_temp1_auto_point1_temp.dev_attr.attr, | 1580 | &sensor_dev_attr_temp1_auto_point1_temp.dev_attr.attr, |
1594 | &sensor_dev_attr_temp2_auto_point1_temp.dev_attr.attr, | 1581 | &sensor_dev_attr_temp2_auto_point1_temp.dev_attr.attr, |
1595 | &sensor_dev_attr_temp3_auto_point1_temp.dev_attr.attr, | ||
1596 | &sensor_dev_attr_temp1_auto_point1_temp_hyst.dev_attr.attr, | 1582 | &sensor_dev_attr_temp1_auto_point1_temp_hyst.dev_attr.attr, |
1597 | &sensor_dev_attr_temp2_auto_point1_temp_hyst.dev_attr.attr, | 1583 | &sensor_dev_attr_temp2_auto_point1_temp_hyst.dev_attr.attr, |
1598 | &sensor_dev_attr_temp3_auto_point1_temp_hyst.dev_attr.attr, | ||
1599 | &sensor_dev_attr_temp1_auto_point2_temp.dev_attr.attr, | 1584 | &sensor_dev_attr_temp1_auto_point2_temp.dev_attr.attr, |
1600 | &sensor_dev_attr_temp2_auto_point2_temp.dev_attr.attr, | 1585 | &sensor_dev_attr_temp2_auto_point2_temp.dev_attr.attr, |
1601 | &sensor_dev_attr_temp3_auto_point2_temp.dev_attr.attr, | ||
1602 | &sensor_dev_attr_temp1_crit.dev_attr.attr, | 1586 | &sensor_dev_attr_temp1_crit.dev_attr.attr, |
1603 | &sensor_dev_attr_temp2_crit.dev_attr.attr, | 1587 | &sensor_dev_attr_temp2_crit.dev_attr.attr, |
1604 | &sensor_dev_attr_temp3_crit.dev_attr.attr, | ||
1605 | &dev_attr_temp1_crit_enable.attr, | 1588 | &dev_attr_temp1_crit_enable.attr, |
1606 | &dev_attr_temp2_crit_enable.attr, | 1589 | &dev_attr_temp2_crit_enable.attr, |
1607 | &dev_attr_temp3_crit_enable.attr, | ||
1608 | &dev_attr_cpu0_vid.attr, | 1590 | &dev_attr_cpu0_vid.attr, |
1609 | &dev_attr_vrm.attr, | 1591 | &dev_attr_vrm.attr, |
1610 | &dev_attr_alarms.attr, | 1592 | &dev_attr_alarms.attr, |
@@ -1619,10 +1601,8 @@ static struct attribute *adm1026_attributes[] = { | |||
1619 | &dev_attr_pwm3_enable.attr, | 1601 | &dev_attr_pwm3_enable.attr, |
1620 | &dev_attr_temp1_auto_point1_pwm.attr, | 1602 | &dev_attr_temp1_auto_point1_pwm.attr, |
1621 | &dev_attr_temp2_auto_point1_pwm.attr, | 1603 | &dev_attr_temp2_auto_point1_pwm.attr, |
1622 | &dev_attr_temp3_auto_point1_pwm.attr, | ||
1623 | &dev_attr_temp1_auto_point2_pwm.attr, | 1604 | &dev_attr_temp1_auto_point2_pwm.attr, |
1624 | &dev_attr_temp2_auto_point2_pwm.attr, | 1605 | &dev_attr_temp2_auto_point2_pwm.attr, |
1625 | &dev_attr_temp3_auto_point2_pwm.attr, | ||
1626 | &dev_attr_analog_out.attr, | 1606 | &dev_attr_analog_out.attr, |
1627 | NULL | 1607 | NULL |
1628 | }; | 1608 | }; |
@@ -1631,6 +1611,40 @@ static const struct attribute_group adm1026_group = { | |||
1631 | .attrs = adm1026_attributes, | 1611 | .attrs = adm1026_attributes, |
1632 | }; | 1612 | }; |
1633 | 1613 | ||
1614 | static struct attribute *adm1026_attributes_temp3[] = { | ||
1615 | &sensor_dev_attr_temp3_input.dev_attr.attr, | ||
1616 | &sensor_dev_attr_temp3_max.dev_attr.attr, | ||
1617 | &sensor_dev_attr_temp3_min.dev_attr.attr, | ||
1618 | &sensor_dev_attr_temp3_alarm.dev_attr.attr, | ||
1619 | &sensor_dev_attr_temp3_offset.dev_attr.attr, | ||
1620 | &sensor_dev_attr_temp3_auto_point1_temp.dev_attr.attr, | ||
1621 | &sensor_dev_attr_temp3_auto_point1_temp_hyst.dev_attr.attr, | ||
1622 | &sensor_dev_attr_temp3_auto_point2_temp.dev_attr.attr, | ||
1623 | &sensor_dev_attr_temp3_crit.dev_attr.attr, | ||
1624 | &dev_attr_temp3_crit_enable.attr, | ||
1625 | &dev_attr_temp3_auto_point1_pwm.attr, | ||
1626 | &dev_attr_temp3_auto_point2_pwm.attr, | ||
1627 | }; | ||
1628 | |||
1629 | static const struct attribute_group adm1026_group_temp3 = { | ||
1630 | .attrs = adm1026_attributes_temp3, | ||
1631 | }; | ||
1632 | |||
1633 | static struct attribute *adm1026_attributes_in8_9[] = { | ||
1634 | &sensor_dev_attr_in8_input.dev_attr.attr, | ||
1635 | &sensor_dev_attr_in8_max.dev_attr.attr, | ||
1636 | &sensor_dev_attr_in8_min.dev_attr.attr, | ||
1637 | &sensor_dev_attr_in8_alarm.dev_attr.attr, | ||
1638 | &sensor_dev_attr_in9_input.dev_attr.attr, | ||
1639 | &sensor_dev_attr_in9_max.dev_attr.attr, | ||
1640 | &sensor_dev_attr_in9_min.dev_attr.attr, | ||
1641 | &sensor_dev_attr_in9_alarm.dev_attr.attr, | ||
1642 | }; | ||
1643 | |||
1644 | static const struct attribute_group adm1026_group_in8_9 = { | ||
1645 | .attrs = adm1026_attributes_in8_9, | ||
1646 | }; | ||
1647 | |||
1634 | static int adm1026_detect(struct i2c_adapter *adapter, int address, | 1648 | static int adm1026_detect(struct i2c_adapter *adapter, int address, |
1635 | int kind) | 1649 | int kind) |
1636 | { | 1650 | { |
@@ -1733,6 +1747,14 @@ static int adm1026_detect(struct i2c_adapter *adapter, int address, | |||
1733 | /* Register sysfs hooks */ | 1747 | /* Register sysfs hooks */ |
1734 | if ((err = sysfs_create_group(&client->dev.kobj, &adm1026_group))) | 1748 | if ((err = sysfs_create_group(&client->dev.kobj, &adm1026_group))) |
1735 | goto exitdetach; | 1749 | goto exitdetach; |
1750 | if (data->config1 & CFG1_AIN8_9) | ||
1751 | err = sysfs_create_group(&client->dev.kobj, | ||
1752 | &adm1026_group_in8_9); | ||
1753 | else | ||
1754 | err = sysfs_create_group(&client->dev.kobj, | ||
1755 | &adm1026_group_temp3); | ||
1756 | if (err) | ||
1757 | goto exitremove; | ||
1736 | 1758 | ||
1737 | data->hwmon_dev = hwmon_device_register(&client->dev); | 1759 | data->hwmon_dev = hwmon_device_register(&client->dev); |
1738 | if (IS_ERR(data->hwmon_dev)) { | 1760 | if (IS_ERR(data->hwmon_dev)) { |
@@ -1745,6 +1767,10 @@ static int adm1026_detect(struct i2c_adapter *adapter, int address, | |||
1745 | /* Error out and cleanup code */ | 1767 | /* Error out and cleanup code */ |
1746 | exitremove: | 1768 | exitremove: |
1747 | sysfs_remove_group(&client->dev.kobj, &adm1026_group); | 1769 | sysfs_remove_group(&client->dev.kobj, &adm1026_group); |
1770 | if (data->config1 & CFG1_AIN8_9) | ||
1771 | sysfs_remove_group(&client->dev.kobj, &adm1026_group_in8_9); | ||
1772 | else | ||
1773 | sysfs_remove_group(&client->dev.kobj, &adm1026_group_temp3); | ||
1748 | exitdetach: | 1774 | exitdetach: |
1749 | i2c_detach_client(client); | 1775 | i2c_detach_client(client); |
1750 | exitfree: | 1776 | exitfree: |
@@ -1758,6 +1784,10 @@ static int adm1026_detach_client(struct i2c_client *client) | |||
1758 | struct adm1026_data *data = i2c_get_clientdata(client); | 1784 | struct adm1026_data *data = i2c_get_clientdata(client); |
1759 | hwmon_device_unregister(data->hwmon_dev); | 1785 | hwmon_device_unregister(data->hwmon_dev); |
1760 | sysfs_remove_group(&client->dev.kobj, &adm1026_group); | 1786 | sysfs_remove_group(&client->dev.kobj, &adm1026_group); |
1787 | if (data->config1 & CFG1_AIN8_9) | ||
1788 | sysfs_remove_group(&client->dev.kobj, &adm1026_group_in8_9); | ||
1789 | else | ||
1790 | sysfs_remove_group(&client->dev.kobj, &adm1026_group_temp3); | ||
1761 | i2c_detach_client(client); | 1791 | i2c_detach_client(client); |
1762 | kfree(data); | 1792 | kfree(data); |
1763 | return 0; | 1793 | return 0; |