Received: by 2002:ab2:6309:0:b0:1fb:d597:ff75 with SMTP id s9csp1096893lqt; Fri, 7 Jun 2024 07:59:30 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCXhC7Ic416AfLHpS/Tuf0km0NzI1/VvXyLSqoYEmGJ56R+5k77v0yXmg4+V9G6Rj44VKrPJm5fs5KctJwB+Km52ElYy+xdYoig95qYFRg== X-Google-Smtp-Source: AGHT+IEmRDRAw4IAhJz/v7H9Pw+7pJf4cETWy3p8gc62tZaAi3seSqgY4LIw2L22uGahGUbsBZLI X-Received: by 2002:a50:9eef:0:b0:578:56e1:7ba3 with SMTP id 4fb4d7f45d1cf-57c509a5fb8mr1679888a12.38.1717772370244; Fri, 07 Jun 2024 07:59:30 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1717772370; cv=pass; d=google.com; s=arc-20160816; b=dyvwczlBKQf44bxu8sg8omF28+Mlk0/C1f1LU/khURoYoCPCd6VBXKAEyQGdSXvStf CoViGAb0KXS6/kPi12wrFppLwSzmadfZ5aBcvDdtIimc6KcL0Q+0kC/w4Oth+mn/zUev t9ynoNyeU9nfBOyqTZ6jxvqQoH/ZzDfDJ8MoAMI+Kvkhwtd2yxUQoPIUty3um0UCdCFf DRE/Q5t2aBQCbXYOi7Mk3+/dd8iqZd+zFgWjyaVe3bPfsv2JCJEeaql3aF5A4titWN08 41ZcBTbDkczxdikY/IAKMRScbYdLH+82q2dN3+fQ43IOVEoLnGcxGETmR4vWV0Kyvft9 Tsrg== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=reply-to:cc:to:in-reply-to:references:message-id :content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:subject:date:from:dkim-signature; bh=vhyv7QF/phiBahcMg+n/u4fhmOokXySl5/nnRtbkzPI=; fh=LhdatDguh+IuN1lDyS6rzhx9ubttSYYZpDCGFgekH1E=; b=Ery6RXDnrQVT+w0KNy3OpCp4Vh+SxLhjrejxTfc3qNRc53q3czvxlQbbYUNfAbJGLf RMuW3CuPa4DRl7roa+eYxnmAFPOPuYPEDCK/teS7X/C1IWBl4eZG98adgtjy9JELX0Rv gSskUpUrDv58FUQPFO0Kcz5HXwAyq3C5HEhpf0+XoD6tEoYXx6Toyj4j5QWr0jFO/zwM no98MSoYXANitaltEk6kDbERnquS3307KxFGwrdFuN4mcDtGrphwW/3wjncrE2oBLfa/ bp13hs+dUq0/jogCv44WrDItlhNm9TBh4vO5eTpn4rPhxGrGTc/r6DstIiy5JxByvUhT 0CFA==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=rUa61FgN; arc=pass (i=1 dkim=pass dkdomain=kernel.org); spf=pass (google.com: domain of linux-kernel+bounces-206323-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) smtp.mailfrom="linux-kernel+bounces-206323-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from am.mirrors.kernel.org (am.mirrors.kernel.org. [147.75.80.249]) by mx.google.com with ESMTPS id 4fb4d7f45d1cf-57aae1fd987si1897369a12.298.2024.06.07.07.59.30 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Jun 2024 07:59:30 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel+bounces-206323-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) client-ip=147.75.80.249; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=rUa61FgN; arc=pass (i=1 dkim=pass dkdomain=kernel.org); spf=pass (google.com: domain of linux-kernel+bounces-206323-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) smtp.mailfrom="linux-kernel+bounces-206323-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by am.mirrors.kernel.org (Postfix) with ESMTPS id C17911F25B79 for ; Fri, 7 Jun 2024 14:59:29 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 1E1E41A0DF3; Fri, 7 Jun 2024 14:53:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="rUa61FgN" 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 B4E9919FA76; Fri, 7 Jun 2024 14:53:09 +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=1717771989; cv=none; b=t+NDyTPla3tIWR0NKxhhFyeHGmiarYI41zUtHGjbBu6oX2jF1cchxe0QerA0sgFHYFeWN06hRvB8dmP4OgBGbIu/FZhkMAckKJsLwbfQwZ5R+yDQ7S90WrnPE5kIvDGIaLVsWQMYcBx18+udFKfzeg2zqfoOa8AW7HXFK+6gKEE= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1717771989; c=relaxed/simple; bh=NVd+zTYMoc6J2OMUcKwaZbTj/+f6TMT5UM+zc8YKt/w=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=B07gq3up0jCBPUPnknm+bEj+y8uqgWxmaSM2HEzKqiLCRxflPyOHcfjXsFpHjtaDKiwvDvgF8SK8ynvpVcZPv/8IMPEuiSwlV2P7pSM5EA/vm3jE0nHtwLLDvwzSLty40W9QviO6pAYPxwqy0A/D2EkIiGZVOVnllmP5EgjiEwI= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=rUa61FgN; arc=none smtp.client-ip=10.30.226.201 Received: by smtp.kernel.org (Postfix) with ESMTPS id 5D18CC4AF10; Fri, 7 Jun 2024 14:53:09 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1717771989; bh=NVd+zTYMoc6J2OMUcKwaZbTj/+f6TMT5UM+zc8YKt/w=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=rUa61FgNv5pJ14/LHxKtXfF8lpAdQrcAT9CN03pg7z8eBT/Vlg5fAlDoLEhtk1CjW vIrUs8q+4ZVykfrOdIG4iC7csGKP5ud+3UtFVU7YN04U5BBN5W/UYAMfxX0XpLMKKR hOSqzCfnI4YAPdPGZPyCKeQSKeTx8FlRHWb4DbzUw/goWHAeaoxpELyNz3YPijL/Gh n+SABBoNxYBwqCT1m05SbTSuvKJ21bWN9bE3cB6RK9hHCR5U3lzmpZHMwclamnkFUh KKR4l5wrmC0p8F5N/7QusRjPyyRWnWYlB3vaaaykaYfU/71ZX8snI4IcGstQwGRtwy YdnjZceYm7g7g== 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 53D7BC27C6E; Fri, 7 Jun 2024 14:53:09 +0000 (UTC) From: Dumitru Ceclan via B4 Relay Date: Fri, 07 Jun 2024 17:53:11 +0300 Subject: [PATCH v7 5/9] iio: adc: ad7173: refactor ain and vref selection 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: <20240607-ad4111-v7-5-97e3855900a0@analog.com> References: <20240607-ad4111-v7-0-97e3855900a0@analog.com> In-Reply-To: <20240607-ad4111-v7-0-97e3855900a0@analog.com> To: Ceclan Dumitru Cc: Lars-Peter Clausen , Michael Hennerich , Jonathan Cameron , Rob Herring , Krzysztof Kozlowski , Conor Dooley , David Lechner , linux-iio@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Dumitru Ceclan X-Mailer: b4 0.13.0 X-Developer-Signature: v=1; a=ed25519-sha256; t=1717771987; l=3945; i=dumitru.ceclan@analog.com; s=20240313; h=from:subject:message-id; bh=9f0Vi+E6u2sww3gPlgrOmpy9ZqM0gcSKGN10c+NtFoI=; b=kZtZkxMai7Y0H9SWUiz6HQMYgLCr0SyEjRVTuh8pDX9pkm5FCFEpcE76cK2wjA3TRv5HAYkE8 EJ8JzkNaJ5eDfEcQ8RBEP3QColjL9jMXh6Ot6eWG7v1qCDzB9ipGlhB X-Developer-Key: i=dumitru.ceclan@analog.com; a=ed25519; pk=HdqMlVyrcazwoiai7oN6ghU+Bj1pusGUFRl30jhS7Bo= X-Endpoint-Received: by B4 Relay for dumitru.ceclan@analog.com/20240313 with auth_id=140 X-Original-From: Dumitru Ceclan Reply-To: dumitru.ceclan@analog.com From: Dumitru Ceclan Move validation of analog inputs and reference voltage selection to separate functions to reduce the size of the channel config parsing function and improve readability. Add defines for the number of analog inputs in a channel. Signed-off-by: Dumitru Ceclan --- drivers/iio/adc/ad7173.c | 62 +++++++++++++++++++++++++++++++++--------------- 1 file changed, 43 insertions(+), 19 deletions(-) diff --git a/drivers/iio/adc/ad7173.c b/drivers/iio/adc/ad7173.c index 8631f218b69e..1257303b0cf6 100644 --- a/drivers/iio/adc/ad7173.c +++ b/drivers/iio/adc/ad7173.c @@ -60,6 +60,7 @@ #define AD7173_CH_SETUP_AINPOS_MASK GENMASK(9, 5) #define AD7173_CH_SETUP_AINNEG_MASK GENMASK(4, 0) +#define AD7173_NO_AINS_PER_CHANNEL 2 #define AD7173_CH_ADDRESS(pos, neg) \ (FIELD_PREP(AD7173_CH_SETUP_AINPOS_MASK, pos) | \ FIELD_PREP(AD7173_CH_SETUP_AINNEG_MASK, neg)) @@ -906,13 +907,48 @@ static int ad7173_register_clk_provider(struct iio_dev *indio_dev) &st->int_clk_hw); } +static int ad7173_validate_voltage_ain_inputs(struct ad7173_state *st, + unsigned int ain0, unsigned int ain1) +{ + struct device *dev = &st->sd.spi->dev; + + if (ain0 >= st->info->num_inputs || + ain1 >= st->info->num_inputs) + return dev_err_probe(dev, -EINVAL, + "Input pin number out of range for pair (%d %d).\n", + ain0, ain1); + + return 0; +} + +static int ad7173_validate_reference(struct ad7173_state *st, int ref_sel) +{ + struct device *dev = &st->sd.spi->dev; + int ret; + + if (ref_sel == AD7173_SETUP_REF_SEL_INT_REF && !st->info->has_int_ref) + return dev_err_probe(dev, -EINVAL, + "Internal reference is not available on current model.\n"); + + if (ref_sel == AD7173_SETUP_REF_SEL_EXT_REF2 && !st->info->has_ref2) + return dev_err_probe(dev, -EINVAL, + "External reference 2 is not available on current model.\n"); + + ret = ad7173_get_ref_voltage_milli(st, ref_sel); + if (ret < 0) + return dev_err_probe(dev, ret, "Cannot use reference %u\n", + ref_sel); + + return 0; +} + static int ad7173_fw_parse_channel_config(struct iio_dev *indio_dev) { struct ad7173_channel *chans_st_arr, *chan_st_priv; struct ad7173_state *st = iio_priv(indio_dev); struct device *dev = indio_dev->dev.parent; struct iio_chan_spec *chan_arr, *chan; - unsigned int ain[2], chan_index = 0; + unsigned int ain[AD7173_NO_AINS_PER_CHANNEL], chan_index = 0; int ref_sel, ret, num_channels; num_channels = device_get_child_node_count(dev); @@ -966,11 +1002,9 @@ static int ad7173_fw_parse_channel_config(struct iio_dev *indio_dev) if (ret) return ret; - if (ain[0] >= st->info->num_inputs || - ain[1] >= st->info->num_inputs) - return dev_err_probe(dev, -EINVAL, - "Input pin number out of range for pair (%d %d).\n", - ain[0], ain[1]); + ret = ad7173_validate_voltage_ain_inputs(st, ain[0], ain[1]); + if (ret) + return ret; ret = fwnode_property_match_property_string(child, "adi,reference-select", @@ -981,19 +1015,9 @@ static int ad7173_fw_parse_channel_config(struct iio_dev *indio_dev) else ref_sel = ret; - if (ref_sel == AD7173_SETUP_REF_SEL_INT_REF && - !st->info->has_int_ref) - return dev_err_probe(dev, -EINVAL, - "Internal reference is not available on current model.\n"); - - if (ref_sel == AD7173_SETUP_REF_SEL_EXT_REF2 && !st->info->has_ref2) - return dev_err_probe(dev, -EINVAL, - "External reference 2 is not available on current model.\n"); - - ret = ad7173_get_ref_voltage_milli(st, ref_sel); - if (ret < 0) - return dev_err_probe(dev, ret, - "Cannot use reference %u\n", ref_sel); + ret = ad7173_validate_reference(st, ref_sel); + if (ret) + return ret; if (ref_sel == AD7173_SETUP_REF_SEL_INT_REF) st->adc_mode |= AD7173_ADC_MODE_REF_EN; -- 2.43.0