From 6e193c52c967d3a5b0f7deaa042b1597270561e8 Mon Sep 17 00:00:00 2001 From: LADI RAM SAI Date: Wed, 28 Jun 2023 17:06:19 +0530 Subject: [PATCH] regulator: virtio: Add support for a regulator switch Add support for a regulator switch with limited ops set. Change-Id: I47735f1ec5ef98a418250cadf209f4b7ce362ab6 Signed-off-by: Ramachandran Venkataramani Signed-off-by: LADI RAM SAI --- drivers/regulator/virtio_regulator.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/drivers/regulator/virtio_regulator.c b/drivers/regulator/virtio_regulator.c index 77d7fc846e05..585a54725427 100644 --- a/drivers/regulator/virtio_regulator.c +++ b/drivers/regulator/virtio_regulator.c @@ -413,6 +413,12 @@ static const struct regulator_ops virtio_regulator_ops = { .set_load = virtio_regulator_set_load, }; +static const struct regulator_ops virtio_regulator_switch_ops = { + .enable = virtio_regulator_enable, + .disable = virtio_regulator_disable, + .is_enabled = virtio_regulator_is_enabled, +}; + static void virtio_regulator_isr(struct virtqueue *vq) { struct virtio_regulator *vregulator = vq->vdev->priv; @@ -504,9 +510,6 @@ static int virtio_regulator_init_reg(struct reg_virtio *reg) if (init_data == NULL) return -ENOMEM; - init_data->constraints.input_uV = init_data->constraints.max_uV; - init_data->constraints.valid_ops_mask |= REGULATOR_CHANGE_VOLTAGE; - if (init_data->constraints.min_uV == 0 && init_data->constraints.max_uV == 0) reg->rdesc.n_voltages = 0; @@ -515,6 +518,13 @@ static int virtio_regulator_init_reg(struct reg_virtio *reg) else reg->rdesc.n_voltages = 2; + if (reg->rdesc.n_voltages == 0) { + reg->rdesc.ops = &virtio_regulator_switch_ops; + } else { + init_data->constraints.input_uV = init_data->constraints.max_uV; + init_data->constraints.valid_ops_mask |= REGULATOR_CHANGE_VOLTAGE; + } + reg_config.dev = dev; reg_config.init_data = init_data; reg_config.of_node = reg->of_node;