diff options
author | Daniel Lezcano <daniel.lezcano@linaro.org> | 2017-10-19 13:06:00 -0400 |
---|---|---|
committer | Eduardo Valentin <edubezval@gmail.com> | 2017-10-31 22:32:17 -0400 |
commit | 7a4ca51b704038d1d7f5e31177a7fa4d9dcb839e (patch) | |
tree | befd9504423165d7265cb3a6421120fd40978087 | |
parent | d377aba193111419341fabaec6cab92df25e1b28 (diff) |
thermal/drivers/qcom-spmi: Use devm_iio_channel_get
The iio_channel_get() function has now its devm_ version.
Use it and remove all the rollback code for iio_channel_release() as well
as the .remove ops.
[Compiled tested only]
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Signed-off-by: Eduardo Valentin <edubezval@gmail.com>
-rw-r--r-- | drivers/thermal/qcom-spmi-temp-alarm.c | 43 |
1 files changed, 14 insertions, 29 deletions
diff --git a/drivers/thermal/qcom-spmi-temp-alarm.c b/drivers/thermal/qcom-spmi-temp-alarm.c index f50241962ad2..95f987d5aa71 100644 --- a/drivers/thermal/qcom-spmi-temp-alarm.c +++ b/drivers/thermal/qcom-spmi-temp-alarm.c | |||
@@ -125,7 +125,7 @@ static int qpnp_tm_get_temp(void *data, int *temp) | |||
125 | if (!temp) | 125 | if (!temp) |
126 | return -EINVAL; | 126 | return -EINVAL; |
127 | 127 | ||
128 | if (IS_ERR(chip->adc)) { | 128 | if (!chip->adc) { |
129 | ret = qpnp_tm_update_temp_no_adc(chip); | 129 | ret = qpnp_tm_update_temp_no_adc(chip); |
130 | if (ret < 0) | 130 | if (ret < 0) |
131 | return ret; | 131 | return ret; |
@@ -224,67 +224,53 @@ static int qpnp_tm_probe(struct platform_device *pdev) | |||
224 | return irq; | 224 | return irq; |
225 | 225 | ||
226 | /* ADC based measurements are optional */ | 226 | /* ADC based measurements are optional */ |
227 | chip->adc = iio_channel_get(&pdev->dev, "thermal"); | 227 | chip->adc = devm_iio_channel_get(&pdev->dev, "thermal"); |
228 | if (PTR_ERR(chip->adc) == -EPROBE_DEFER) | 228 | if (IS_ERR(chip->adc)) { |
229 | return PTR_ERR(chip->adc); | 229 | ret = PTR_ERR(chip->adc); |
230 | chip->adc = NULL; | ||
231 | if (ret == -EPROBE_DEFER) | ||
232 | return ret; | ||
233 | } | ||
230 | 234 | ||
231 | chip->base = res; | 235 | chip->base = res; |
232 | 236 | ||
233 | ret = qpnp_tm_read(chip, QPNP_TM_REG_TYPE, &type); | 237 | ret = qpnp_tm_read(chip, QPNP_TM_REG_TYPE, &type); |
234 | if (ret < 0) { | 238 | if (ret < 0) { |
235 | dev_err(&pdev->dev, "could not read type\n"); | 239 | dev_err(&pdev->dev, "could not read type\n"); |
236 | goto fail; | 240 | return ret; |
237 | } | 241 | } |
238 | 242 | ||
239 | ret = qpnp_tm_read(chip, QPNP_TM_REG_SUBTYPE, &subtype); | 243 | ret = qpnp_tm_read(chip, QPNP_TM_REG_SUBTYPE, &subtype); |
240 | if (ret < 0) { | 244 | if (ret < 0) { |
241 | dev_err(&pdev->dev, "could not read subtype\n"); | 245 | dev_err(&pdev->dev, "could not read subtype\n"); |
242 | goto fail; | 246 | return ret; |
243 | } | 247 | } |
244 | 248 | ||
245 | if (type != QPNP_TM_TYPE || subtype != QPNP_TM_SUBTYPE) { | 249 | if (type != QPNP_TM_TYPE || subtype != QPNP_TM_SUBTYPE) { |
246 | dev_err(&pdev->dev, "invalid type 0x%02x or subtype 0x%02x\n", | 250 | dev_err(&pdev->dev, "invalid type 0x%02x or subtype 0x%02x\n", |
247 | type, subtype); | 251 | type, subtype); |
248 | ret = -ENODEV; | 252 | return -ENODEV; |
249 | goto fail; | ||
250 | } | 253 | } |
251 | 254 | ||
252 | ret = qpnp_tm_init(chip); | 255 | ret = qpnp_tm_init(chip); |
253 | if (ret < 0) { | 256 | if (ret < 0) { |
254 | dev_err(&pdev->dev, "init failed\n"); | 257 | dev_err(&pdev->dev, "init failed\n"); |
255 | goto fail; | 258 | return ret; |
256 | } | 259 | } |
257 | 260 | ||
258 | ret = devm_request_threaded_irq(&pdev->dev, irq, NULL, qpnp_tm_isr, | 261 | ret = devm_request_threaded_irq(&pdev->dev, irq, NULL, qpnp_tm_isr, |
259 | IRQF_ONESHOT, node->name, chip); | 262 | IRQF_ONESHOT, node->name, chip); |
260 | if (ret < 0) | 263 | if (ret < 0) |
261 | goto fail; | 264 | return ret; |
262 | 265 | ||
263 | chip->tz_dev = devm_thermal_zone_of_sensor_register(&pdev->dev, 0, chip, | 266 | chip->tz_dev = devm_thermal_zone_of_sensor_register(&pdev->dev, 0, chip, |
264 | &qpnp_tm_sensor_ops); | 267 | &qpnp_tm_sensor_ops); |
265 | if (IS_ERR(chip->tz_dev)) { | 268 | if (IS_ERR(chip->tz_dev)) { |
266 | dev_err(&pdev->dev, "failed to register sensor\n"); | 269 | dev_err(&pdev->dev, "failed to register sensor\n"); |
267 | ret = PTR_ERR(chip->tz_dev); | 270 | return PTR_ERR(chip->tz_dev); |
268 | goto fail; | ||
269 | } | 271 | } |
270 | 272 | ||
271 | return 0; | 273 | return 0; |
272 | |||
273 | fail: | ||
274 | if (!IS_ERR(chip->adc)) | ||
275 | iio_channel_release(chip->adc); | ||
276 | |||
277 | return ret; | ||
278 | } | ||
279 | |||
280 | static int qpnp_tm_remove(struct platform_device *pdev) | ||
281 | { | ||
282 | struct qpnp_tm_chip *chip = dev_get_drvdata(&pdev->dev); | ||
283 | |||
284 | if (!IS_ERR(chip->adc)) | ||
285 | iio_channel_release(chip->adc); | ||
286 | |||
287 | return 0; | ||
288 | } | 274 | } |
289 | 275 | ||
290 | static const struct of_device_id qpnp_tm_match_table[] = { | 276 | static const struct of_device_id qpnp_tm_match_table[] = { |
@@ -299,7 +285,6 @@ static struct platform_driver qpnp_tm_driver = { | |||
299 | .of_match_table = qpnp_tm_match_table, | 285 | .of_match_table = qpnp_tm_match_table, |
300 | }, | 286 | }, |
301 | .probe = qpnp_tm_probe, | 287 | .probe = qpnp_tm_probe, |
302 | .remove = qpnp_tm_remove, | ||
303 | }; | 288 | }; |
304 | module_platform_driver(qpnp_tm_driver); | 289 | module_platform_driver(qpnp_tm_driver); |
305 | 290 | ||