#define BMA400_SCALE_MIN            38357
 #define BMA400_SCALE_MAX            306864
 
+#define BMA400_NUM_REGULATORS       2
+#define BMA400_VDD_REGULATOR        0
+#define BMA400_VDDIO_REGULATOR      1
+
 extern const struct regmap_config bma400_regmap_config;
 
 int bma400_probe(struct device *dev, struct regmap *regmap, const char *name);
 
 #include <linux/module.h>
 #include <linux/mutex.h>
 #include <linux/regmap.h>
+#include <linux/regulator/consumer.h>
 
 #include "bma400.h"
 
 struct bma400_data {
        struct device *dev;
        struct regmap *regmap;
+       struct regulator_bulk_data regulators[BMA400_NUM_REGULATORS];
        struct mutex mutex; /* data register lock */
        struct iio_mount_matrix orientation;
        enum bma400_power_mode power_mode;
                goto out;
        }
 
+       data->regulators[BMA400_VDD_REGULATOR].supply = "vdd";
+       data->regulators[BMA400_VDDIO_REGULATOR].supply = "vddio";
+       ret = devm_regulator_bulk_get(data->dev,
+                                     ARRAY_SIZE(data->regulators),
+                                     data->regulators);
+       if (ret) {
+               if (ret != -EPROBE_DEFER)
+                       dev_err(data->dev,
+                               "Failed to get regulators: %d\n",
+                               ret);
+
+               goto out;
+       }
+       ret = regulator_bulk_enable(ARRAY_SIZE(data->regulators),
+                                   data->regulators);
+       if (ret) {
+               dev_err(data->dev, "Failed to enable regulators: %d\n",
+                       ret);
+               goto out;
+       }
+
        ret = bma400_get_power_mode(data);
        if (ret) {
                dev_err(data->dev, "Failed to get the initial power-mode\n");
-               goto out;
+               goto err_reg_disable;
        }
 
        if (data->power_mode != POWER_MODE_NORMAL) {
                ret = bma400_set_power_mode(data, POWER_MODE_NORMAL);
                if (ret) {
                        dev_err(data->dev, "Failed to wake up the device\n");
-                       goto out;
+                       goto err_reg_disable;
                }
                /*
                 * TODO: The datasheet waits 1500us here in the example, but
 
        ret = bma400_get_accel_output_data_rate(data);
        if (ret)
-               goto out;
+               goto err_reg_disable;
 
        ret = bma400_get_accel_oversampling_ratio(data);
        if (ret)
-               goto out;
+               goto err_reg_disable;
 
        ret = bma400_get_accel_scale(data);
        if (ret)
-               goto out;
+               goto err_reg_disable;
 
        /*
         * Once the interrupt engine is supported we might use the
         */
        return regmap_write(data->regmap, BMA400_ACC_CONFIG2_REG, 0x00);
 
+err_reg_disable:
+       regulator_bulk_disable(ARRAY_SIZE(data->regulators),
+                              data->regulators);
 out:
        return ret;
 }
        ret = bma400_set_power_mode(data, POWER_MODE_SLEEP);
        mutex_unlock(&data->mutex);
 
+       regulator_bulk_disable(ARRAY_SIZE(data->regulators),
+                              data->regulators);
+
        iio_device_unregister(indio_dev);
 
        return ret;