From nobody Mon Jun 15 22:04:46 2026 Received: from mail-dy1-f179.google.com (mail-dy1-f179.google.com [74.125.82.179]) (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 710713C276E for ; Tue, 14 Apr 2026 09:30:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.179 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776159043; cv=none; b=ELNnsGFxQ4o3EAQ73tVfhRpWqWx8EP1m6RHR80Jb0kBIYmzs+VgY+HsKk2tvCH9FjglAq934i7ClLJC5ZffBBbDFQQ14wHK0BP4tE4gyT5rA+kJAZqi46QcCDy0v/60AF55iI7dCzZ/JnfRWRqmqfG/LhQV0iqz81N/H5RO+MZM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776159043; c=relaxed/simple; bh=VUfNPwGa2375crqZ/0zGkobnkQ0w09es8kbsRO8BuKc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=f2kZlIqapdL4ZQz3N+j8vctdUwNuM+td400dXXrrurlmbvwxopbJBw+gZ+dupUtN7SeDcRASlWzNcrAmwVypW8AObjtGirpMkrKKp656YFdUQRaSnslH3JnVWqKpZ+2h7+UHe6Rxtik3tDDWq/4zLhTouj9J5eVLLJakCydliA4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=usp.br; spf=pass smtp.mailfrom=usp.br; dkim=pass (2048-bit key) header.d=usp.br header.i=@usp.br header.b=hY/ybHz5; arc=none smtp.client-ip=74.125.82.179 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=usp.br Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=usp.br Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=usp.br header.i=@usp.br header.b="hY/ybHz5" Received: by mail-dy1-f179.google.com with SMTP id 5a478bee46e88-2d9916deb14so2751041eec.0 for ; Tue, 14 Apr 2026 02:30:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=usp.br; s=usp-google; t=1776159041; x=1776763841; 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=awUe3e2jpc4F1xQVkktJdoRgPIx6DXz98TwiAeCpRmw=; b=hY/ybHz5aUbZkp6F1pDKMrR9aEs3D1c1m5WEkqPYvHcdAe9V+kg4AoGw6kj/BkSAuy fYq+38pZ0gZF2GxiJ1J21oM1HdgBdAWTFYEx4HQ4HahsjqYvkZK7qancMZFIQOm5eVLG 0ix5sEYDhfq0g8ndm0eNsoTiTlBdetkNIVg8ZfKVtK9jGWIAqXxIopkCCcHQnZcGbZ9L 2Zy6djCnrYX9g2WgU/W41IMBle4QVbFCiacujWaM67agKzQ3QThZVw2W3rmeujmqIVc8 AhLcLb38zgFx+1mVpFWZDupGrXYyyyWcR6G7grNx9auSHCSl1gi7T7gF0jEwUH2d2QIj Zvrw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776159041; x=1776763841; 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=awUe3e2jpc4F1xQVkktJdoRgPIx6DXz98TwiAeCpRmw=; b=PpAu+ctGBETDfuIlIEbThHk7wvfNgngcIdDxCzPomc1wAux1wUH4BjThhPLJ2a8HIt FkF+bYij8jDK1RfIsfHA+i856iOLYLTRnIqAk50URqk4EQYvUkBTo01lXapWUhx9vB24 uf4I62VY/GaDQGl0Msh2fPokLufK1xGhSYFUJsMxHbcbBhnDMf6Ci6GbfFEmjfZ9nXkp KpihfHS0QYUK+opT/cu7rI/hhhVHVY99KTUgw7Nxik/uEvWwQ84x7iFdDJB0n2yN/qQw nxl75FzxlKSkMhKgh3yZGwm2ucuCkdn1H70O0EeSpiLMHl6LQ54/sMn9Jjf8Gun6707k 0L7Q== X-Forwarded-Encrypted: i=1; AFNElJ9ZsIt99g4EhFJQEKmN1Xir6iJ6Zm1oA5LTuNEMlGxI13ytXJURSp7qTvejDVyhjVVAAcdxODmmFj2Nl3o=@vger.kernel.org X-Gm-Message-State: AOJu0YwzwWDkyGO2jget1mOksU8EFuhtW/yH4rXw7rVgzDvovB2JRQJy ASDwB/Mb7FIQrv7Y0V41mLw5CG1q3vUGd2H6Nk2KAyzjBKNIi+kmj2u93nhVft4qFFk= X-Gm-Gg: AeBDieuxnT9U4Zk1+JB9X74/Te6Fws8SM036/x3ajk0LOKw+GpknLFHIu1A4gAeTpkV XPiKw4y4tYQqREEDMv9LAz76srdwNUAgvZOVXUzukyFFhKQsmQLecsGDG1EVZKrcC47aWnbNGij dVUh05UU8xjqA/cWD8l9pT/dvCDoc/2MIyMx1VBru2GVeSSGTXohh+KPCdxvKZtuCmumc0vj914 OuE0dJlLqtdQAJbw5eCWAjIayuVWHGjk6Zm8FG/j3jbl/EFQIMjlcwmmGYL1cn1StjVAeD98kyb OpCAZsSOptcsIF381Hoop9nogXCSTGQmBWg3gvsEqgDsXQyXAy6B0Sd4PpPoe+AJV0/M6XGbODm VqRU36NGx3K2NVzSOFJvadgqUMGcpxL1j2s1Kp7X3gh0ke2A8vQatHb0yCiIKEnEAVpXNaDLw6I wKXf2cOJSvUupq4vvlpeomScp7T+8C++v3nhmCMPMlEacoRQPbBv1e6+TNZa2YMgrEmOTX1uBhh uDimInV15JbFguxdYunQLhi+0JjERxvmFNXrlOtkgfpphRh1g== X-Received: by 2002:a05:693c:26c2:b0:2d8:7302:d21 with SMTP id 5a478bee46e88-2d8730215b3mr3347154eec.16.1776159040566; Tue, 14 Apr 2026 02:30:40 -0700 (PDT) Received: from gui-host.Dlink ([177.33.104.190]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2d562db6ac8sm20327599eec.26.2026.04.14.02.30.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 14 Apr 2026 02:30:40 -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 1/3] iio: adc: xilinx-ams: fix out-of-bounds channel lookup in event handling Date: Tue, 14 Apr 2026 06:29:28 -0300 Message-ID: <20260414093018.7153-2-guilherme.bozi@usp.br> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260414093018.7153-1-guilherme.bozi@usp.br> References: <20260414093018.7153-1-guilherme.bozi@usp.br> 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" ams_event_to_channel() may return a pointer past the end of dev->channels when no matching scan_index is found. This can lead to invalid memory access in ams_handle_event(). Add a bounds check in ams_event_to_channel() and return NULL when no channel is found. Also guard the caller to safely handle this case. Fixes: Signed-off-by: Guilherme Ivo Bozi --- drivers/iio/adc/xilinx-ams.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/drivers/iio/adc/xilinx-ams.c b/drivers/iio/adc/xilinx-ams.c index 124470c92529..f364e69a5a0d 100644 --- a/drivers/iio/adc/xilinx-ams.c +++ b/drivers/iio/adc/xilinx-ams.c @@ -871,6 +871,9 @@ static const struct iio_chan_spec *ams_event_to_channel= (struct iio_dev *dev, if (dev->channels[i].scan_index =3D=3D scan_index) break; =20 + if (i >=3D dev->num_channels) + return NULL; + return &dev->channels[i]; } =20 @@ -1012,6 +1015,8 @@ static void ams_handle_event(struct iio_dev *indio_de= v, u32 event) const struct iio_chan_spec *chan; =20 chan =3D ams_event_to_channel(indio_dev, event); + if (!chan) + return; =20 if (chan->type =3D=3D IIO_TEMP) { /* --=20 2.47.3 From nobody Mon Jun 15 22:04:46 2026 Received: from mail-dy1-f176.google.com (mail-dy1-f176.google.com [74.125.82.176]) (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 07A1D29A9C3 for ; Tue, 14 Apr 2026 09:30:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.176 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776159052; cv=none; b=ZkGTxP4O/qySQ+QT0cpTRj7vr2kcuoBgT6cPdY6iY+zZTkgEdEEl5lETlt+oQcf6A11KNIWJNNX8vpwi4FLjf0ASpCMvD+5uJ5OAIdgU6oqGSNogxZL9/4pgCQCA2Feg6DV3/p3nMZr7MHf8+X5dfrxfgGWh4oeZwZx9AJCghwo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776159052; c=relaxed/simple; bh=ciCdlj7lgbV7krZc3z8m96MIDYD6GXqu6aRPf9fyf7M=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=bFXz+LfSTH8KVnX1G0stILbtj955UbqiuRxX7RAwgV2xbe8n90soK1tpgp3yG8ubolTNXG2NPcOFD5pj/wfWbfwDnQc1qJ44Arx1YZugskTntibaLduKEi3w0M/C7Tz6FzZh6Jcrz3GvFEwquMDZNrulJgJVQ6S9kiVZNWT2pdc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=usp.br; spf=pass smtp.mailfrom=usp.br; dkim=pass (2048-bit key) header.d=usp.br header.i=@usp.br header.b=vLwzJ4+H; arc=none smtp.client-ip=74.125.82.176 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=usp.br Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=usp.br Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=usp.br header.i=@usp.br header.b="vLwzJ4+H" Received: by mail-dy1-f176.google.com with SMTP id 5a478bee46e88-2c15849aa2cso6182526eec.0 for ; Tue, 14 Apr 2026 02:30:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=usp.br; s=usp-google; t=1776159050; x=1776763850; 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=HLYpSTtxjJcxt6f4zYCIirPQgRpG54kMZdNT9vSr7Io=; b=vLwzJ4+HT6e1LhrAxMYa1soTBcnzOLR8RTzyDUWGfXoRIE3WyQh/1Vsz8CgoGnCmZN 2elKQkshIaOwt0D+qSkH/ITpamlHTe4bUHmbSH6ilOnTXMz2HxnfiDI/LkjXt6NcEZWZ JJTtLax4LKZWEXmYeYPS4lJhKJZUPuHpqPG7VnNYsrUYilLZrQZt/piH8nhHFygNgL7p OVlJQ3qHVIp3/CLjuPzN0zq4LJMbpsxO/fK/K22BPOvCkhPye0Df7DCT7dvx2UlcQW7u p9fUhpw9FcHIrrmDd9jrd9oR84WJdUtmBQKpNHbjWmrMRzGnxrSBnzZKJAhSRLg4HmZi 4i6w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776159050; x=1776763850; 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=HLYpSTtxjJcxt6f4zYCIirPQgRpG54kMZdNT9vSr7Io=; b=UEdeBgBWOqun+y9EeNYEquw7zmVQ63zil48/6JM7Vlwr1iZSZUQpcfu4wLxLc78x8Z I4hoOGYI+jYZkFm29LtwcogJJd60eG88n7MGwYXmvziWy3usvqGgdpi08QCIoo1JLkZ1 HTqHFSEeCTUbKFFj23K2M2Rm+tV/LQbi0LmX8vkJMtPXecgOGeCkXyj22vKGKPCCzceq qDKExna8XPlanTjZ6Qbu6+x/AcftTuANmt6gRQuF3wcuFok8VooWH78Ku/Rq15qKFyxq BB/jk8qlvNVzBDRgPjZbjYDINAfT66vIYeZk/JaoVTorGc5I1lqXPD9rYXeI6DG1z3ct gmQA== X-Forwarded-Encrypted: i=1; AFNElJ/sw7MbQCX3TS6Y+2mHzyMrGnmc8/pqXOWNKfOhWAAqvgrGn9jEH+YF/RJEtPOoBxnSJ72xurSDQFjR/Y8=@vger.kernel.org X-Gm-Message-State: AOJu0Yx2R6FUD9nmV4+bjH5Pm82+keVyfM6JxAK4+AOKdjAeSut90Vif cFHXN4pSaoqBV+K5xDvkEJaRm12mkV6BPS16cpCZx3jPgpDbNvXXk5YkHFH1Y3lZ483EcxsWQOl 9e2KgVhx1nQ== X-Gm-Gg: AeBDietFLS9wLMU3NRiz/4IDsrNmKj3GSVmpWf1si6C2Eb+nkrrxTNOQnbnvjy5i/bS WfD5N0uGzTCtT7CE9b13+i0w9srq+NNalMnGNW+EPzJPAsUmaTWHakf9/xFhwFtC5zj8vRRCQiE AXNBQci3ZQLJglcUqTs5w3BnZPyiLIcCuurMS6HnjWj6WO7Zpg9UlsGBoEn2oyWYVa2U7Hveh5h FOfc//DS+fRRQHDo/GXCxAHGGaEpy+L1sZ9VQM+YqHA35A1buGILVV1R2BZT374UA7vANzk1QzN T32fUiCmImQdO1DVzoTBR+RFKUNl1DMZCMst4Hog899aDBzCR3GCUG/Z0sbMv15I05xSlXxYnHQ MzFzCpxYmXE+CuzrcvMOtBP0m/mSfjV7olJugZ6CjR1QfDHDEicFL2rKHDs3RmDfP6OMaJQDjby +1TACbgaRHEGkCLHdYWN1VztbKZ1Tj2wn39e99BmxaoBfbE0RY47/VCXoEc121VXAGejG9uALlr mqbAUBaEzuzQL7WXMmEtQj201k3Oz/Hx3CuutV8+gFdfFVjqA== X-Received: by 2002:a05:7300:2156:b0:2d1:d434:d022 with SMTP id 5a478bee46e88-2d5832e2f63mr9521823eec.0.1776159050147; Tue, 14 Apr 2026 02:30:50 -0700 (PDT) Received: from gui-host.Dlink ([177.33.104.190]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2d562db6ac8sm20327599eec.26.2026.04.14.02.30.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 14 Apr 2026 02:30:49 -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 2/3] iio: adc: xilinx-ams: use guard(mutex) for automatic locking Date: Tue, 14 Apr 2026 06:29:29 -0300 Message-ID: <20260414093018.7153-3-guilherme.bozi@usp.br> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260414093018.7153-1-guilherme.bozi@usp.br> References: <20260414093018.7153-1-guilherme.bozi@usp.br> 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" Replace open-coded mutex_lock()/mutex_unlock() pairs with guard(mutex) to simplify locking and ensure proper unlock on all control flow paths. This removes explicit unlock handling, reduces boilerplate, and avoids potential mistakes in error paths while keeping the behavior unchanged. Signed-off-by: Guilherme Ivo Bozi Reviewed-by: Andy Shevchenko --- drivers/iio/adc/xilinx-ams.c | 24 ++++++++---------------- 1 file changed, 8 insertions(+), 16 deletions(-) diff --git a/drivers/iio/adc/xilinx-ams.c b/drivers/iio/adc/xilinx-ams.c index f364e69a5a0d..1d84310b61a9 100644 --- a/drivers/iio/adc/xilinx-ams.c +++ b/drivers/iio/adc/xilinx-ams.c @@ -720,22 +720,20 @@ static int ams_read_raw(struct iio_dev *indio_dev, int ret; =20 switch (mask) { - case IIO_CHAN_INFO_RAW: - mutex_lock(&ams->lock); + case IIO_CHAN_INFO_RAW: { + guard(mutex)(&ams->lock); if (chan->scan_index >=3D AMS_CTRL_SEQ_BASE) { ret =3D ams_read_vcc_reg(ams, chan->address, val); if (ret) - goto unlock_mutex; + return ret; ams_enable_channel_sequence(indio_dev); } else if (chan->scan_index >=3D AMS_PS_SEQ_MAX) *val =3D readl(ams->pl_base + chan->address); else *val =3D readl(ams->ps_base + chan->address); =20 - ret =3D IIO_VAL_INT; -unlock_mutex: - mutex_unlock(&ams->lock); - return ret; + return IIO_VAL_INT; + } case IIO_CHAN_INFO_SCALE: switch (chan->type) { case IIO_VOLTAGE: @@ -939,7 +937,7 @@ static int ams_write_event_config(struct iio_dev *indio= _dev, =20 alarm =3D ams_get_alarm_mask(chan->scan_index); =20 - mutex_lock(&ams->lock); + guard(mutex)(&ams->lock); =20 if (state) ams->alarm_mask |=3D alarm; @@ -948,8 +946,6 @@ static int ams_write_event_config(struct iio_dev *indio= _dev, =20 ams_update_alarm(ams, ams->alarm_mask); =20 - mutex_unlock(&ams->lock); - return 0; } =20 @@ -962,15 +958,13 @@ static int ams_read_event_value(struct iio_dev *indio= _dev, struct ams *ams =3D iio_priv(indio_dev); unsigned int offset =3D ams_get_alarm_offset(chan->scan_index, dir); =20 - mutex_lock(&ams->lock); + guard(mutex)(&ams->lock); =20 if (chan->scan_index >=3D AMS_PS_SEQ_MAX) *val =3D readl(ams->pl_base + offset); else *val =3D readl(ams->ps_base + offset); =20 - mutex_unlock(&ams->lock); - return IIO_VAL_INT; } =20 @@ -983,7 +977,7 @@ static int ams_write_event_value(struct iio_dev *indio_= dev, struct ams *ams =3D iio_priv(indio_dev); unsigned int offset; =20 - mutex_lock(&ams->lock); + guard(mutex)(&ams->lock); =20 /* Set temperature channel threshold to direct threshold */ if (chan->type =3D=3D IIO_TEMP) { @@ -1005,8 +999,6 @@ static int ams_write_event_value(struct iio_dev *indio= _dev, else writel(val, ams->ps_base + offset); =20 - mutex_unlock(&ams->lock); - return 0; } =20 --=20 2.47.3 From nobody Mon Jun 15 22:04:46 2026 Received: from mail-dy1-f175.google.com (mail-dy1-f175.google.com [74.125.82.175]) (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 AF8CF3C141F for ; Tue, 14 Apr 2026 09:30:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.175 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776159058; cv=none; b=oMrK1ei9MmKiOmpjPVOWzTTWOVhI2QOrZvZOQMRqOrJRqVDMF3/6jgIb7xzxxWd7YvOWlisn+NgSpKWyllaAHtkl0e4EL99eMYyxhD0WZn+d+sBkMBIuYhMsKRI0lF3ZtQC/0IP/xqAFLJCnVuukemf9V8rkwj3q7JD3QrUyxKo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776159058; c=relaxed/simple; bh=BA7Y5tKCVZ4zvqm4akemcm6zExdZBDVPqGIUotLV504=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=FIVo1kvFXQNPixwWP/lfpn6jOTqpWS9Snfe0a/YbKXwQPioo2/G/MW/ikQAOcV0235eNj2LAiUIBfl9xuv3KZy51Z55RmwC85a6K0aXtlXidqb1PTPIfYmTsXOXjCPP9Ng1JWf0HgbchrbDGed/H/Csge+5yATwoXYiPM/Uh7ZA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=usp.br; spf=pass smtp.mailfrom=usp.br; dkim=pass (2048-bit key) header.d=usp.br header.i=@usp.br header.b=C5eGfM48; arc=none smtp.client-ip=74.125.82.175 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=usp.br Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=usp.br Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=usp.br header.i=@usp.br header.b="C5eGfM48" Received: by mail-dy1-f175.google.com with SMTP id 5a478bee46e88-2b4520f6b32so5735458eec.0 for ; Tue, 14 Apr 2026 02:30:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=usp.br; s=usp-google; t=1776159056; x=1776763856; 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=oaFMZ05oqoCy3XWg3+SgdosFrFG8OPbj74rwzw8gq5o=; b=C5eGfM48FlnOZad5MANf2KeqdTbMh13IPRXWo2F79HMV9KEzg2YmbNYZoylSDvscnJ YuzMjpDg24tzLmaVXQ2x8ve3vcAxpVsmqphxppqt+lu088FmYWZQc9xfzf6zPSmi9uXn 3ymRf8yBsA9ftepTdzRZyDijhNjKlTzpykGFXk6CV92Gzwr/Gs1At0+5YaeY80v+3lzV X1SXf7q+xmt5DJwgIWxcPiktTOuF4TRTWda8gxddksp8r23i7QmpSINFHXI0jVDy0Am0 KF/lQSnVlq+iO9Kyc9yMy+J4DErMSL2g9nA16wp2SeE0SuhXvbn7cbN+u5GHYn/GNGKB bJ3g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776159056; x=1776763856; 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=oaFMZ05oqoCy3XWg3+SgdosFrFG8OPbj74rwzw8gq5o=; b=PKN2WEhcvvjDgwZX1M+HcrLFLF8lRLuWrkP+SpgDTAQqzl1ObsQut5pCK9MOcFoi5N qMK5BjDF/SBCx8XUlKaO/mp9HhsLz0rP/HZ0NY6Ij15PXjVGZxU5RtW0oMdgcTiy14LO XOsR+atpMnuEQtTKu+oGron+TvGugtZmwuDu4WvpP/ymSc8dp52dzYC77KesgUUMWW1P gkk/m+s2x+CXoPytwKPNvRKgdP9d+mdtNQxNX9a9Zjs8FV9EVQwvSyT4Pjntz89VMmNr DwTKpKz7RxDsGtULzvZRij6RUXs1kQBxs2N2+53gRK+8h1nRYYmfplucxWgDPdgFet9k Mp3Q== X-Forwarded-Encrypted: i=1; AFNElJ/nY6gqVAW1AoZqbdadvFXZ6Z4qbU5bwgGwUPf7DXHtxw7JNLhy/rbI+yyDzJsIhL1b2otzgYtx35rB76k=@vger.kernel.org X-Gm-Message-State: AOJu0Yx0S1oFwTreHmYrVR262km5Nh6aQhTcwnJ5Hi41VIACTDAa5XU5 W4Z5VY/43l1HtPeqTvOhxfBs9xTIX+IoDHj7heFQEsaM3LHsW7YAZa8AqQcZYytebAY= X-Gm-Gg: AeBDieu/QGaStrPvWDpz/B4EexsOSugYemQG0BaiuH6v83wx/Z67zCkNbnIU0r9I4KU YZb9RX0XnZpMIzy5algJ+ga1MTKKynqYnD46J+SjldWd7vS/lcgHeaNvTsbzMOuqR8hYG+BHf7j hCPt58YvRVKG3gGizb3EnKY7p1FT1bsi6JmyxOw3mDxAlThH2lCKILAlDO9gfyoc6wptwJp84ju bprvvWgDoHpvNG60YtBZXvWAuLiO2/Xd1g/novPkBKBojwiN7O7AL2NyJUAB0fytsqW74UZ3JVY lBHcEuhXd7I/RdbTfyxUlrqKGNAfiaxIIoZuGVYfXBDuazzHqHwuDwaahXdnEn+Umaytl6n55Sa 6W7k60wIrHfxHK0XYFFIOycwdlpnGpJMgXRVJPCyg9Pvhor/EfcT55nQ6gvIOoYCnxgWs4gCjFf dR1tR9jxkkulEoffQc5m+Bz8tpIumEO4j5Md7AiwAh4+BBhByzQfzNt1ztZz0z72q5xVNdkx+va 2qeyBR+v5tMF/wZazxwrgCqcyNDpO1uihv85WZGSJ6K366ISyRoC4RSo3rr X-Received: by 2002:a05:7300:6d05:b0:2dd:8ac2:9f7a with SMTP id 5a478bee46e88-2dd8ac2d269mr350220eec.11.1776159055830; Tue, 14 Apr 2026 02:30:55 -0700 (PDT) Received: from gui-host.Dlink ([177.33.104.190]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2d562db6ac8sm20327599eec.26.2026.04.14.02.30.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 14 Apr 2026 02:30:55 -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 3/3] iio: adc: xilinx-ams: refactor alarm mapping to table-driven approach Date: Tue, 14 Apr 2026 06:29:30 -0300 Message-ID: <20260414093018.7153-4-guilherme.bozi@usp.br> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260414093018.7153-1-guilherme.bozi@usp.br> References: <20260414093018.7153-1-guilherme.bozi@usp.br> 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" 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 | 163 +++++++++++++---------------------- 1 file changed, 60 insertions(+), 103 deletions(-) diff --git a/drivers/iio/adc/xilinx-ams.c b/drivers/iio/adc/xilinx-ams.c index 1d84310b61a9..d5ed2e787641 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) =20 +#define AMS_ALARM_INVALID -1 #define AMS_ALARM_TEMP 0x140 #define AMS_ALARM_SUPPLY1 0x144 #define AMS_ALARM_SUPPLY2 0x148 @@ -763,9 +764,51 @@ static int ams_read_raw(struct iio_dev *indio_dev, } } =20 +struct ams_alarm_map { + enum ams_ps_pl_seq scan_index; + int base_offset; +}; + +/* + * Array index matches enum ams_alarm_bit. + * Entries with base_offset =3D=3D AMS_ALARM_INVALID are unused/invalid + * (e.g. RESERVED) and must be skipped. + */ +static const struct ams_alarm_map alarm_map[] =3D { + [AMS_ALARM_BIT_TEMP] =3D { AMS_SEQ_TEMP, AMS_ALARM_TEMP }, + [AMS_ALARM_BIT_SUPPLY1] =3D { AMS_SEQ_SUPPLY1, AMS_ALARM_SUPPLY1 }, + [AMS_ALARM_BIT_SUPPLY2] =3D { AMS_SEQ_SUPPLY2, AMS_ALARM_SUPPLY2 }, + [AMS_ALARM_BIT_SUPPLY3] =3D { AMS_SEQ_SUPPLY3, AMS_ALARM_SUPPLY3 }, + [AMS_ALARM_BIT_SUPPLY4] =3D { AMS_SEQ_SUPPLY4, AMS_ALARM_SUPPLY4 }, + [AMS_ALARM_BIT_SUPPLY5] =3D { AMS_SEQ_SUPPLY5, AMS_ALARM_SUPPLY5 }, + [AMS_ALARM_BIT_SUPPLY6] =3D { AMS_SEQ_SUPPLY6, AMS_ALARM_SUPPLY6 }, + [AMS_ALARM_BIT_RESERVED] =3D { 0, AMS_ALARM_INVALID }, + [AMS_ALARM_BIT_SUPPLY7] =3D { AMS_SEQ_SUPPLY7, AMS_ALARM_SUPPLY7 }, + [AMS_ALARM_BIT_SUPPLY8] =3D { AMS_SEQ_SUPPLY8, AMS_ALARM_SUPPLY8 }, + [AMS_ALARM_BIT_SUPPLY9] =3D { AMS_SEQ_SUPPLY9, AMS_ALARM_SUPPLY9 }, + [AMS_ALARM_BIT_SUPPLY10] =3D { AMS_SEQ_SUPPLY10, AMS_ALARM_SUPPLY10 }, + [AMS_ALARM_BIT_VCCAMS] =3D { AMS_SEQ_VCCAMS, AMS_ALARM_VCCAMS }, + [AMS_ALARM_BIT_TEMP_REMOTE] =3D { AMS_SEQ_TEMP_REMOTE, AMS_ALARM_TEMP_REM= OTE } +}; + +static int ams_scan_index_to_event(int scan_index) +{ + int i; + + for (i =3D 0; i < ARRAY_SIZE(alarm_map); i++) { + if (alarm_map[i].base_offset =3D=3D AMS_ALARM_INVALID) + continue; + + if (alarm_map[i].scan_index =3D=3D scan_index) + return i; + } + + return -EINVAL; +} + static int ams_get_alarm_offset(int scan_index, enum iio_event_direction d= ir) { - int offset; + int offset, event; =20 if (scan_index >=3D AMS_PS_SEQ_MAX) scan_index -=3D AMS_PS_SEQ_MAX; @@ -779,36 +822,11 @@ static int ams_get_alarm_offset(int scan_index, enum = iio_event_direction dir) offset =3D 0; } =20 - 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 =3D ams_scan_index_to_event(scan_index); + if (event < 0 || alarm_map[event].base_offset =3D=3D AMS_ALARM_INVALID) return 0; - } + + return alarm_map[event].base_offset + offset; } =20 static const struct iio_chan_spec *ams_event_to_channel(struct iio_dev *de= v, @@ -821,49 +839,13 @@ static const struct iio_chan_spec *ams_event_to_chann= el(struct iio_dev *dev, scan_index =3D AMS_PS_SEQ_MAX; } =20 - switch (event) { - case AMS_ALARM_BIT_TEMP: - scan_index +=3D AMS_SEQ_TEMP; - break; - case AMS_ALARM_BIT_SUPPLY1: - scan_index +=3D AMS_SEQ_SUPPLY1; - break; - case AMS_ALARM_BIT_SUPPLY2: - scan_index +=3D AMS_SEQ_SUPPLY2; - break; - case AMS_ALARM_BIT_SUPPLY3: - scan_index +=3D AMS_SEQ_SUPPLY3; - break; - case AMS_ALARM_BIT_SUPPLY4: - scan_index +=3D AMS_SEQ_SUPPLY4; - break; - case AMS_ALARM_BIT_SUPPLY5: - scan_index +=3D AMS_SEQ_SUPPLY5; - break; - case AMS_ALARM_BIT_SUPPLY6: - scan_index +=3D AMS_SEQ_SUPPLY6; - break; - case AMS_ALARM_BIT_SUPPLY7: - scan_index +=3D AMS_SEQ_SUPPLY7; - break; - case AMS_ALARM_BIT_SUPPLY8: - scan_index +=3D AMS_SEQ_SUPPLY8; - break; - case AMS_ALARM_BIT_SUPPLY9: - scan_index +=3D AMS_SEQ_SUPPLY9; - break; - case AMS_ALARM_BIT_SUPPLY10: - scan_index +=3D AMS_SEQ_SUPPLY10; - break; - case AMS_ALARM_BIT_VCCAMS: - scan_index +=3D AMS_SEQ_VCCAMS; - break; - case AMS_ALARM_BIT_TEMP_REMOTE: - scan_index +=3D AMS_SEQ_TEMP_REMOTE; - break; - default: - break; - } + if (event < 0 || event >=3D ARRAY_SIZE(alarm_map)) + return NULL; + + if (alarm_map[event].base_offset =3D=3D AMS_ALARM_INVALID) + return NULL; + + scan_index +=3D alarm_map[event].scan_index; =20 for (i =3D 0; i < dev->num_channels; i++) if (dev->channels[i].scan_index =3D=3D scan_index) @@ -877,43 +859,18 @@ static const struct iio_chan_spec *ams_event_to_chann= el(struct iio_dev *dev, =20 static int ams_get_alarm_mask(int scan_index) { - int bit =3D 0; + int bit =3D 0, event; =20 if (scan_index >=3D AMS_PS_SEQ_MAX) { bit =3D AMS_PL_ALARM_START; scan_index -=3D AMS_PS_SEQ_MAX; } =20 - 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 =3D ams_scan_index_to_event(scan_index); + if (event < 0) return 0; - } + + return BIT(event + bit); } =20 static int ams_read_event_config(struct iio_dev *indio_dev, --=20 2.47.3