diff options
| -rw-r--r-- | drivers/hwmon/hwmon.c | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/drivers/hwmon/hwmon.c b/drivers/hwmon/hwmon.c index c9790e2c3440..af5123042990 100644 --- a/drivers/hwmon/hwmon.c +++ b/drivers/hwmon/hwmon.c | |||
| @@ -143,6 +143,7 @@ static int hwmon_thermal_add_sensor(struct device *dev, | |||
| 143 | struct hwmon_device *hwdev, int index) | 143 | struct hwmon_device *hwdev, int index) |
| 144 | { | 144 | { |
| 145 | struct hwmon_thermal_data *tdata; | 145 | struct hwmon_thermal_data *tdata; |
| 146 | struct thermal_zone_device *tzd; | ||
| 146 | 147 | ||
| 147 | tdata = devm_kzalloc(dev, sizeof(*tdata), GFP_KERNEL); | 148 | tdata = devm_kzalloc(dev, sizeof(*tdata), GFP_KERNEL); |
| 148 | if (!tdata) | 149 | if (!tdata) |
| @@ -151,8 +152,14 @@ static int hwmon_thermal_add_sensor(struct device *dev, | |||
| 151 | tdata->hwdev = hwdev; | 152 | tdata->hwdev = hwdev; |
| 152 | tdata->index = index; | 153 | tdata->index = index; |
| 153 | 154 | ||
| 154 | devm_thermal_zone_of_sensor_register(&hwdev->dev, index, tdata, | 155 | tzd = devm_thermal_zone_of_sensor_register(&hwdev->dev, index, tdata, |
| 155 | &hwmon_thermal_ops); | 156 | &hwmon_thermal_ops); |
| 157 | /* | ||
| 158 | * If CONFIG_THERMAL_OF is disabled, this returns -ENODEV, | ||
| 159 | * so ignore that error but forward any other error. | ||
| 160 | */ | ||
| 161 | if (IS_ERR(tzd) && (PTR_ERR(tzd) != -ENODEV)) | ||
| 162 | return PTR_ERR(tzd); | ||
| 156 | 163 | ||
| 157 | return 0; | 164 | return 0; |
| 158 | } | 165 | } |
| @@ -621,14 +628,20 @@ __hwmon_device_register(struct device *dev, const char *name, void *drvdata, | |||
| 621 | if (!chip->ops->is_visible(drvdata, hwmon_temp, | 628 | if (!chip->ops->is_visible(drvdata, hwmon_temp, |
| 622 | hwmon_temp_input, j)) | 629 | hwmon_temp_input, j)) |
| 623 | continue; | 630 | continue; |
| 624 | if (info[i]->config[j] & HWMON_T_INPUT) | 631 | if (info[i]->config[j] & HWMON_T_INPUT) { |
| 625 | hwmon_thermal_add_sensor(dev, hwdev, j); | 632 | err = hwmon_thermal_add_sensor(dev, |
| 633 | hwdev, j); | ||
| 634 | if (err) | ||
| 635 | goto free_device; | ||
| 636 | } | ||
| 626 | } | 637 | } |
| 627 | } | 638 | } |
| 628 | } | 639 | } |
| 629 | 640 | ||
| 630 | return hdev; | 641 | return hdev; |
| 631 | 642 | ||
| 643 | free_device: | ||
| 644 | device_unregister(hdev); | ||
| 632 | free_hwmon: | 645 | free_hwmon: |
| 633 | kfree(hwdev); | 646 | kfree(hwdev); |
| 634 | ida_remove: | 647 | ida_remove: |
