aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/thermal/qcom/tsens-common.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/thermal/qcom/tsens-common.c')
-rw-r--r--drivers/thermal/qcom/tsens-common.c33
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
190err_put_device:
191 put_device(&op->dev);
192 return ret;
180} 193}