From f351bcae8c97ac037cbdde8da7783b4d0c8975cd Mon Sep 17 00:00:00 2001 From: Lars-Peter Clausen Date: Fri, 21 Sep 2012 14:29:00 +0100 Subject: [PATCH] --- yaml --- r: 325499 b: refs/heads/master c: 332ed63ee9ec0b899cf6d03eecd85bebe1b8e943 h: refs/heads/master i: 325497: 48341f552552dad022f3c354bb8749d9d321ca96 325495: f06d4bb60b4344a7cc61ec1874f854b5e148fac2 v: v3 --- [refs] | 2 +- trunk/drivers/staging/iio/adc/ad7780.c | 31 ++++++++++++++------------ 2 files changed, 18 insertions(+), 15 deletions(-) diff --git a/[refs] b/[refs] index 5e86a4ef4274..dd833ef34b7d 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 67ad4e08dcc772153fda90cc747cfc9e03ab44f6 +refs/heads/master: 332ed63ee9ec0b899cf6d03eecd85bebe1b8e943 diff --git a/trunk/drivers/staging/iio/adc/ad7780.c b/trunk/drivers/staging/iio/adc/ad7780.c index 5f807ce3bf11..1dd7cdb1dbc8 100644 --- a/trunk/drivers/staging/iio/adc/ad7780.c +++ b/trunk/drivers/staging/iio/adc/ad7780.c @@ -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; } @@ -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; @@ -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) @@ -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); @@ -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); @@ -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);