From mboxrd@z Thu Jan 1 00:00:00 1970 From: Fabrice Gasnier Date: Mon, 23 Jul 2018 14:35:51 +0200 Subject: [U-Boot] [PATCH 2/6] dm: adc: uclass: get reference regulator once In-Reply-To: <1532349355-32671-1-git-send-email-fabrice.gasnier@st.com> References: <1532349355-32671-1-git-send-email-fabrice.gasnier@st.com> Message-ID: <1532349355-32671-2-git-send-email-fabrice.gasnier@st.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de device_get_supply_regulator() only needs to be called once. But each time there's call to adc_vxx_value() for instance, it calls adc_vxx_platdata_update() -> device_get_supply_regulator(). This also allows vdd_supply/vss_supply to be provided directly from uc_pdata, e.g dt-binding variant like stm32-adc provide its own 'vref-supply'. Signed-off-by: Fabrice Gasnier --- drivers/adc/adc-uclass.c | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/drivers/adc/adc-uclass.c b/drivers/adc/adc-uclass.c index 17c1a4e..70f4cde 100644 --- a/drivers/adc/adc-uclass.c +++ b/drivers/adc/adc-uclass.c @@ -264,10 +264,13 @@ static int adc_vdd_platdata_update(struct udevice *dev) * will bind before its supply regulator device, then the below 'get' * will return an error. */ - ret = device_get_supply_regulator(dev, "vdd-supply", - &uc_pdata->vdd_supply); - if (ret) - return ret; + if (!uc_pdata->vdd_supply) { + /* Only get vdd_supply once */ + ret = device_get_supply_regulator(dev, "vdd-supply", + &uc_pdata->vdd_supply); + if (ret) + return ret; + } ret = regulator_get_value(uc_pdata->vdd_supply); if (ret < 0) @@ -283,10 +286,12 @@ static int adc_vss_platdata_update(struct udevice *dev) struct adc_uclass_platdata *uc_pdata = dev_get_uclass_platdata(dev); int ret; - ret = device_get_supply_regulator(dev, "vss-supply", - &uc_pdata->vss_supply); - if (ret) - return ret; + if (!uc_pdata->vss_supply) { + ret = device_get_supply_regulator(dev, "vss-supply", + &uc_pdata->vss_supply); + if (ret) + return ret; + } ret = regulator_get_value(uc_pdata->vss_supply); if (ret < 0) -- 1.9.1