| From 70ee251ded6ba24c15537f4abb8a318e233d0d1a Mon Sep 17 00:00:00 2001 |
| From: Matthias Kaehlcke <mka@chromium.org> |
| Date: Mon, 23 Aug 2021 13:47:30 -0700 |
| Subject: thermal/drivers/qcom/spmi-adc-tm5: Don't abort probing if a sensor is not used |
| |
| From: Matthias Kaehlcke <mka@chromium.org> |
| |
| commit 70ee251ded6ba24c15537f4abb8a318e233d0d1a upstream. |
| |
| adc_tm5_register_tzd() registers the thermal zone sensors for all |
| channels of the thermal monitor. If the registration of one channel |
| fails the function skips the processing of the remaining channels |
| and returns an error, which results in _probe() being aborted. |
| |
| One of the reasons the registration could fail is that none of the |
| thermal zones is using the channel/sensor, which hardly is a critical |
| error (if it is an error at all). If this case is detected emit a |
| warning and continue with processing the remaining channels. |
| |
| Fixes: ca66dca5eda6 ("thermal: qcom: add support for adc-tm5 PMIC thermal monitor") |
| Signed-off-by: Matthias Kaehlcke <mka@chromium.org> |
| Reported-by: Stephen Boyd <swboyd@chromium.org> |
| Reviewed-by: Stephen Boyd <swboyd@chromium.org> |
| Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> |
| Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org> |
| Link: https://lore.kernel.org/r/20210823134726.1.I1dd23ddf77e5b3568625d80d6827653af071ce19@changeid |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/thermal/qcom/qcom-spmi-adc-tm5.c | 6 ++++++ |
| 1 file changed, 6 insertions(+) |
| |
| --- a/drivers/thermal/qcom/qcom-spmi-adc-tm5.c |
| +++ b/drivers/thermal/qcom/qcom-spmi-adc-tm5.c |
| @@ -359,6 +359,12 @@ static int adc_tm5_register_tzd(struct a |
| &adc_tm->channels[i], |
| &adc_tm5_ops); |
| if (IS_ERR(tzd)) { |
| + if (PTR_ERR(tzd) == -ENODEV) { |
| + dev_warn(adc_tm->dev, "thermal sensor on channel %d is not used\n", |
| + adc_tm->channels[i].channel); |
| + continue; |
| + } |
| + |
| dev_err(adc_tm->dev, "Error registering TZ zone for channel %d: %ld\n", |
| adc_tm->channels[i].channel, PTR_ERR(tzd)); |
| return PTR_ERR(tzd); |