Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cb8bb16c authored by Eva Rachel Retuya's avatar Eva Rachel Retuya Committed by Jonathan Cameron
Browse files

staging: iio: ad7192: add DVdd regulator



The AD7190/AD7192/AD7193/AD7195 is supplied with two power sources:
AVdd as analog supply voltage and DVdd as digital supply voltage.

Attempt to fetch and enable the regulator 'dvdd'. Bail out if any error
occurs.

Suggested-by: default avatarLars-Peter Clausen <lars@metafoo.de>
Signed-off-by: default avatarEva Rachel Retuya <eraretuya@gmail.com>
Signed-off-by: default avatarJonathan Cameron <jic23@kernel.org>
parent 3925ff0f
Loading
Loading
Loading
Loading
+18 −1
Original line number Diff line number Diff line
@@ -153,6 +153,7 @@

struct ad7192_state {
	struct regulator		*reg;
	struct regulator		*dvdd;
	u16				int_vref_mv;
	u32				mclk;
	u32				f_order;
@@ -642,6 +643,19 @@ static int ad7192_probe(struct spi_device *spi)
		dev_err(&spi->dev, "Failed to enable specified AVdd supply\n");
		return ret;
	}

	st->dvdd = devm_regulator_get(&spi->dev, "dvdd");
	if (IS_ERR(st->dvdd)) {
		ret = PTR_ERR(st->dvdd);
		goto error_disable_reg;
	}

	ret = regulator_enable(st->dvdd);
	if (ret) {
		dev_err(&spi->dev, "Failed to enable specified DVdd supply\n");
		goto error_disable_reg;
	}

	voltage_uv = regulator_get_voltage(st->reg);

	if (pdata->vref_mv)
@@ -677,7 +691,7 @@ static int ad7192_probe(struct spi_device *spi)

	ret = ad_sd_setup_buffer_and_trigger(indio_dev);
	if (ret)
		goto error_disable_reg;
		goto error_disable_dvdd;

	ret = ad7192_setup(st, pdata);
	if (ret)
@@ -690,6 +704,8 @@ static int ad7192_probe(struct spi_device *spi)

error_remove_trigger:
	ad_sd_cleanup_buffer_and_trigger(indio_dev);
error_disable_dvdd:
	regulator_disable(st->dvdd);
error_disable_reg:
	regulator_disable(st->reg);

@@ -704,6 +720,7 @@ static int ad7192_remove(struct spi_device *spi)
	iio_device_unregister(indio_dev);
	ad_sd_cleanup_buffer_and_trigger(indio_dev);

	regulator_disable(st->dvdd);
	regulator_disable(st->reg);

	return 0;