Skip to content

Commit

Permalink
staging:iio:ad7780: Make powerdown GPIO optional
Browse files Browse the repository at this point in the history
Some designs hardwire the PDRST pin to always on. In this case there is no GPIO
to control the mode of the device, so make the GPIO optional. Since now all of
the the platform data fields are optional now, make the platform data as a whole
optional as well.

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Signed-off-by: Jonathan Cameron <jic23@kernel.org>
  • Loading branch information
Lars-Peter Clausen authored and Jonathan Cameron committed Sep 22, 2012
1 parent 67ad4e0 commit 332ed63
Showing 1 changed file with 17 additions and 14 deletions.
31 changes: 17 additions & 14 deletions drivers/staging/iio/adc/ad7780.c
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,8 @@ static int ad7780_set_mode(struct ad_sigma_delta *sigma_delta,
break;
}

gpio_set_value(st->powerdown_gpio, val);
if (gpio_is_valid(st->powerdown_gpio))
gpio_set_value(st->powerdown_gpio, val);

return 0;
}
Expand Down Expand Up @@ -148,11 +149,6 @@ static int __devinit ad7780_probe(struct spi_device *spi)
struct iio_dev *indio_dev;
int ret, voltage_uv = 0;

if (!pdata) {
dev_dbg(&spi->dev, "no platform data?\n");
return -ENODEV;
}

indio_dev = iio_device_alloc(sizeof(*st));
if (indio_dev == NULL)
return -ENOMEM;
Expand All @@ -174,8 +170,6 @@ static int __devinit ad7780_probe(struct spi_device *spi)
st->chip_info =
&ad7780_chip_info_tbl[spi_get_device_id(spi)->driver_data];

st->powerdown_gpio = pdata->gpio_pdrst;

if (pdata && pdata->vref_mv)
st->int_vref_mv = pdata->vref_mv;
else if (voltage_uv)
Expand All @@ -192,11 +186,17 @@ static int __devinit ad7780_probe(struct spi_device *spi)
indio_dev->num_channels = 1;
indio_dev->info = &ad7780_info;

ret = gpio_request_one(pdata->gpio_pdrst, GPIOF_OUT_INIT_LOW,
if (pdata && gpio_is_valid(pdata->gpio_pdrst)) {

ret = gpio_request_one(pdata->gpio_pdrst, GPIOF_OUT_INIT_LOW,
"AD7780 /PDRST");
if (ret) {
dev_err(&spi->dev, "failed to request GPIO PDRST\n");
goto error_disable_reg;
if (ret) {
dev_err(&spi->dev, "failed to request GPIO PDRST\n");
goto error_disable_reg;
}
st->powerdown_gpio = pdata->gpio_pdrst;
} else {
st->powerdown_gpio = -1;
}

ret = ad_sd_setup_buffer_and_trigger(indio_dev);
Expand All @@ -212,7 +212,8 @@ static int __devinit ad7780_probe(struct spi_device *spi)
error_cleanup_buffer_and_trigger:
ad_sd_cleanup_buffer_and_trigger(indio_dev);
error_free_gpio:
gpio_free(pdata->gpio_pdrst);
if (pdata && gpio_is_valid(pdata->gpio_pdrst))
gpio_free(pdata->gpio_pdrst);
error_disable_reg:
if (!IS_ERR(st->reg))
regulator_disable(st->reg);
Expand All @@ -233,7 +234,9 @@ static int __devexit ad7780_remove(struct spi_device *spi)
iio_device_unregister(indio_dev);
ad_sd_cleanup_buffer_and_trigger(indio_dev);

gpio_free(st->powerdown_gpio);
if (gpio_is_valid(st->powerdown_gpio))
gpio_free(st->powerdown_gpio);

if (!IS_ERR(st->reg)) {
regulator_disable(st->reg);
regulator_put(st->reg);
Expand Down

0 comments on commit 332ed63

Please sign in to comment.