Commit e5bf4f5b authored by Sachin Kamat's avatar Sachin Kamat Committed by Jonathan Cameron

staging: iio: ad7816: Use devm_* APIs

devm_* APIs are device managed and make code simpler.
Signed-off-by: default avatarSachin Kamat <sachin.kamat@linaro.org>
Signed-off-by: default avatarJonathan Cameron <jic23@kernel.org>
parent 4f6b38c8
...@@ -356,11 +356,9 @@ static int ad7816_probe(struct spi_device *spi_dev) ...@@ -356,11 +356,9 @@ static int ad7816_probe(struct spi_device *spi_dev)
return -EINVAL; return -EINVAL;
} }
indio_dev = iio_device_alloc(sizeof(*chip)); indio_dev = devm_iio_device_alloc(&spi_dev->dev, sizeof(*chip));
if (indio_dev == NULL) { if (!indio_dev)
ret = -ENOMEM; return -ENOMEM;
goto error_ret;
}
chip = iio_priv(indio_dev); chip = iio_priv(indio_dev);
/* this is only used for device removal purposes */ /* this is only used for device removal purposes */
dev_set_drvdata(&spi_dev->dev, indio_dev); dev_set_drvdata(&spi_dev->dev, indio_dev);
...@@ -372,25 +370,28 @@ static int ad7816_probe(struct spi_device *spi_dev) ...@@ -372,25 +370,28 @@ static int ad7816_probe(struct spi_device *spi_dev)
chip->convert_pin = pins[1]; chip->convert_pin = pins[1];
chip->busy_pin = pins[2]; chip->busy_pin = pins[2];
ret = gpio_request(chip->rdwr_pin, spi_get_device_id(spi_dev)->name); ret = devm_gpio_request(&spi_dev->dev, chip->rdwr_pin,
spi_get_device_id(spi_dev)->name);
if (ret) { if (ret) {
dev_err(&spi_dev->dev, "Fail to request rdwr gpio PIN %d.\n", dev_err(&spi_dev->dev, "Fail to request rdwr gpio PIN %d.\n",
chip->rdwr_pin); chip->rdwr_pin);
goto error_free_device; return ret;
} }
gpio_direction_input(chip->rdwr_pin); gpio_direction_input(chip->rdwr_pin);
ret = gpio_request(chip->convert_pin, spi_get_device_id(spi_dev)->name); ret = devm_gpio_request(&spi_dev->dev, chip->convert_pin,
spi_get_device_id(spi_dev)->name);
if (ret) { if (ret) {
dev_err(&spi_dev->dev, "Fail to request convert gpio PIN %d.\n", dev_err(&spi_dev->dev, "Fail to request convert gpio PIN %d.\n",
chip->convert_pin); chip->convert_pin);
goto error_free_gpio_rdwr; return ret;
} }
gpio_direction_input(chip->convert_pin); gpio_direction_input(chip->convert_pin);
ret = gpio_request(chip->busy_pin, spi_get_device_id(spi_dev)->name); ret = devm_gpio_request(&spi_dev->dev, chip->busy_pin,
spi_get_device_id(spi_dev)->name);
if (ret) { if (ret) {
dev_err(&spi_dev->dev, "Fail to request busy gpio PIN %d.\n", dev_err(&spi_dev->dev, "Fail to request busy gpio PIN %d.\n",
chip->busy_pin); chip->busy_pin);
goto error_free_gpio_convert; return ret;
} }
gpio_direction_input(chip->busy_pin); gpio_direction_input(chip->busy_pin);
...@@ -401,51 +402,31 @@ static int ad7816_probe(struct spi_device *spi_dev) ...@@ -401,51 +402,31 @@ static int ad7816_probe(struct spi_device *spi_dev)
if (spi_dev->irq) { if (spi_dev->irq) {
/* Only low trigger is supported in ad7816/7/8 */ /* Only low trigger is supported in ad7816/7/8 */
ret = request_threaded_irq(spi_dev->irq, ret = devm_request_threaded_irq(&spi_dev->dev, spi_dev->irq,
NULL, NULL,
&ad7816_event_handler, &ad7816_event_handler,
IRQF_TRIGGER_LOW | IRQF_ONESHOT, IRQF_TRIGGER_LOW | IRQF_ONESHOT,
indio_dev->name, indio_dev->name,
indio_dev); indio_dev);
if (ret) if (ret)
goto error_free_gpio; return ret;
} }
ret = iio_device_register(indio_dev); ret = iio_device_register(indio_dev);
if (ret) if (ret)
goto error_free_irq; return ret;
dev_info(&spi_dev->dev, "%s temperature sensor and ADC registered.\n", dev_info(&spi_dev->dev, "%s temperature sensor and ADC registered.\n",
indio_dev->name); indio_dev->name);
return 0; return 0;
error_free_irq:
free_irq(spi_dev->irq, indio_dev);
error_free_gpio:
gpio_free(chip->busy_pin);
error_free_gpio_convert:
gpio_free(chip->convert_pin);
error_free_gpio_rdwr:
gpio_free(chip->rdwr_pin);
error_free_device:
iio_device_free(indio_dev);
error_ret:
return ret;
} }
static int ad7816_remove(struct spi_device *spi_dev) static int ad7816_remove(struct spi_device *spi_dev)
{ {
struct iio_dev *indio_dev = dev_get_drvdata(&spi_dev->dev); struct iio_dev *indio_dev = dev_get_drvdata(&spi_dev->dev);
struct ad7816_chip_info *chip = iio_priv(indio_dev);
iio_device_unregister(indio_dev); iio_device_unregister(indio_dev);
dev_set_drvdata(&spi_dev->dev, NULL);
if (spi_dev->irq)
free_irq(spi_dev->irq, indio_dev);
gpio_free(chip->busy_pin);
gpio_free(chip->convert_pin);
gpio_free(chip->rdwr_pin);
iio_device_free(indio_dev);
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment