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>
This commit is contained in:

committed by
Jonathan Cameron

parent
78f5027132
commit
c5842b47b2
@@ -23,6 +23,7 @@
|
|||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
#include <linux/iio/iio.h>
|
#include <linux/iio/iio.h>
|
||||||
#include <linux/iio/sysfs.h>
|
#include <linux/iio/sysfs.h>
|
||||||
|
#include <linux/gpio/consumer.h>
|
||||||
|
|
||||||
/* BMP280 specific registers */
|
/* BMP280 specific registers */
|
||||||
#define BMP280_REG_HUMIDITY_LSB 0xFE
|
#define BMP280_REG_HUMIDITY_LSB 0xFE
|
||||||
@@ -1024,6 +1025,7 @@ static int bmp280_probe(struct i2c_client *client,
|
|||||||
struct iio_dev *indio_dev;
|
struct iio_dev *indio_dev;
|
||||||
struct bmp280_data *data;
|
struct bmp280_data *data;
|
||||||
unsigned int chip_id;
|
unsigned int chip_id;
|
||||||
|
struct gpio_desc *gpiod;
|
||||||
|
|
||||||
indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*data));
|
indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*data));
|
||||||
if (!indio_dev)
|
if (!indio_dev)
|
||||||
@@ -1063,6 +1065,14 @@ static int bmp280_probe(struct i2c_client *client,
|
|||||||
return -EINVAL;
|
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->regmap = devm_regmap_init_i2c(client,
|
||||||
data->chip_info->regmap_config);
|
data->chip_info->regmap_config);
|
||||||
if (IS_ERR(data->regmap)) {
|
if (IS_ERR(data->regmap)) {
|
||||||
|
Reference in New Issue
Block a user