diff options
| -rw-r--r-- | drivers/hwmon/applesmc.c | 61 |
1 files changed, 25 insertions, 36 deletions
diff --git a/drivers/hwmon/applesmc.c b/drivers/hwmon/applesmc.c index 0f28d91f29d8..f085c18d2905 100644 --- a/drivers/hwmon/applesmc.c +++ b/drivers/hwmon/applesmc.c | |||
| @@ -195,6 +195,9 @@ static unsigned int applesmc_accelerometer; | |||
| 195 | /* Indicates whether this computer has light sensors and keyboard backlight. */ | 195 | /* Indicates whether this computer has light sensors and keyboard backlight. */ |
| 196 | static unsigned int applesmc_light; | 196 | static unsigned int applesmc_light; |
| 197 | 197 | ||
| 198 | /* The number of fans handled by the driver */ | ||
| 199 | static unsigned int fans_handled; | ||
| 200 | |||
| 198 | /* Indicates which temperature sensors set to use. */ | 201 | /* Indicates which temperature sensors set to use. */ |
| 199 | static unsigned int applesmc_temperature_set; | 202 | static unsigned int applesmc_temperature_set; |
| 200 | 203 | ||
| @@ -1492,39 +1495,24 @@ static int __init applesmc_init(void) | |||
| 1492 | 1495 | ||
| 1493 | /* create fan files */ | 1496 | /* create fan files */ |
| 1494 | count = applesmc_get_fan_count(); | 1497 | count = applesmc_get_fan_count(); |
| 1495 | if (count < 0) { | 1498 | if (count < 0) |
| 1496 | printk(KERN_ERR "applesmc: Cannot get the number of fans.\n"); | 1499 | printk(KERN_ERR "applesmc: Cannot get the number of fans.\n"); |
| 1497 | } else { | 1500 | else |
| 1498 | printk(KERN_INFO "applesmc: %d fans found.\n", count); | 1501 | printk(KERN_INFO "applesmc: %d fans found.\n", count); |
| 1499 | 1502 | ||
| 1500 | switch (count) { | 1503 | if (count > 4) { |
| 1501 | default: | 1504 | count = 4; |
| 1502 | printk(KERN_WARNING "applesmc: More than 4 fans found," | 1505 | printk(KERN_WARNING "applesmc: More than 4 fans found," |
| 1503 | " but at most 4 fans are supported" | 1506 | " but at most 4 fans are supported" |
| 1504 | " by the driver.\n"); | 1507 | " by the driver.\n"); |
| 1505 | case 4: | 1508 | } |
| 1506 | ret = sysfs_create_group(&pdev->dev.kobj, | 1509 | |
| 1507 | &fan_attribute_groups[3]); | 1510 | while (fans_handled < count) { |
| 1508 | if (ret) | 1511 | ret = sysfs_create_group(&pdev->dev.kobj, |
| 1509 | goto out_key_enumeration; | 1512 | &fan_attribute_groups[fans_handled]); |
| 1510 | case 3: | 1513 | if (ret) |
| 1511 | ret = sysfs_create_group(&pdev->dev.kobj, | 1514 | goto out_fans; |
| 1512 | &fan_attribute_groups[2]); | 1515 | fans_handled++; |
| 1513 | if (ret) | ||
| 1514 | goto out_key_enumeration; | ||
| 1515 | case 2: | ||
| 1516 | ret = sysfs_create_group(&pdev->dev.kobj, | ||
| 1517 | &fan_attribute_groups[1]); | ||
| 1518 | if (ret) | ||
| 1519 | goto out_key_enumeration; | ||
| 1520 | case 1: | ||
| 1521 | ret = sysfs_create_group(&pdev->dev.kobj, | ||
| 1522 | &fan_attribute_groups[0]); | ||
| 1523 | if (ret) | ||
| 1524 | goto out_fan_1; | ||
| 1525 | case 0: | ||
| 1526 | ; | ||
| 1527 | } | ||
| 1528 | } | 1516 | } |
| 1529 | 1517 | ||
| 1530 | for (i = 0; | 1518 | for (i = 0; |
| @@ -1593,10 +1581,10 @@ out_accelerometer: | |||
| 1593 | applesmc_release_accelerometer(); | 1581 | applesmc_release_accelerometer(); |
| 1594 | out_temperature: | 1582 | out_temperature: |
| 1595 | sysfs_remove_group(&pdev->dev.kobj, &temperature_attributes_group); | 1583 | sysfs_remove_group(&pdev->dev.kobj, &temperature_attributes_group); |
| 1596 | sysfs_remove_group(&pdev->dev.kobj, &fan_attribute_groups[0]); | 1584 | out_fans: |
| 1597 | out_fan_1: | 1585 | while (fans_handled) |
| 1598 | sysfs_remove_group(&pdev->dev.kobj, &fan_attribute_groups[1]); | 1586 | sysfs_remove_group(&pdev->dev.kobj, |
| 1599 | out_key_enumeration: | 1587 | &fan_attribute_groups[--fans_handled]); |
| 1600 | sysfs_remove_group(&pdev->dev.kobj, &key_enumeration_group); | 1588 | sysfs_remove_group(&pdev->dev.kobj, &key_enumeration_group); |
| 1601 | out_name: | 1589 | out_name: |
| 1602 | sysfs_remove_file(&pdev->dev.kobj, &dev_attr_name.attr); | 1590 | sysfs_remove_file(&pdev->dev.kobj, &dev_attr_name.attr); |
| @@ -1622,8 +1610,9 @@ static void __exit applesmc_exit(void) | |||
| 1622 | if (applesmc_accelerometer) | 1610 | if (applesmc_accelerometer) |
| 1623 | applesmc_release_accelerometer(); | 1611 | applesmc_release_accelerometer(); |
| 1624 | sysfs_remove_group(&pdev->dev.kobj, &temperature_attributes_group); | 1612 | sysfs_remove_group(&pdev->dev.kobj, &temperature_attributes_group); |
| 1625 | sysfs_remove_group(&pdev->dev.kobj, &fan_attribute_groups[0]); | 1613 | while (fans_handled) |
| 1626 | sysfs_remove_group(&pdev->dev.kobj, &fan_attribute_groups[1]); | 1614 | sysfs_remove_group(&pdev->dev.kobj, |
| 1615 | &fan_attribute_groups[--fans_handled]); | ||
| 1627 | sysfs_remove_group(&pdev->dev.kobj, &key_enumeration_group); | 1616 | sysfs_remove_group(&pdev->dev.kobj, &key_enumeration_group); |
| 1628 | sysfs_remove_file(&pdev->dev.kobj, &dev_attr_name.attr); | 1617 | sysfs_remove_file(&pdev->dev.kobj, &dev_attr_name.attr); |
| 1629 | platform_device_unregister(pdev); | 1618 | platform_device_unregister(pdev); |
