diff options
Diffstat (limited to 'drivers/thermal/qcom/tsens-common.c')
| -rw-r--r-- | drivers/thermal/qcom/tsens-common.c | 33 |
1 files changed, 23 insertions, 10 deletions
diff --git a/drivers/thermal/qcom/tsens-common.c b/drivers/thermal/qcom/tsens-common.c index 78652cac7f3d..f80c73f11740 100644 --- a/drivers/thermal/qcom/tsens-common.c +++ b/drivers/thermal/qcom/tsens-common.c | |||
| @@ -144,13 +144,17 @@ int __init init_common(struct tsens_device *tmdev) | |||
| 144 | tmdev->tm_offset = 0; | 144 | tmdev->tm_offset = 0; |
| 145 | res = platform_get_resource(op, IORESOURCE_MEM, 1); | 145 | res = platform_get_resource(op, IORESOURCE_MEM, 1); |
| 146 | srot_base = devm_ioremap_resource(&op->dev, res); | 146 | srot_base = devm_ioremap_resource(&op->dev, res); |
| 147 | if (IS_ERR(srot_base)) | 147 | if (IS_ERR(srot_base)) { |
| 148 | return PTR_ERR(srot_base); | 148 | ret = PTR_ERR(srot_base); |
| 149 | goto err_put_device; | ||
| 150 | } | ||
| 149 | 151 | ||
| 150 | tmdev->srot_map = devm_regmap_init_mmio(tmdev->dev, srot_base, | 152 | tmdev->srot_map = devm_regmap_init_mmio(tmdev->dev, srot_base, |
| 151 | &tsens_srot_config); | 153 | &tsens_srot_config); |
| 152 | if (IS_ERR(tmdev->srot_map)) | 154 | if (IS_ERR(tmdev->srot_map)) { |
| 153 | return PTR_ERR(tmdev->srot_map); | 155 | ret = PTR_ERR(tmdev->srot_map); |
| 156 | goto err_put_device; | ||
| 157 | } | ||
| 154 | 158 | ||
| 155 | } else { | 159 | } else { |
| 156 | /* old DTs where SROT and TM were in a contiguous 2K block */ | 160 | /* old DTs where SROT and TM were in a contiguous 2K block */ |
| @@ -159,22 +163,31 @@ int __init init_common(struct tsens_device *tmdev) | |||
| 159 | 163 | ||
| 160 | res = platform_get_resource(op, IORESOURCE_MEM, 0); | 164 | res = platform_get_resource(op, IORESOURCE_MEM, 0); |
| 161 | tm_base = devm_ioremap_resource(&op->dev, res); | 165 | tm_base = devm_ioremap_resource(&op->dev, res); |
| 162 | if (IS_ERR(tm_base)) | 166 | if (IS_ERR(tm_base)) { |
| 163 | return PTR_ERR(tm_base); | 167 | ret = PTR_ERR(tm_base); |
| 168 | goto err_put_device; | ||
| 169 | } | ||
| 164 | 170 | ||
| 165 | tmdev->tm_map = devm_regmap_init_mmio(tmdev->dev, tm_base, &tsens_config); | 171 | tmdev->tm_map = devm_regmap_init_mmio(tmdev->dev, tm_base, &tsens_config); |
| 166 | if (IS_ERR(tmdev->tm_map)) | 172 | if (IS_ERR(tmdev->tm_map)) { |
| 167 | return PTR_ERR(tmdev->tm_map); | 173 | ret = PTR_ERR(tmdev->tm_map); |
| 174 | goto err_put_device; | ||
| 175 | } | ||
| 168 | 176 | ||
| 169 | if (tmdev->srot_map) { | 177 | if (tmdev->srot_map) { |
| 170 | ret = regmap_read(tmdev->srot_map, ctrl_offset, &code); | 178 | ret = regmap_read(tmdev->srot_map, ctrl_offset, &code); |
| 171 | if (ret) | 179 | if (ret) |
| 172 | return ret; | 180 | goto err_put_device; |
| 173 | if (!(code & TSENS_EN)) { | 181 | if (!(code & TSENS_EN)) { |
| 174 | dev_err(tmdev->dev, "tsens device is not enabled\n"); | 182 | dev_err(tmdev->dev, "tsens device is not enabled\n"); |
| 175 | return -ENODEV; | 183 | ret = -ENODEV; |
| 184 | goto err_put_device; | ||
| 176 | } | 185 | } |
| 177 | } | 186 | } |
| 178 | 187 | ||
| 179 | return 0; | 188 | return 0; |
| 189 | |||
| 190 | err_put_device: | ||
| 191 | put_device(&op->dev); | ||
| 192 | return ret; | ||
| 180 | } | 193 | } |
