From: Robert Marko <robimarko@xxxxxxxxx> Check if crit_int is supported by the current tsens feat and read crit field only if needed or the kernel panic for reading unreadable memory. Signed-off-by: Robert Marko <robimarko@xxxxxxxxx> Signed-off-by: Ansuel Smith <ansuelsmth@xxxxxxxxx> --- drivers/thermal/qcom/tsens.c | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/drivers/thermal/qcom/tsens.c b/drivers/thermal/qcom/tsens.c index 38afde1a599f..27777a05f755 100644 --- a/drivers/thermal/qcom/tsens.c +++ b/drivers/thermal/qcom/tsens.c @@ -325,16 +325,22 @@ static int tsens_read_irq_state(struct tsens_priv *priv, u32 hw_id, ret = regmap_field_read(priv->rf[LOW_INT_MASK_0 + hw_id], &d->low_irq_mask); if (ret) return ret; - ret = regmap_field_read(priv->rf[CRIT_INT_CLEAR_0 + hw_id], - &d->crit_irq_clear); - if (ret) - return ret; - ret = regmap_field_read(priv->rf[CRIT_INT_MASK_0 + hw_id], - &d->crit_irq_mask); - if (ret) - return ret; + if (priv->feat->crit_int) { + ret = regmap_field_read(priv->rf[CRIT_INT_CLEAR_0 + hw_id], + &d->crit_irq_clear); + if (ret) + return ret; + ret = regmap_field_read(priv->rf[CRIT_INT_MASK_0 + hw_id], + &d->crit_irq_mask); + if (ret) + return ret; - d->crit_thresh = tsens_hw_to_mC(s, CRIT_THRESH_0 + hw_id); + d->crit_thresh = tsens_hw_to_mC(s, CRIT_THRESH_0 + hw_id); + } else { + d->crit_irq_clear = 0; + d->crit_irq_mask = 0; + d->crit_thresh = 0; + } } else { /* No mask register on older TSENS */ d->up_irq_mask = 0; -- 2.30.2