Skip to content

Commit 2f4bb1f

Browse files
dlechbroonie
authored andcommitted
iio: frequency: admv1013: Use devm_regulator_get_enable_read_voltage()
We can reduce boilerplate code by using devm_regulator_get_enable_read_voltage(). The common mode voltage is now passed as a parameter in the init functions so we can avoid adding a state member that is only used during init. Reviewed-by: Jonathan Cameron <[email protected]> Signed-off-by: David Lechner <[email protected]> Link: https://lore.kernel.org/r/20240429-regulator-get-enable-get-votlage-v2-5-b1f11ab766c1@baylibre.com Signed-off-by: Mark Brown <[email protected]>
1 parent 41b94bc commit 2f4bb1f

File tree

1 file changed

+10
-30
lines changed

1 file changed

+10
-30
lines changed

drivers/iio/frequency/admv1013.c

Lines changed: 10 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,6 @@ struct admv1013_state {
9595
struct clk *clkin;
9696
/* Protect against concurrent accesses to the device and to data */
9797
struct mutex lock;
98-
struct regulator *reg;
9998
struct notifier_block nb;
10099
unsigned int input_mode;
101100
unsigned int quad_se_mode;
@@ -342,14 +341,9 @@ static int admv1013_update_quad_filters(struct admv1013_state *st)
342341
FIELD_PREP(ADMV1013_QUAD_FILTERS_MSK, filt_raw));
343342
}
344343

345-
static int admv1013_update_mixer_vgate(struct admv1013_state *st)
344+
static int admv1013_update_mixer_vgate(struct admv1013_state *st, int vcm)
346345
{
347346
unsigned int mixer_vgate;
348-
int vcm;
349-
350-
vcm = regulator_get_voltage(st->reg);
351-
if (vcm < 0)
352-
return vcm;
353347

354348
if (vcm <= 1800000)
355349
mixer_vgate = (2389 * vcm / 1000000 + 8100) / 100;
@@ -443,7 +437,7 @@ static const struct iio_chan_spec admv1013_channels[] = {
443437
ADMV1013_CHAN_CALIB(1, Q),
444438
};
445439

446-
static int admv1013_init(struct admv1013_state *st)
440+
static int admv1013_init(struct admv1013_state *st, int vcm_uv)
447441
{
448442
int ret;
449443
unsigned int data;
@@ -483,7 +477,7 @@ static int admv1013_init(struct admv1013_state *st)
483477
if (ret)
484478
return ret;
485479

486-
ret = admv1013_update_mixer_vgate(st);
480+
ret = admv1013_update_mixer_vgate(st, vcm_uv);
487481
if (ret)
488482
return ret;
489483

@@ -498,11 +492,6 @@ static int admv1013_init(struct admv1013_state *st)
498492
st->input_mode);
499493
}
500494

501-
static void admv1013_reg_disable(void *data)
502-
{
503-
regulator_disable(data);
504-
}
505-
506495
static void admv1013_powerdown(void *data)
507496
{
508497
unsigned int enable_reg, enable_reg_msk;
@@ -557,11 +546,6 @@ static int admv1013_properties_parse(struct admv1013_state *st)
557546
else
558547
return -EINVAL;
559548

560-
st->reg = devm_regulator_get(&spi->dev, "vcm");
561-
if (IS_ERR(st->reg))
562-
return dev_err_probe(&spi->dev, PTR_ERR(st->reg),
563-
"failed to get the common-mode voltage\n");
564-
565549
ret = devm_regulator_bulk_get_enable(&st->spi->dev,
566550
ARRAY_SIZE(admv1013_vcc_regs),
567551
admv1013_vcc_regs);
@@ -578,7 +562,7 @@ static int admv1013_probe(struct spi_device *spi)
578562
{
579563
struct iio_dev *indio_dev;
580564
struct admv1013_state *st;
581-
int ret;
565+
int ret, vcm_uv;
582566

583567
indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*st));
584568
if (!indio_dev)
@@ -597,16 +581,12 @@ static int admv1013_probe(struct spi_device *spi)
597581
if (ret)
598582
return ret;
599583

600-
ret = regulator_enable(st->reg);
601-
if (ret) {
602-
dev_err(&spi->dev, "Failed to enable specified Common-Mode Voltage!\n");
603-
return ret;
604-
}
584+
ret = devm_regulator_get_enable_read_voltage(&spi->dev, "vcm");
585+
if (ret < 0)
586+
return dev_err_probe(&spi->dev, ret,
587+
"failed to get the common-mode voltage\n");
605588

606-
ret = devm_add_action_or_reset(&spi->dev, admv1013_reg_disable,
607-
st->reg);
608-
if (ret)
609-
return ret;
589+
vcm_uv = ret;
610590

611591
st->clkin = devm_clk_get_enabled(&spi->dev, "lo_in");
612592
if (IS_ERR(st->clkin))
@@ -620,7 +600,7 @@ static int admv1013_probe(struct spi_device *spi)
620600

621601
mutex_init(&st->lock);
622602

623-
ret = admv1013_init(st);
603+
ret = admv1013_init(st, vcm_uv);
624604
if (ret) {
625605
dev_err(&spi->dev, "admv1013 init failed\n");
626606
return ret;

0 commit comments

Comments
 (0)