From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-wr1-f46.google.com (mail-wr1-f46.google.com [209.85.221.46]) (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 1250240F726 for ; Mon, 3 Aug 2026 13:44:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.46 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785764650; cv=none; b=Ahd+mK6d5f6vu7A2pslutFRgD3up0nlMWXlMs0aXESbifQNpvefisM4SFmD0e8Nos9EWJ2PUjuJm2l3otkCHT1fLGLfQ7+0plzmuexe3Bldko/0o3XbB0woHVSm+IKDzF5OF5kbqNUcGpW+pQ4WGSV0Uh384nEquAdSgc7NSjI4= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785764650; c=relaxed/simple; bh=YM8dfmlqxShxjvZGqRGiSNpTyF4I8DQHGxMXfAniN4Y=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=I/HkW6tAi/ZfupNB4b8TLnSxzzsa0a2I5ZldOQiro7cuVaANgTmtQIuVF0Mqx3MhxEKadonqtCGCE+NTH1dbE/qqU4Ti88yqDz1HYn9trr4Yy7+9Vp0Rx7nUxJIs9TV+aNaBlMh/Kr6eXssW4mTs0frYonLDdwn3IWR7HwgCGAU= 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=k63liqe2; arc=none smtp.client-ip=209.85.221.46 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="k63liqe2" Received: by mail-wr1-f46.google.com with SMTP id ffacd0b85a97d-47f84023916so3414052f8f.3 for ; Mon, 03 Aug 2026 06:44:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1785764645; x=1786369445; 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:content-type; bh=kDNUtFHnwjFHImwGnadLZYX2nGq1XShrI3jQKtCkmMY=; b=k63liqe26Fl8IPI3al0/6RKdWIV3N+CUBv5PvQQ1u8xlHB5hFfnW02YYzaQS6yX0v1 F7sQbslg0bM7DPqAaVedo3cKXtAf+trRfJz7xOfvb3ww731k77R794XbLoZedyaZ5vzt Lfi3tfM2PyZ6BzrClhYe4FbfhMa17pZWoFy7Vz4ENpi+PNUsnTvq1ah8cazYICd61zQD oN4q5dAeLH7pCdtvILvqY4t0oTMuFWIev2Dt9QmDnso1mwKyw9EmEO/I0ODsmlmovHtC pn5mPm0YK2s0+b2kquLA2EDhGesfgghh4+bzvkMqUi/UgLP33Jvtvuz3e2grp2eeFtIe Xj4g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785764645; x=1786369445; 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:content-type; bh=kDNUtFHnwjFHImwGnadLZYX2nGq1XShrI3jQKtCkmMY=; b=Sgyx4jF1V0tjVF3J8YMu0ZfwDeRKffIyCaYqMlocCJkmn6ahDjc+RmNgMIF5OtVuSl ERtMGBzSPzymBqUGagdXKGYfgiwJaAUSudI8u3ANkOM/SPraUZCCvRURrTU3RJ1TyrWn 5RKlPuE7o9Oy1PMBsQL7CWwQNPLEubuoI2b7PGBF7ZCIiO9owJLuE1v5sCufc30NsxFO K/omv4hwgGerjYhFz+UCbS4ZryKuDu7KkhwvV+qVEsXjo94y+Y1b+lPPb8PfwDzdN1a8 jKfvuIb9uxrF96MSiNXoj96YwUeNgtlnQMS2N3ZKGcqdz0ED5VU/2WmEV6qVJu0y7SUQ /3Pg== X-Forwarded-Encrypted: i=1; AHgh+Rplh9vIxulk9ibHdYwJFnwv7ZflC7TI6HUYuEYi6hJOxo1wKcVT0gkBB72pk8f/iDRzgSrOWK9WZqdQrjM=@vger.kernel.org X-Gm-Message-State: AOJu0YzbFrOsQzByJatDA8dZvjVMfsvb790rvcfJ2mopRWERlUps8K96 Vgvti9VqzrDMM9D+aykBq+yoFC4NQG6kQyA42UYDWt7966axtoIFHXbq9jQDAg== X-Gm-Gg: AR+sD11afJe+q397XAsaP8KwLTZ271SXqqo03bdVKv3nFSX4mQD+gtrt7du/FSXFIi+ dK1jB1inWJGcuDx8eYy825g25XFzuGgewpQ6kc1vKaU0VicEBq2ebmzhNzSOfCErfTGD8oeAJEz rB19EBtTag8YLCUB+TB57DolU1YgFMcJ5YfBGUCbUb2DZh+0Sm4QujqGygCfMFSTEnItx4mm4wq OJOKK81jbmLifb4fvqUr3tHJLlrosIKXW3H34/75UCh7rBGnAeqtP2pRIlYMiNNG+gdYVrW1nV9 vrWJfu2+zQ9DHvgV3Y1HK8QrLGD9FLg4kH8Jd2PsX+yFzBvv07dZJrVpbWNgbgKSH0N8j47K8Yp XBDjE/j5jHPP9gdJ8FIdfiF1kxhuAyRLWzqIjVHpJoTOAzgeVzdEx5djepy967ETX5Chwqvr8dZ hUHKAaa94BSAnvOoXF0QZeXPETUDjLeHodaCR+H6ihamJRuLysyhKJiJ/tvh4n9IS5rm/bWEj16 ZKBUXNIDg== X-Received: by 2002:a05:6000:2087:b0:47d:ea8a:d211 with SMTP id ffacd0b85a97d-47fd9f93ed8mr23273896f8f.29.1785764645563; Mon, 03 Aug 2026 06:44:05 -0700 (PDT) Received: from fedora ([154.182.126.98]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-47fd4068fb7sm34328908f8f.0.2026.08.03.06.44.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 Aug 2026 06:44:05 -0700 (PDT) From: Abdelnasser Hussein To: jic23@kernel.org Cc: nuno.sa@analog.com, Michael.Hennerich@analog.com, gregkh@linuxfoundation.org, linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, Abdelnasser Hussein Subject: [PATCH v3 1/2] staging: iio: ad7816: serialize ad7816_spi_read() with a mutex Date: Mon, 3 Aug 2026 16:43:44 +0300 Message-ID: <20260803134346.6733-3-abdelnasserhussein11@gmail.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260803134346.6733-1-abdelnasserhussein11@gmail.com> References: <20260803134346.6733-1-abdelnasserhussein11@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit The ad7816_spi_read() path performs a sequence of SPI transfers and GPIO state changes that must not be interleaved with another read operation. Without serialization, concurrent callers can interfere with each other, leading to inconsistent device state and incorrect data being returned. Add a mutex to struct ad7816_chip_info and hold it across the entire read sequence to ensure exclusive access to the device. Signed-off-by: Abdelnasser Hussein --- drivers/staging/iio/adc/ad7816.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/drivers/staging/iio/adc/ad7816.c b/drivers/staging/iio/adc/ad7816.c index 0e32a2295990..b5a0c2871e00 100644 --- a/drivers/staging/iio/adc/ad7816.c +++ b/drivers/staging/iio/adc/ad7816.c @@ -50,6 +50,7 @@ struct ad7816_chip_info { u8 oti_data[AD7816_CS_MAX + 1]; u8 channel_id; /* 0 always be temperature */ u8 mode; + struct mutex lock; /* protect device state during SPI transfers */ }; enum ad7816_type { @@ -67,11 +68,14 @@ static int ad7816_spi_read(struct ad7816_chip_info *chip, u16 *data) int ret; __be16 buf; + mutex_lock(&chip->lock); + gpiod_set_value(chip->rdwr_pin, 1); gpiod_set_value(chip->rdwr_pin, 0); ret = spi_write(spi_dev, &chip->channel_id, sizeof(chip->channel_id)); if (ret < 0) { dev_err(&spi_dev->dev, "SPI channel setting error\n"); + mutex_unlock(&chip->lock); return ret; } gpiod_set_value(chip->rdwr_pin, 1); @@ -94,11 +98,13 @@ static int ad7816_spi_read(struct ad7816_chip_info *chip, u16 *data) ret = spi_read(spi_dev, &buf, sizeof(*data)); if (ret < 0) { dev_err(&spi_dev->dev, "SPI data read error\n"); + mutex_unlock(&chip->lock); + return ret; } *data = be16_to_cpu(buf); - + mutex_unlock(&chip->lock); return ret; } @@ -359,7 +365,7 @@ static int ad7816_probe(struct spi_device *spi_dev) if (!indio_dev) return -ENOMEM; chip = iio_priv(indio_dev); - + mutex_init(&chip->lock); chip->spi_dev = spi_dev; for (i = 0; i <= AD7816_CS_MAX; i++) chip->oti_data[i] = 203; -- 2.54.0