From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 51E0AF9D0FB for ; Tue, 14 Apr 2026 22:43:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=Atp4lMX+KQb/XdR4N3FQnBkv+Ii6UBEhE3TAnqHAWWo=; b=at7PvVRbg6XDmdIGbQB/qcfdbW lUU8Wq1nzQW9aj7gthAjsT+aPy8FYY41UTF0etBWHuiZc7D5kj7Ok2RX359Tn5fubIdLdTfsmiqpn 9q5a7gNG2ULW/0Ei6becPrMZsq6jCOJoNlsT8dL5QQ7+gFqn76OMg5WjXT/cPxF2L2n3j5HYToo2W g9a9hRqaFSShEo54uGJa+APMsTInG7b2ek9UXiJLV/y8qIe4xLXesGvqkumTAk0I3Bg1GpUMgnD/7 dmCH61RzCQUEuFkthUjAC0Jzl6XLz4jQqx6P1fmRFAprebjIwKfcpHR2KGwiDV1H58QCN8TQKl66G XkXiucHw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1wCmTs-00000000IiZ-29Qd; Tue, 14 Apr 2026 22:43:40 +0000 Received: from mail-dl1-x1234.google.com ([2607:f8b0:4864:20::1234]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1wCmTq-00000000Ihj-1Zmc for linux-arm-kernel@lists.infradead.org; Tue, 14 Apr 2026 22:43:39 +0000 Received: by mail-dl1-x1234.google.com with SMTP id a92af1059eb24-12c55e3858cso3393398c88.0 for ; Tue, 14 Apr 2026 15:43:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=usp.br; s=usp-google; t=1776206617; x=1776811417; darn=lists.infradead.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=Atp4lMX+KQb/XdR4N3FQnBkv+Ii6UBEhE3TAnqHAWWo=; b=dB3h8c5WukZAweVoo1oru3JX41QE62I1s9L1WPQ5l8D+tVvyiWF4p7txnXXx7zfH5f xWqzD4Zy6v2OPLKeHx+JFVuKzkRcuoqMPUGtcOAuiG4peFvwWHrhGH5MCYKO6IXhvIiQ F7ZM8xcLg8ttxrFG4NwnuskXibhvVBFYAgPNROP6Swe/cVyczM2OUKXiG0doOGMNOhHI FlekHyB1hrNRIs6lIapRHgyzemZSeWam96D4r2ijVNtKO4kxNoHCU+FYDzxnGoZ+kixI RgJ4jsPWyPhMIh60RVVu5qZAmcVPb9sRprWfu3xMV+y8n95csLHROiLJ/v7CLIsxTNCx yAxA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776206617; x=1776811417; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=Atp4lMX+KQb/XdR4N3FQnBkv+Ii6UBEhE3TAnqHAWWo=; b=fow8y7CRuGC9IfwZPZeLgAYLft/okWfdTlAo1H8xYoAX2yGGl3sCMR75PyRHDeBjQG UOzOuAkSsKclC5OM5pm96m7D9CQFvXw5toGEERRXU+eKQRIZFKFzIRwQk01JbABybPnI ux0i3PSDh5u5rLtzXwecPQsYGTy+9tdSUyEGdRitJaLXKK+3JcQ2n0aecCfbd1tioPoe RBZfT6qkMurqOoPMugeVX22yneCLsAnbFhp49M7exEX0kjxmB0sXLyNXdXAYgQjHlxDT tsO0wdVUz1h+apyjlB0XXSMEWnJ2hCHg2rhnCXdPrP9KkGD2hXRo6FyREBiz1cQlP5TX ++/g== X-Forwarded-Encrypted: i=1; AFNElJ9fRT+7LZIWQgx7uSv9LA28GiCcxB2g+4RnWQti6ZOcKK0ysYa+mVea7Jl8B/JgChBrurAozSNhm56mOoqpCctS@lists.infradead.org X-Gm-Message-State: AOJu0YwjhD/iyamjz49P2P9qj/ixr/HmkkBczL3m/nw3BOzBNx33zD12 SmjC/J5+OfeLFqJNd5T+yAwoMF24sFj1QeQvS8o28AW3w3oPXBN6qkf7zCfJhrQnFO8= X-Gm-Gg: AeBDievyGAEeuGyCQEdbFHcuosyOBZQlfLDDxOQD3d+A7EJ9nSq8XZDbctIHvOjxbEj Ao41Q6j/7nVscvMcoH06b3s7CMIQE+aAIx8bTlWgkf8UEqfTzCkKq78seOSn3muCAbLFptRzaiW 3ryWSsRnI9XaGoKyd0m/BKbAKjVo4vOg7tDNGvLurAzIDzz7EmzFRc/wgnqujLg7ktsjs15d5C1 1YHk5GzKY1w5jzREtxyiUFHSIF+ptTQXOqaEGqR3Pgy4wtgpIYtQPL4l9MA7Y4PIoOmVQLPj2yi TIT+mxyUWK2iR5f1sIaU1bP0aGL/Um0tqMxwRLkUlzW6XcmfP5t4gvS9NYvbPmiOMJwTyHMKm4W 4qjxKw4NsaxlCy9IYL3lFre4/2JyF6sryPPNDi0vm+ScUtRuS7PrL2T2K5qFYNBQ6sgn4T7FVIT vHbGspJWFt4sxDsi0o2QpRP2xVUc1HyDWH3JAu3SJZHkwJ6mT9k8fOGB1x87UR1//i/8c/RWFD9 jtx9tPKljLAbzhXM8hCDBmJp0WNWQ2YITUBO2r+Ef2x5RsMLA== X-Received: by 2002:a05:7022:e1b:b0:128:d107:da0f with SMTP id a92af1059eb24-12c34ea9471mr11412638c88.10.1776206617403; Tue, 14 Apr 2026 15:43:37 -0700 (PDT) Received: from gui-host.Dlink ([177.33.104.190]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2dd32dc2827sm4650361eec.23.2026.04.14.15.43.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 14 Apr 2026 15:43:36 -0700 (PDT) From: Guilherme Ivo Bozi To: Salih Erim , Conall O'Griofa , Jonathan Cameron , Michal Simek Cc: David Lechner , =?UTF-8?q?Nuno=20S=C3=A1?= , Andy Shevchenko , linux-iio@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Guilherme Ivo Bozi Subject: [PATCH v3 3/3] iio: adc: xilinx-ams: refactor alarm mapping to table-driven approach Date: Tue, 14 Apr 2026 19:40:35 -0300 Message-ID: <20260414224245.8493-4-guilherme.bozi@usp.br> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260414224245.8493-1-guilherme.bozi@usp.br> References: <20260414224245.8493-1-guilherme.bozi@usp.br> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20260414_154338_417613_2DC95A38 X-CRM114-Status: GOOD ( 16.89 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Replace multiple open-coded switch statements that map between scan_index, alarm bits, and register offsets with a centralized table-driven approach. Introduce a struct-based alarm_map to describe the relationship between scan indices and alarm offsets, and add a helper to translate scan_index to event IDs. This removes duplicated logic across ams_get_alarm_offset(), ams_event_to_channel(), and ams_get_alarm_mask(). The new approach improves maintainability, reduces code size, and makes it easier to extend or modify alarm mappings in the future, while preserving existing behavior. Signed-off-by: Guilherme Ivo Bozi --- drivers/iio/adc/xilinx-ams.c | 161 +++++++++++++---------------------- 1 file changed, 58 insertions(+), 103 deletions(-) diff --git a/drivers/iio/adc/xilinx-ams.c b/drivers/iio/adc/xilinx-ams.c index 70a1f97f6dad..2ce78883cead 100644 --- a/drivers/iio/adc/xilinx-ams.c +++ b/drivers/iio/adc/xilinx-ams.c @@ -102,6 +102,7 @@ #define AMS_PS_SEQ_MASK GENMASK(21, 0) #define AMS_PL_SEQ_MASK GENMASK_ULL(59, 22) +#define AMS_ALARM_NONE 0x000 /* not a real offset */ #define AMS_ALARM_TEMP 0x140 #define AMS_ALARM_SUPPLY1 0x144 #define AMS_ALARM_SUPPLY2 0x148 @@ -763,9 +764,49 @@ static int ams_read_raw(struct iio_dev *indio_dev, } } +struct ams_alarm_map { + enum ams_ps_pl_seq scan_index; + unsigned int base_offset; +}; + +/* + * Array index matches enum ams_alarm_bit. + * Entries with base_offset == AMS_ALARM_NONE are unused/invalid + * (e.g. RESERVED) and must be skipped. + */ +static const struct ams_alarm_map alarm_map[] = { + [AMS_ALARM_BIT_TEMP] = { AMS_SEQ_TEMP, AMS_ALARM_TEMP }, + [AMS_ALARM_BIT_SUPPLY1] = { AMS_SEQ_SUPPLY1, AMS_ALARM_SUPPLY1 }, + [AMS_ALARM_BIT_SUPPLY2] = { AMS_SEQ_SUPPLY2, AMS_ALARM_SUPPLY2 }, + [AMS_ALARM_BIT_SUPPLY3] = { AMS_SEQ_SUPPLY3, AMS_ALARM_SUPPLY3 }, + [AMS_ALARM_BIT_SUPPLY4] = { AMS_SEQ_SUPPLY4, AMS_ALARM_SUPPLY4 }, + [AMS_ALARM_BIT_SUPPLY5] = { AMS_SEQ_SUPPLY5, AMS_ALARM_SUPPLY5 }, + [AMS_ALARM_BIT_SUPPLY6] = { AMS_SEQ_SUPPLY6, AMS_ALARM_SUPPLY6 }, + [AMS_ALARM_BIT_RESERVED] = { 0, AMS_ALARM_NONE }, + [AMS_ALARM_BIT_SUPPLY7] = { AMS_SEQ_SUPPLY7, AMS_ALARM_SUPPLY7 }, + [AMS_ALARM_BIT_SUPPLY8] = { AMS_SEQ_SUPPLY8, AMS_ALARM_SUPPLY8 }, + [AMS_ALARM_BIT_SUPPLY9] = { AMS_SEQ_SUPPLY9, AMS_ALARM_SUPPLY9 }, + [AMS_ALARM_BIT_SUPPLY10] = { AMS_SEQ_SUPPLY10, AMS_ALARM_SUPPLY10 }, + [AMS_ALARM_BIT_VCCAMS] = { AMS_SEQ_VCCAMS, AMS_ALARM_VCCAMS }, + [AMS_ALARM_BIT_TEMP_REMOTE] = { AMS_SEQ_TEMP_REMOTE, AMS_ALARM_TEMP_REMOTE }, +}; + +static int ams_scan_index_to_event(int scan_index) +{ + for (unsigned int i = 0; i < ARRAY_SIZE(alarm_map); i++) { + if (alarm_map[i].base_offset == AMS_ALARM_NONE) + continue; + + if (alarm_map[i].scan_index == scan_index) + return i; + } + + return -EINVAL; +} + static int ams_get_alarm_offset(int scan_index, enum iio_event_direction dir) { - int offset; + int offset, event; if (scan_index >= AMS_PS_SEQ_MAX) scan_index -= AMS_PS_SEQ_MAX; @@ -779,36 +820,11 @@ static int ams_get_alarm_offset(int scan_index, enum iio_event_direction dir) offset = 0; } - switch (scan_index) { - case AMS_SEQ_TEMP: - return AMS_ALARM_TEMP + offset; - case AMS_SEQ_SUPPLY1: - return AMS_ALARM_SUPPLY1 + offset; - case AMS_SEQ_SUPPLY2: - return AMS_ALARM_SUPPLY2 + offset; - case AMS_SEQ_SUPPLY3: - return AMS_ALARM_SUPPLY3 + offset; - case AMS_SEQ_SUPPLY4: - return AMS_ALARM_SUPPLY4 + offset; - case AMS_SEQ_SUPPLY5: - return AMS_ALARM_SUPPLY5 + offset; - case AMS_SEQ_SUPPLY6: - return AMS_ALARM_SUPPLY6 + offset; - case AMS_SEQ_SUPPLY7: - return AMS_ALARM_SUPPLY7 + offset; - case AMS_SEQ_SUPPLY8: - return AMS_ALARM_SUPPLY8 + offset; - case AMS_SEQ_SUPPLY9: - return AMS_ALARM_SUPPLY9 + offset; - case AMS_SEQ_SUPPLY10: - return AMS_ALARM_SUPPLY10 + offset; - case AMS_SEQ_VCCAMS: - return AMS_ALARM_VCCAMS + offset; - case AMS_SEQ_TEMP_REMOTE: - return AMS_ALARM_TEMP_REMOTE + offset; - default: + event = ams_scan_index_to_event(scan_index); + if (event < 0 || alarm_map[event].base_offset == AMS_ALARM_NONE) return 0; - } + + return alarm_map[event].base_offset + offset; } static const struct iio_chan_spec *ams_event_to_channel(struct iio_dev *dev, @@ -821,49 +837,13 @@ static const struct iio_chan_spec *ams_event_to_channel(struct iio_dev *dev, scan_index = AMS_PS_SEQ_MAX; } - switch (event) { - case AMS_ALARM_BIT_TEMP: - scan_index += AMS_SEQ_TEMP; - break; - case AMS_ALARM_BIT_SUPPLY1: - scan_index += AMS_SEQ_SUPPLY1; - break; - case AMS_ALARM_BIT_SUPPLY2: - scan_index += AMS_SEQ_SUPPLY2; - break; - case AMS_ALARM_BIT_SUPPLY3: - scan_index += AMS_SEQ_SUPPLY3; - break; - case AMS_ALARM_BIT_SUPPLY4: - scan_index += AMS_SEQ_SUPPLY4; - break; - case AMS_ALARM_BIT_SUPPLY5: - scan_index += AMS_SEQ_SUPPLY5; - break; - case AMS_ALARM_BIT_SUPPLY6: - scan_index += AMS_SEQ_SUPPLY6; - break; - case AMS_ALARM_BIT_SUPPLY7: - scan_index += AMS_SEQ_SUPPLY7; - break; - case AMS_ALARM_BIT_SUPPLY8: - scan_index += AMS_SEQ_SUPPLY8; - break; - case AMS_ALARM_BIT_SUPPLY9: - scan_index += AMS_SEQ_SUPPLY9; - break; - case AMS_ALARM_BIT_SUPPLY10: - scan_index += AMS_SEQ_SUPPLY10; - break; - case AMS_ALARM_BIT_VCCAMS: - scan_index += AMS_SEQ_VCCAMS; - break; - case AMS_ALARM_BIT_TEMP_REMOTE: - scan_index += AMS_SEQ_TEMP_REMOTE; - break; - default: - break; - } + if (event < 0 || event >= ARRAY_SIZE(alarm_map)) + return NULL; + + if (alarm_map[event].base_offset == AMS_ALARM_NONE) + return NULL; + + scan_index += alarm_map[event].scan_index; for (i = 0; i < dev->num_channels; i++) if (dev->channels[i].scan_index == scan_index) @@ -877,43 +857,18 @@ static const struct iio_chan_spec *ams_event_to_channel(struct iio_dev *dev, static int ams_get_alarm_mask(int scan_index) { - int bit = 0; + int bit = 0, event; if (scan_index >= AMS_PS_SEQ_MAX) { bit = AMS_PL_ALARM_START; scan_index -= AMS_PS_SEQ_MAX; } - switch (scan_index) { - case AMS_SEQ_TEMP: - return BIT(AMS_ALARM_BIT_TEMP + bit); - case AMS_SEQ_SUPPLY1: - return BIT(AMS_ALARM_BIT_SUPPLY1 + bit); - case AMS_SEQ_SUPPLY2: - return BIT(AMS_ALARM_BIT_SUPPLY2 + bit); - case AMS_SEQ_SUPPLY3: - return BIT(AMS_ALARM_BIT_SUPPLY3 + bit); - case AMS_SEQ_SUPPLY4: - return BIT(AMS_ALARM_BIT_SUPPLY4 + bit); - case AMS_SEQ_SUPPLY5: - return BIT(AMS_ALARM_BIT_SUPPLY5 + bit); - case AMS_SEQ_SUPPLY6: - return BIT(AMS_ALARM_BIT_SUPPLY6 + bit); - case AMS_SEQ_SUPPLY7: - return BIT(AMS_ALARM_BIT_SUPPLY7 + bit); - case AMS_SEQ_SUPPLY8: - return BIT(AMS_ALARM_BIT_SUPPLY8 + bit); - case AMS_SEQ_SUPPLY9: - return BIT(AMS_ALARM_BIT_SUPPLY9 + bit); - case AMS_SEQ_SUPPLY10: - return BIT(AMS_ALARM_BIT_SUPPLY10 + bit); - case AMS_SEQ_VCCAMS: - return BIT(AMS_ALARM_BIT_VCCAMS + bit); - case AMS_SEQ_TEMP_REMOTE: - return BIT(AMS_ALARM_BIT_TEMP_REMOTE + bit); - default: + event = ams_scan_index_to_event(scan_index); + if (event < 0) return 0; - } + + return BIT(event + bit); } static int ams_read_event_config(struct iio_dev *indio_dev, -- 2.47.3