From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 233AC3D16FD; Tue, 23 Jun 2026 10:56:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782212160; cv=none; b=KOKK0JtO73oDW02LP/5HIcdw2v92b50s1NrnE1VCdKuHDqS4yfrjOkiI8HEONw/WViOzBewCW+bVyxf5c3eNwGHWu2AqjTYI8B/FxsIFtTC0X8OsUb7OML2GPVKluP19uXQb0uCw7gKs/t9rjaR5NrngFRZIquXd1ok0r7TI7HE= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782212160; c=relaxed/simple; bh=DP9b3X7hTn4lENMs1fQ7NumoTqXlS3alBnRcv5X59PU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=CCNpFLlWvj+XH7E5s9Fs9+bG7SUwfR7cLi3Di8ISJk+6oWQyr9et9juBqPwSJwLE5X0XuNfGp1xswFHAuzpC+v89p2TLy4mSeSDIvcVr4QX1Hy66xK/bHAGEXMGDXX1OnprCI3NOe/1DL0H7s71W7wl8gzfgw5cdJ3CZ8Ovt99k= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=MBCBMBos; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="MBCBMBos" Received: by smtp.kernel.org (Postfix) with ESMTPS id D578DC4AF11; Tue, 23 Jun 2026 10:55:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1782212159; bh=DP9b3X7hTn4lENMs1fQ7NumoTqXlS3alBnRcv5X59PU=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=MBCBMBosAQhDbkOpQZjCJPl26Pa6J6Bf9GRd2HIJ0vc4jklL7LAzP+U16l9/9T+Xr WSA4iVl1LoFEsnxH7THMD7SN6TY7bW9oIUJHsmeKN5C4wBQ5tVTwLRdX4uth1zqUwv RCmUDPfDS8/0tRCQkt4HMdsFBNMZuzeU6c3dLyhyCinZB2dnkCUhZixFcpmbEyQ2Ix vODWSs9vnrEcAQC1vOXkrHmPmENh25kf9wCKuetUcPUswfkP8qEOj7ZkMtVFD5jtNu SArUk0dHpmgHymeb8xk4tXDUwZwyJylV4uQwyTzjxj3I55ccF/+51P3uK5sc1pu1K0 uk7lWtTo3F2TA== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id CAD0ACDB480; Tue, 23 Jun 2026 10:55:59 +0000 (UTC) From: Rodrigo Alencar via B4 Relay Date: Tue, 23 Jun 2026 11:55:45 +0100 Subject: [PATCH v4 05/12] iio: dac: ad5686: add support for missing power supplies Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20260623-ad5686-new-features-v4-5-28962a57db0f@analog.com> References: <20260623-ad5686-new-features-v4-0-28962a57db0f@analog.com> In-Reply-To: <20260623-ad5686-new-features-v4-0-28962a57db0f@analog.com> To: Michael Auchter , linux@analog.com, linux-iio@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-hardening@vger.kernel.org Cc: Michael Hennerich , Jonathan Cameron , David Lechner , Andy Shevchenko , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Philipp Zabel , Kees Cook , "Gustavo A. R. Silva" , Rodrigo Alencar X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1782212158; l=2460; i=rodrigo.alencar@analog.com; s=default; h=from:subject:message-id; bh=Tr442c1u34XlsfiJuHQO8gjG3hY5veMoFtLrjc67lHs=; b=GXzwp+mOq/Ypfd7XZATgviGYnv/fuqLxK0d076CI1ac5w+xhPAjP5fiunyqJahB9rk79XSDBR 6HhECGBqSDoCkTKOkb1OU9KAv1CLCrCI+8OGASDHdkpwp4UrVssKE6V X-Developer-Key: i=rodrigo.alencar@analog.com; a=ed25519; pk=ULeHbgU/OYh/PG/4anHDfLgldFItQHAhOktYRVLMFRo= X-Endpoint-Received: by B4 Relay for rodrigo.alencar@analog.com/default with auth_id=561 X-Original-From: Rodrigo Alencar Reply-To: rodrigo.alencar@analog.com From: Rodrigo Alencar Get and enable regulators for vdd, vlogic and vref input power pins. Vdd is the input power supply, while vlogic powers the digital side. vref is replacing vcc, which is being deprecated, but still supported. The value of vref_mv is checked so that a device without internal voltage reference cannot proceed without an explicit supply. For correct operation, vdd and vlogic are required, then devm_regulator_get_enable() is used so the driver can still work without them by using the stub/dummy regulators. Error report uses dev_err_probe(), which helps debugging an init issue. A small delay is added after the regulators are enabled to consider for the power-up time (4.5 us). Signed-off-by: Rodrigo Alencar --- drivers/iio/dac/ad5686.c | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/drivers/iio/dac/ad5686.c b/drivers/iio/dac/ad5686.c index 5840fda4b011..e2ebabca6887 100644 --- a/drivers/iio/dac/ad5686.c +++ b/drivers/iio/dac/ad5686.c @@ -8,6 +8,8 @@ #include #include #include +#include +#include #include #include #include @@ -484,12 +486,28 @@ int ad5686_probe(struct device *dev, st->ops = ops; st->chip_info = chip_info; - ret = devm_regulator_get_enable_read_voltage(dev, "vcc"); + ret = devm_regulator_get_enable(dev, "vdd"); + if (ret) + return dev_err_probe(dev, ret, "failed to enable vdd supply\n"); + + ret = devm_regulator_get_enable(dev, "vlogic"); + if (ret) + return dev_err_probe(dev, ret, "failed to enable vlogic supply\n"); + + ret = devm_regulator_get_enable_read_voltage(dev, "vref"); + if (ret == -ENODEV) /* vcc-supply is deprecated, but supported still */ + ret = devm_regulator_get_enable_read_voltage(dev, "vcc"); if (ret < 0 && ret != -ENODEV) - return ret; + return dev_err_probe(dev, ret, "failed to read vref voltage\n"); st->use_internal_vref = ret == -ENODEV; st->vref_mv = st->use_internal_vref ? st->chip_info->int_vref_mv : ret / 1000; + if (!st->vref_mv) + return dev_err_probe(dev, -EINVAL, + "invalid or not provided vref voltage\n"); + + /* 4.5us power-up time: Datasheet Table 4: Timing Characteristics */ + fsleep(5); /* Initialize masks to all ones */ st->pwr_down_mask = ~0; -- 2.43.0