iio: pressure: bmp280: add reset GPIO line handling
authorLinus Walleij <linus.walleij@linaro.org>
Thu, 30 Jun 2016 01:48:47 +0000 (03:48 +0200)
committerJonathan Cameron <jic23@kernel.org>
Thu, 30 Jun 2016 19:39:40 +0000 (20:39 +0100)
On the APQ8060 Dragonboard the reset line to the BMP085 pressure
sensor is not deasserted on boot, so the driver needs to handle
this. For a simple GPIO line supplied as a descriptor (from a board
file, device tree or ACPI) this does the trick.

Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Jonathan Cameron <jic23@kernel.org>
drivers/iio/pressure/bmp280.c

index a147ce2..77172f0 100644 (file)
@@ -23,6 +23,7 @@
 #include <linux/delay.h>
 #include <linux/iio/iio.h>
 #include <linux/iio/sysfs.h>
+#include <linux/gpio/consumer.h>
 
 /* BMP280 specific registers */
 #define BMP280_REG_HUMIDITY_LSB                0xFE
@@ -1024,6 +1025,7 @@ static int bmp280_probe(struct i2c_client *client,
        struct iio_dev *indio_dev;
        struct bmp280_data *data;
        unsigned int chip_id;
+       struct gpio_desc *gpiod;
 
        indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*data));
        if (!indio_dev)
@@ -1063,6 +1065,14 @@ static int bmp280_probe(struct i2c_client *client,
                return -EINVAL;
        }
 
+       /* Bring chip out of reset if there is an assigned GPIO line */
+       gpiod = devm_gpiod_get(&client->dev, "reset", GPIOD_OUT_HIGH);
+       /* Deassert the signal */
+       if (!IS_ERR(gpiod)) {
+               dev_info(&client->dev, "release reset\n");
+               gpiod_set_value(gpiod, 0);
+       }
+
        data->regmap = devm_regmap_init_i2c(client,
                                        data->chip_info->regmap_config);
        if (IS_ERR(data->regmap)) {