iio: pressure: bmp280: use bulk regulator ops
The vddd and vdda supplies are always operated on together. We can shrink the code a bit by using the bulk regulator helpers. Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com> Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
This commit is contained in:
Родитель
84e5ddd5c4
Коммит
1372d1a197
|
@ -74,6 +74,12 @@ struct bmp280_calib {
|
|||
s8 H6;
|
||||
};
|
||||
|
||||
static const char *const bmp280_supply_names[] = {
|
||||
"vddd", "vdda"
|
||||
};
|
||||
|
||||
#define BMP280_NUM_SUPPLIES ARRAY_SIZE(bmp280_supply_names)
|
||||
|
||||
struct bmp280_data {
|
||||
struct device *dev;
|
||||
struct mutex lock;
|
||||
|
@ -85,8 +91,7 @@ struct bmp280_data {
|
|||
struct bmp180_calib bmp180;
|
||||
struct bmp280_calib bmp280;
|
||||
} calib;
|
||||
struct regulator *vddd;
|
||||
struct regulator *vdda;
|
||||
struct regulator_bulk_data supplies[BMP280_NUM_SUPPLIES];
|
||||
unsigned int start_up_time; /* in microseconds */
|
||||
|
||||
/* log of base 2 of oversampling rate */
|
||||
|
@ -1035,27 +1040,23 @@ int bmp280_common_probe(struct device *dev,
|
|||
}
|
||||
|
||||
/* Bring up regulators */
|
||||
data->vddd = devm_regulator_get(dev, "vddd");
|
||||
if (IS_ERR(data->vddd)) {
|
||||
dev_err(dev, "failed to get VDDD regulator\n");
|
||||
return PTR_ERR(data->vddd);
|
||||
}
|
||||
ret = regulator_enable(data->vddd);
|
||||
regulator_bulk_set_supply_names(data->supplies,
|
||||
bmp280_supply_names,
|
||||
BMP280_NUM_SUPPLIES);
|
||||
|
||||
ret = devm_regulator_bulk_get(dev,
|
||||
BMP280_NUM_SUPPLIES, data->supplies);
|
||||
if (ret) {
|
||||
dev_err(dev, "failed to enable VDDD regulator\n");
|
||||
dev_err(dev, "failed to get regulators\n");
|
||||
return ret;
|
||||
}
|
||||
data->vdda = devm_regulator_get(dev, "vdda");
|
||||
if (IS_ERR(data->vdda)) {
|
||||
dev_err(dev, "failed to get VDDA regulator\n");
|
||||
ret = PTR_ERR(data->vdda);
|
||||
goto out_disable_vddd;
|
||||
}
|
||||
ret = regulator_enable(data->vdda);
|
||||
|
||||
ret = regulator_bulk_enable(BMP280_NUM_SUPPLIES, data->supplies);
|
||||
if (ret) {
|
||||
dev_err(dev, "failed to enable VDDA regulator\n");
|
||||
goto out_disable_vddd;
|
||||
dev_err(dev, "failed to enable regulators\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Wait to make sure we started up properly */
|
||||
usleep_range(data->start_up_time, data->start_up_time + 100);
|
||||
|
||||
|
@ -1070,17 +1071,17 @@ int bmp280_common_probe(struct device *dev,
|
|||
data->regmap = regmap;
|
||||
ret = regmap_read(regmap, BMP280_REG_ID, &chip_id);
|
||||
if (ret < 0)
|
||||
goto out_disable_vdda;
|
||||
goto out_disable_regulators;
|
||||
if (chip_id != chip) {
|
||||
dev_err(dev, "bad chip id: expected %x got %x\n",
|
||||
chip, chip_id);
|
||||
ret = -EINVAL;
|
||||
goto out_disable_vdda;
|
||||
goto out_disable_regulators;
|
||||
}
|
||||
|
||||
ret = data->chip_info->chip_config(data);
|
||||
if (ret < 0)
|
||||
goto out_disable_vdda;
|
||||
goto out_disable_regulators;
|
||||
|
||||
dev_set_drvdata(dev, indio_dev);
|
||||
|
||||
|
@ -1094,14 +1095,14 @@ int bmp280_common_probe(struct device *dev,
|
|||
if (ret < 0) {
|
||||
dev_err(data->dev,
|
||||
"failed to read calibration coefficients\n");
|
||||
goto out_disable_vdda;
|
||||
goto out_disable_regulators;
|
||||
}
|
||||
} else if (chip_id == BMP280_CHIP_ID || chip_id == BME280_CHIP_ID) {
|
||||
ret = bmp280_read_calib(data, &data->calib.bmp280, chip_id);
|
||||
if (ret < 0) {
|
||||
dev_err(data->dev,
|
||||
"failed to read calibration coefficients\n");
|
||||
goto out_disable_vdda;
|
||||
goto out_disable_regulators;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1113,7 +1114,7 @@ int bmp280_common_probe(struct device *dev,
|
|||
if (irq > 0 || (chip_id == BMP180_CHIP_ID)) {
|
||||
ret = bmp085_fetch_eoc_irq(dev, name, irq, data);
|
||||
if (ret)
|
||||
goto out_disable_vdda;
|
||||
goto out_disable_regulators;
|
||||
}
|
||||
|
||||
/* Enable runtime PM */
|
||||
|
@ -1138,10 +1139,8 @@ out_runtime_pm_disable:
|
|||
pm_runtime_get_sync(data->dev);
|
||||
pm_runtime_put_noidle(data->dev);
|
||||
pm_runtime_disable(data->dev);
|
||||
out_disable_vdda:
|
||||
regulator_disable(data->vdda);
|
||||
out_disable_vddd:
|
||||
regulator_disable(data->vddd);
|
||||
out_disable_regulators:
|
||||
regulator_bulk_disable(BMP280_NUM_SUPPLIES, data->supplies);
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL(bmp280_common_probe);
|
||||
|
@ -1155,8 +1154,7 @@ int bmp280_common_remove(struct device *dev)
|
|||
pm_runtime_get_sync(data->dev);
|
||||
pm_runtime_put_noidle(data->dev);
|
||||
pm_runtime_disable(data->dev);
|
||||
regulator_disable(data->vdda);
|
||||
regulator_disable(data->vddd);
|
||||
regulator_bulk_disable(BMP280_NUM_SUPPLIES, data->supplies);
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(bmp280_common_remove);
|
||||
|
@ -1166,12 +1164,8 @@ static int bmp280_runtime_suspend(struct device *dev)
|
|||
{
|
||||
struct iio_dev *indio_dev = dev_get_drvdata(dev);
|
||||
struct bmp280_data *data = iio_priv(indio_dev);
|
||||
int ret;
|
||||
|
||||
ret = regulator_disable(data->vdda);
|
||||
if (ret)
|
||||
return ret;
|
||||
return regulator_disable(data->vddd);
|
||||
return regulator_bulk_disable(BMP280_NUM_SUPPLIES, data->supplies);
|
||||
}
|
||||
|
||||
static int bmp280_runtime_resume(struct device *dev)
|
||||
|
@ -1180,10 +1174,7 @@ static int bmp280_runtime_resume(struct device *dev)
|
|||
struct bmp280_data *data = iio_priv(indio_dev);
|
||||
int ret;
|
||||
|
||||
ret = regulator_enable(data->vddd);
|
||||
if (ret)
|
||||
return ret;
|
||||
ret = regulator_enable(data->vdda);
|
||||
ret = regulator_bulk_enable(BMP280_NUM_SUPPLIES, data->supplies);
|
||||
if (ret)
|
||||
return ret;
|
||||
usleep_range(data->start_up_time, data->start_up_time + 100);
|
||||
|
|
Загрузка…
Ссылка в новой задаче