summaryrefslogtreecommitdiff
path: root/drivers/iio/pressure
diff options
context:
space:
mode:
authorLinus Walleij <linus.walleij@linaro.org>2016-06-30 04:48:47 +0300
committerJonathan Cameron <jic23@kernel.org>2016-06-30 22:39:40 +0300
commitc5842b47b2945d6db24b4db6b2c7364e94cbc78b (patch)
tree2a4c4d65634f11163445bb55b9433093cf762fa7 /drivers/iio/pressure
parent78f5027132243b7071dc59ea6f717e2c48e12031 (diff)
downloadlinux-c5842b47b2945d6db24b4db6b2c7364e94cbc78b.tar.xz
iio: pressure: bmp280: add reset GPIO line handling
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>
Diffstat (limited to 'drivers/iio/pressure')
-rw-r--r--drivers/iio/pressure/bmp280.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/drivers/iio/pressure/bmp280.c b/drivers/iio/pressure/bmp280.c
index a147ce2de0e1..77172f047f61 100644
--- a/drivers/iio/pressure/bmp280.c
+++ b/drivers/iio/pressure/bmp280.c
@@ -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)) {