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 Original line Diff line number Diff line
@@ -153,6 +153,7 @@


struct ad7192_state {
struct ad7192_state {
	struct regulator		*reg;
	struct regulator		*reg;
	struct regulator		*dvdd;
	u16				int_vref_mv;
	u16				int_vref_mv;
	u32				mclk;
	u32				mclk;
	u32				f_order;
	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");
		dev_err(&spi->dev, "Failed to enable specified AVdd supply\n");
		return ret;
		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);
	voltage_uv = regulator_get_voltage(st->reg);


	if (pdata->vref_mv)
	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);
	ret = ad_sd_setup_buffer_and_trigger(indio_dev);
	if (ret)
	if (ret)
		goto error_disable_reg;
		goto error_disable_dvdd;


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


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


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


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


	return 0;
	return 0;