From nobody Mon Feb 9 20:43:12 2026 Received: from mail-ej1-f53.google.com (mail-ej1-f53.google.com [209.85.218.53]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 96EE815DBC7; Tue, 18 Jun 2024 14:22:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718720523; cv=none; b=E0HUvMPxLi/dn2ghBUfVef6qIZ3lWNLC/jSpls/kxdxESH47ANgCVB3m6yU6P0SY0/9JEyYYhJrZotXeWprE+w3u+5iq/XzGLxXE8V5357clYKl9HgCw7DgdPkvzh9E4Uxrc6IawKxikqbdljOYJ50hKrJn/2kYFIIRCHw4/FhI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718720523; c=relaxed/simple; bh=odMDZM1iWrH6C/6FAwjz4UxM3my1aTWZBZk/WEJCucM=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=XjZzm6IlfISSvFM0K0M/V0JuTkzMaAJQmQeBWcv3uHisBDBDMCEx4IUL+upRAZx/q/3ceJ4lofzpOd9OnYHB1RzGZDu/mDyB6udCCY1COP+VEiQdgV2ehMQPWcl2ahhcHe+omi6iEeYEAiYm3FniT+7ozHA/YzezvSclG26x0Ms= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=IqWU84C8; arc=none smtp.client-ip=209.85.218.53 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="IqWU84C8" Received: by mail-ej1-f53.google.com with SMTP id a640c23a62f3a-a6f0c3d0792so648560466b.3; Tue, 18 Jun 2024 07:22:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1718720520; x=1719325320; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=JhHe+Dk5RW2z8Ummfx+UjkraQsYp/dWgKDc8czLOogw=; b=IqWU84C8OdskdiQPi7ZHfERNKacVHRU3p2QSqD6gN+sI2/1Khsxqw5Sm1cHfiEIb5F iBzLjTjoq7v94HMFzg7GYS5Y0eM6wQ/Q7FzTVEoLqm1MruhS1eIjPYD1n71a6Lj7NQbQ Jn6OgLjkrSXj2DWg8B86ugs6H33PCOEXNXva4Wd+L8hhnXDCj9srxXl+c80GDg9QxVCF M1ay9TlCQMVRFqiZpp7vmlixRKIh3ulvxFWrfCt9+k97BU3x+/tRBTiWhUKyeJIQ/3nD m29iTG21hakT/Xn/ykcqHKmRIgYjglKqJeCDoHZrQmKQFnlD61eow5WEgDRdEACVHw5P gYvQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718720520; x=1719325320; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=JhHe+Dk5RW2z8Ummfx+UjkraQsYp/dWgKDc8czLOogw=; b=HIB+PJAe3KSkIw/qrxknZ5pUbWgtURuR/w2WYcZIPd6JfVPwGYLMdtoqhXJh4ZgTkc M1iLllpyUGc0Rxir0x6wyAIPDjsbRavuXejY5mlN+3PRoist91X8aK+TJkzO2eE4nrc9 vqX+jS/zElL2eVYcemzW8s/QSy2QBebVShYid17gneQsZRWPxD6OvRDorP2qSKF6Iz1E HVq5oKM02Z+iZyE0eOn4zH4Tioeu5zYTA/xwACKEQTbaswt4v7WGqc1jzr3Wf+F+4rtg E9Zm9qbgoLjTItGJD2RuZoTxJkeU27oldesb6/r1WEAWmKYEd6/zqIwDKwJClahzE4Nt 0W5w== X-Forwarded-Encrypted: i=1; AJvYcCXOxZHek7+K2F1OvfuscWat18dWYNsZ5PPgijcB7tJZvvPVmWFPOgYR6fmxQmG4shll6B1xEouyUmJHzSAmHv5VBlQeelMnwielkRzKS2VtpoPUFMvANsfWDAtN0PV3lls0kGj4/T9I2VTAF6SmLYP8nT/kkwwnEBHoyDnoz8bwiy0Aiw== X-Gm-Message-State: AOJu0Yy35fC5uhY8z3EqHVTVYFxhVUqUKvL5G6Mtze8kXP0rPzLD0MZ2 +o3/Vf6GgvMvNL1rLQ9jXx96KeiKnZNhZjHOEri/YGdZz5+8CXp3 X-Google-Smtp-Source: AGHT+IFVZW9LpfzvOs2+6b8TPae6fpJQ6Up7o/HkKoHkkKRWzo81hNrOwkPB2iwdqfjoon+dZd4DBw== X-Received: by 2002:a17:906:a897:b0:a6f:e36:abae with SMTP id a640c23a62f3a-a6f60d41741mr788297966b.42.1718720519667; Tue, 18 Jun 2024 07:21:59 -0700 (PDT) Received: from spiri.. ([5.2.194.157]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-a6f56db6dfesm618191466b.87.2024.06.18.07.21.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Jun 2024 07:21:59 -0700 (PDT) From: Alisa-Dariana Roman X-Google-Original-From: Alisa-Dariana Roman To: Alisa-Dariana Roman , Jonathan Cameron , Michael Hennerich , linux-iio@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Lars-Peter Clausen , Michael Hennerich , Jonathan Cameron , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Liam Girdwood , Mark Brown , David Lechner Subject: [PATCH v5 1/6] iio: adc: ad7192: use devm_regulator_get_enable_read_voltage Date: Tue, 18 Jun 2024 17:21:33 +0300 Message-Id: <20240618142138.520192-2-alisa.roman@analog.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240618142138.520192-1-alisa.roman@analog.com> References: <20240618142138.520192-1-alisa.roman@analog.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: David Lechner This makes use of the new devm_regulator_get_enable_read_voltage() function to reduce boilerplate code. Error messages have changed slightly since there are now fewer places where we print an error. The rest of the logic of selecting which supply to use as the reference voltage remains the same. Also 1000 is replaced by MILLI in a few places for consistency. Signed-off-by: David Lechner --- drivers/iio/adc/ad7192.c | 103 ++++++++++++++------------------------- 1 file changed, 36 insertions(+), 67 deletions(-) diff --git a/drivers/iio/adc/ad7192.c b/drivers/iio/adc/ad7192.c index c7fb51a90e87..334ab90991d4 100644 --- a/drivers/iio/adc/ad7192.c +++ b/drivers/iio/adc/ad7192.c @@ -200,8 +200,6 @@ struct ad7192_chip_info { =20 struct ad7192_state { const struct ad7192_chip_info *chip_info; - struct regulator *avdd; - struct regulator *vref; struct clk *mclk; u16 int_vref_mv; u32 aincom_mv; @@ -1189,18 +1187,12 @@ static const struct ad7192_chip_info ad7192_chip_in= fo_tbl[] =3D { }, }; =20 -static void ad7192_reg_disable(void *reg) -{ - regulator_disable(reg); -} - static int ad7192_probe(struct spi_device *spi) { struct device *dev =3D &spi->dev; struct ad7192_state *st; struct iio_dev *indio_dev; - struct regulator *aincom; - int ret; + int ret, avdd_mv; =20 if (!spi->irq) return dev_err_probe(dev, -ENODEV, "Failed to get IRQ\n"); @@ -1218,72 +1210,49 @@ static int ad7192_probe(struct spi_device *spi) * Newer firmware should provide a zero volt fixed supply if wired to * ground. */ - aincom =3D devm_regulator_get_optional(dev, "aincom"); - if (IS_ERR(aincom)) { - if (PTR_ERR(aincom) !=3D -ENODEV) - return dev_err_probe(dev, PTR_ERR(aincom), - "Failed to get AINCOM supply\n"); - - st->aincom_mv =3D 0; - } else { - ret =3D regulator_enable(aincom); - if (ret) - return dev_err_probe(dev, ret, - "Failed to enable specified AINCOM supply\n"); - - ret =3D devm_add_action_or_reset(dev, ad7192_reg_disable, aincom); - if (ret) - return ret; - - ret =3D regulator_get_voltage(aincom); - if (ret < 0) - return dev_err_probe(dev, ret, - "Device tree error, AINCOM voltage undefined\n"); - st->aincom_mv =3D ret / MILLI; + ret =3D devm_regulator_get_enable_read_voltage(dev, "aincom"); + if (ret < 0 && ret !=3D -ENODEV) + return dev_err_probe(dev, ret, "Failed to get AINCOM voltage\n"); + + st->aincom_mv =3D ret =3D=3D -ENODEV ? 0 : ret / MILLI; + + /* AVDD can optionally be used as reference voltage */ + ret =3D devm_regulator_get_enable_read_voltage(dev, "avdd"); + if (ret =3D=3D -ENODEV || ret =3D=3D -EINVAL) { + int ret2; + + /* + * We get -EINVAL if avdd is a supply with unknown voltage. We + * still need to enable it since it is also a power supply. + */ + ret2 =3D devm_regulator_get_enable(dev, "avdd"); + if (ret2) + return dev_err_probe(dev, ret2, + "Failed to enable AVDD supply\n"); + } else if (ret < 0) { + return dev_err_probe(dev, ret, "Failed to get AVDD voltage\n"); } =20 - st->avdd =3D devm_regulator_get(dev, "avdd"); - if (IS_ERR(st->avdd)) - return PTR_ERR(st->avdd); - - ret =3D regulator_enable(st->avdd); - if (ret) - return dev_err_probe(dev, ret, - "Failed to enable specified AVdd supply\n"); - - ret =3D devm_add_action_or_reset(dev, ad7192_reg_disable, st->avdd); - if (ret) - return ret; + avdd_mv =3D ret =3D=3D -ENODEV || ret =3D=3D -EINVAL ? 0 : ret / MILLI; =20 ret =3D devm_regulator_get_enable(dev, "dvdd"); if (ret) return dev_err_probe(dev, ret, "Failed to enable specified DVdd supply\n= "); =20 - st->vref =3D devm_regulator_get_optional(dev, "vref"); - if (IS_ERR(st->vref)) { - if (PTR_ERR(st->vref) !=3D -ENODEV) - return PTR_ERR(st->vref); - - ret =3D regulator_get_voltage(st->avdd); - if (ret < 0) - return dev_err_probe(dev, ret, - "Device tree error, AVdd voltage undefined\n"); - } else { - ret =3D regulator_enable(st->vref); - if (ret) - return dev_err_probe(dev, ret, - "Failed to enable specified Vref supply\n"); - - ret =3D devm_add_action_or_reset(dev, ad7192_reg_disable, st->vref); - if (ret) - return ret; - - ret =3D regulator_get_voltage(st->vref); - if (ret < 0) - return dev_err_probe(dev, ret, - "Device tree error, Vref voltage undefined\n"); + /* + * This is either REFIN1 or REFIN2 depending on adi,refin2-pins-enable. + * If this supply is not present, fall back to AVDD as reference. + */ + ret =3D devm_regulator_get_enable_read_voltage(dev, "vref"); + if (ret =3D=3D -ENODEV) { + if (avdd_mv =3D=3D 0) + return dev_err_probe(dev, -ENODEV, + "No reference voltage available\n"); + } else if (ret < 0) { + return ret; } - st->int_vref_mv =3D ret / 1000; + + st->int_vref_mv =3D ret =3D=3D -ENODEV ? avdd_mv : ret / MILLI; =20 st->chip_info =3D spi_get_device_match_data(spi); indio_dev->name =3D st->chip_info->name; --=20 2.34.1