#define DRVNAME "vexpress-regulator"
#define pr_fmt(fmt) DRVNAME ": " fmt
#include <linux/device.h>
#include <linux/module.h>
#include <linux/of_device.h>
#include <linux/regulator/driver.h>
#include <linux/regulator/machine.h>
#include <linux/regulator/of_regulator.h>
#include <linux/vexpress.h>
struct vexpress_regulator {
struct regulator_desc desc;
struct regulator_dev *regdev;
static int vexpress_regulator_get_voltage(struct regulator_dev *regdev)
struct vexpress_regulator *reg = rdev_get_drvdata(regdev);
int err = regmap_read(reg->regmap, 0, &uV);
static int vexpress_regulator_set_voltage(struct regulator_dev *regdev,
int min_uV, int max_uV, unsigned *selector)
struct vexpress_regulator *reg = rdev_get_drvdata(regdev);
return regmap_write(reg->regmap, 0, min_uV);
static struct regulator_ops vexpress_regulator_ops_ro = {
.get_voltage = vexpress_regulator_get_voltage,
static struct regulator_ops vexpress_regulator_ops = {
.get_voltage = vexpress_regulator_get_voltage,
.set_voltage = vexpress_regulator_set_voltage,
static int vexpress_regulator_probe(struct platform_device *pdev)
struct vexpress_regulator *reg;
struct regulator_init_data *init_data;
struct regulator_config config = { };