From nobody Fri Dec 19 10:48:26 2025 Received: from mail-ej1-f42.google.com (mail-ej1-f42.google.com [209.85.218.42]) (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 188A823B605 for ; Thu, 9 Oct 2025 17:36:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760031375; cv=none; b=qpjc3o8YQ7PnmQgUnTfaOpAu6p/vkc4cgDv1uOoJg0ZlpKkOFS6G1AkRy+3Ye7ZGOsu+UxW912mwx4x6s6aadna+30UY2BH4L5YmhLlRMwrSjjjzmCLQjHzKTyPwyf5nmP3XWPmjInzMvlKvGg4TZljbL0sk/l975+4WFwu0ZjE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760031375; c=relaxed/simple; bh=Vkty7DzuVOFqKx8/EsqX2XjqQtiwC7HTIRMiI4/cOrc=; h=From:To:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=sMDGCgXfpnoBycvGvGUbb0m9dlKrxW3ithXL6ZJ++Pcmu1r0rwcZz6kn1tVw1A0UQUsEu1/3huXrDmxcKfH434wyZzpZEPuLjx058hPcw4GQCVGuSW/AcEvN4DZ2LMaX6yuV1qi/vrgUdTVu95tuklzchZTrlM3gN0zIV5yaSRc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com; spf=pass smtp.mailfrom=baylibre.com; dkim=pass (2048-bit key) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b=XTP+0TLU; arc=none smtp.client-ip=209.85.218.42 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=baylibre.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b="XTP+0TLU" Received: by mail-ej1-f42.google.com with SMTP id a640c23a62f3a-b00a9989633so126305466b.0 for ; Thu, 09 Oct 2025 10:36:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1760031371; x=1760636171; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=i1r4d5+0RxhBZSIdX3lc2DX4DwfElrj3TmzYbJi6k7c=; b=XTP+0TLUULiPhVzXCuTETZvahUNoLOX/lCneOK1276ul3xGEJKxCrvLVVMz9dmRdBi F/4v/sJq3pwp4MBvRkS7GwRB943a2s+IsR2lVzzcofmvN7A/TATjf/pC3k6WL5r+v7+m YsKEKRkTcbVCy+5JWXiixndEMkZoEapWpkRKg5jV+CH5iIFtRvhiTb0QINYyMYneK+5r XyYcYEOuoQHBs10qtdVi0KwkUaZ4EIsSz18VPMjIQGKhQGrz3IrUc5+CQEIeBvaiHQ8E Wgu9A9MVXTpI01PcDNVjoTlTLfvekCRHrt5VNgEZLqYxgACTFoQ+4FoK8u/Pf/ccp4SU o5ug== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1760031371; x=1760636171; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=i1r4d5+0RxhBZSIdX3lc2DX4DwfElrj3TmzYbJi6k7c=; b=CHKeZh3UOMb4mD8j8jgfSiPnVskg4f7Jah1MH9Kk/udC7TQU3eTu2VDKQP54pI4rsc sAmgqZaNmVEUovEe8iOVBjTEvRb40Rq6TN57z5yTasH9elxm7zjwX1WUQUtBHiVtV3h/ PGJKkfsvlzTHxGxFgHfy8loIkCGuUnLwUMraqaIxf1zAZUeLfuhq4SMAmd/DaIlhz3XM u1EwFmeBR2e5SrLIewie1H9e1BRDYANZWvsytIlm70mC6gw9E3pv8h4EeJJDmuweTWDI a175juwgbKKd8CdnCIF1hVDV7lbrdxM6mXAFf5jIa9QZ7xyRk4VkKuoi3B4s444jhcys fQzw== X-Forwarded-Encrypted: i=1; AJvYcCVebL5L0D7npL25Cr7OEPpThPO1hH52VNK85MUMcfovP1Vag3MwTqPrkfEBK9rF2snhzZj7PfQphpdPeTI=@vger.kernel.org X-Gm-Message-State: AOJu0YwaMgUTpJxEZ8VQ2gOUDBNTXLxdvYZtyI2PWZYk40u/e08CyjBM QZ2d5ejHpOT357vYwl6LdH7uguXqIhQp6eo90DQMx9AGqfKimxyksHVvJK+Ai6PMTzo= X-Gm-Gg: ASbGncuGnwHuIeoY8UGb5NXJdH6wxr50ZvtRAxt4vUZTwUCqC0VzJanmp+1tfbH4ZMK vR6JLqIKA2ICy+44sfp5uMRfJsejCIXLinuAocA2E4rdWmUJGtQVmcLXtPAtWV9E2vHV7XpKD7G hEKFlwQjHX2sUOllyFFZ8E60+dtrnYSm5WT0v4fdQPRPMmHONVh7FcWu23sCkvvwBgfsTAUoVs3 WG5kDyq6gy1EdAP4iam/4ippvIxpozd8y/ei9F8O6zjtVzgcqjlAWugbcNJrgIG9tX78sx47RYA j95hnsqxY/EtVxCWVmRVqSaSP81OwsgWlVSHbfYXdR97+JDks58SUj8L1mX8M6Dnx52H8gc0C3x PgS3YRGcG2k9yl9l1uA== X-Google-Smtp-Source: AGHT+IHvd+4Q0w6q9Mqh3z9M0DeiQevOZL6zWVn+VNI9+7YPCwjTmW5gjknFUGylxug+1sKlSbi8mg== X-Received: by 2002:a17:907:a70d:b0:b4a:e7fa:3196 with SMTP id a640c23a62f3a-b4f429efe15mr1253251066b.20.1760031371466; Thu, 09 Oct 2025 10:36:11 -0700 (PDT) Received: from localhost ([151.35.157.113]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b55d951deb6sm20547466b.76.2025.10.09.10.36.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 09 Oct 2025 10:36:11 -0700 (PDT) From: Francesco Lavra To: Lorenzo Bianconi , Jonathan Cameron , David Lechner , =?UTF-8?q?Nuno=20S=C3=A1?= , Andy Shevchenko , linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 1/2] iio: imu: st_lsm6dsx: Fix measurement unit for odr struct member Date: Thu, 9 Oct 2025 19:36:08 +0200 Message-Id: <20251009173609.992452-2-flavra@baylibre.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20251009173609.992452-1-flavra@baylibre.com> References: <20251009173609.992452-1-flavra@baylibre.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=945; i=flavra@baylibre.com; h=from:subject; bh=Vkty7DzuVOFqKx8/EsqX2XjqQtiwC7HTIRMiI4/cOrc=; b=owEB7QES/pANAwAKAe3xO3POlDZfAcsmYgBo5/JEYLnqVvshBifg78xCx/6GToqsV6PVZTzrI ZT3rW0HpEeJAbMEAAEKAB0WIQSGV4VPlTvcox7DFObt8TtzzpQ2XwUCaOfyRAAKCRDt8TtzzpQ2 X2aVC/9PQQzoQFJjZ06iHXpU0MmfI8dCT7Fh4GetcHUvfMTR6C825UKwHMvM1Zk6OMtB8mut0rU 4wFNj4U13uDpVc3YR20NrddcTUJEus3MoLmZo0V5NOIEc4tC/twt+QYazPrgrf5y/s9SvAFTr36 j0exuraYLbZUjAmlyhnFleqV9TQRZJCHEQ7KU981a7fMT6tqXz8sigsVQbEpRffkxx0Jqmgis8q rgZjDYze0ZVc/+VXvLH2Kw5I6X0IqvHvZhQPGjLhYg/HYQgSJgqbErG5tdD4W04q47J3LC18uNb pGbho+n5sRuRlJ6v7FTV+klL0hYfNqFLfAMEBvCeGpjONjNk4ni0Zp0piFedP2QPt9Cq0qPmDWs 5oKfdwFMsFr+zzln3vi66wyPR+WqxYHgPIrt/SB6/zf/mV+nhIF2SJVYB8xIoE8qQIgvuc3spVU xJoXjCgcKAQ2WM6BhbDssv0oOLpYetLiSzhbMJtuMci3xXirVvGviIY6ej50g2t+Cpqj0= X-Developer-Key: i=flavra@baylibre.com; a=openpgp; fpr=8657854F953BDCA31EC314E6EDF13B73CE94365F Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The `odr` field in struct st_lsm6dsx_sensor contains a data rate value expressed in mHz, not in Hz. Signed-off-by: Francesco Lavra --- drivers/iio/imu/st_lsm6dsx/st_lsm6dsx.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx.h b/drivers/iio/imu/st_l= sm6dsx/st_lsm6dsx.h index c225b246c8a5..bd366c6e282a 100644 --- a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx.h +++ b/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx.h @@ -365,7 +365,7 @@ enum st_lsm6dsx_fifo_mode { * @id: Sensor identifier. * @hw: Pointer to instance of struct st_lsm6dsx_hw. * @gain: Configured sensor sensitivity. - * @odr: Output data rate of the sensor [Hz]. + * @odr: Output data rate of the sensor [mHz]. * @samples_to_discard: Number of samples to discard for filters settling = time. * @watermark: Sensor watermark level. * @decimator: Sensor decimation factor. --=20 2.39.5 From nobody Fri Dec 19 10:48:26 2025 Received: from mail-ej1-f46.google.com (mail-ej1-f46.google.com [209.85.218.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 92DE1242D7D for ; Thu, 9 Oct 2025 17:36:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760031376; cv=none; b=ZrVz/4Oz25AhgAU1LIzyw4BQC3sQUfP3J+yLMl4gLhm5g1KoZ1YtkZsJ73fy1bJFKGcw5uxhKrhVd5YSX7FN/tKyMBfkqqyzvlWTFMJcKfysRAZs6HFePqQZ4YeTAkS3A1u4+Sfkgtwbos0ffAgPYCZ6QV+5Usxd2WI8MzYsBFU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760031376; c=relaxed/simple; bh=662BiyGdXv2W9DnviRmUVMwteKePLQpJjJoJLBRK16s=; h=From:To:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=q8hpDBK4lS1gHsh39h1iTXYTTasM6qk9bqxiBMPZV1KA6xMrPPnmAjWpcw8e7AyBJgWEql+aNtK8Yoipygjd1lG1zvqvCyyIVcQ+SncEUGD/RbWhM1HlLbYwlEDJk+jqocuOj9i9R2ejMfQmtyd2G1XVXjuGU74TPjOAp9Yp8k4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com; spf=pass smtp.mailfrom=baylibre.com; dkim=pass (2048-bit key) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b=Ctw6rRYY; arc=none smtp.client-ip=209.85.218.46 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=baylibre.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b="Ctw6rRYY" Received: by mail-ej1-f46.google.com with SMTP id a640c23a62f3a-afcb7ae31caso207804466b.3 for ; Thu, 09 Oct 2025 10:36:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1760031373; x=1760636173; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=UoTylyozS+A8FmhwbVNYmrXgdsEgCAS7YMtlxoSU5ak=; b=Ctw6rRYYWzkJZPF7DufMU0VWVBUJIq58Z7kmsFLgUa6tF2FQrGMYpvZqtUfYvAHcjP cm0KJ6kcDoXGg2sy6qt2UKxZ85rox9JJYQxeJKI1LTIglAd27IMJz9g2At6KPZJp9be1 aHRNYuGOiomtb1XHg1ymSxTSX9PLHsmUoBril/Zy/H+iIlm4ynLLCnlil50t8KULMiY0 ZUVq8rI4vgRpaubzS2jgvLU76+0PqPtI9OS0wB2J6LvWNEdjqkp2wHasALMW1pf2B3NL GJfPujgMfj1aNWPhgaEtcSSc8T82gefbVNO6uhe4IZQRdsb8KDfvdgDdrQVNpL5NRwo9 oufA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1760031373; x=1760636173; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=UoTylyozS+A8FmhwbVNYmrXgdsEgCAS7YMtlxoSU5ak=; b=ZQjSC0W3+dXAD4NUkHDSw8u0TQjWktGKIBKumTlgmE4WHTQyDzePDhxJctg3wfezrg LAwxLYX58HkCDR9g5KxeHfjPP0lxRQjF0WSzCBr7RlOqN4n0FXJmuR6PLfB2MREDhE0F hsI8Bf9T5DUD+F2GF7DVvI2YxhHWvZrZZtpHAOolJjYavokKsKnlLuU691aUrB3ngzKg AfUnWUcfFDvN8Ej1mPkd+un0KbbR9I7DtfBMv12K3oD3aO7U8giGBiW3wRn6GdtRIZQB VCgdG0kJfw1LqO+CbkL5TFdawcLIJsA2ei5N0dPEAOODYlhHmJgB/W8VTMI2nhsAEx3o Zrbw== X-Forwarded-Encrypted: i=1; AJvYcCXKYbJxrfuuHAVDuE9xH5+4JBdWvKX+om+Rb76u8I3zKT4nBRTf7AQpEjKrI+kiVIFmdt/WKFXDfp7ZGzY=@vger.kernel.org X-Gm-Message-State: AOJu0Yw8iIVtkElu1sGbnLRlfvG2pRu0feWv+w72/WGbr1O1hgcBil4O IDH4nAd9IvPLCu3iLLtYgOcY+H9PqzAbt9ViwGXXY3bd+ZdPZWNlR/NK2kzKTQSHx+k= X-Gm-Gg: ASbGncuQt8VoJn0EisLCKUCwalLzO3ZgNfBHr64888fnNJwQyTeCKAjZ5e49sF/kkYl N21L86Qe9mFMxZqRmscZ6EYM+ufBx28xru9HmHRmL4ueoaUmKh+cXMWSH3L40Au7O0Hziufo4kr 4qdBLG+K/dUsVKWYQIJ8PEpSxAEGW4e0YF7jziFlA9jTwthXIskFTxLNlaGDclwDvWKJ6BR59a7 qE7sebmtxpLvcdb+Fd+38U+IhCr61YeAcWzrMqPbypWGZUpScy/+mPHZGmcKpfG5a7B7g6oNsCH cdAroQTQzLXxtfEK5z38A0lXxBqEwsxqRqFCgFNE2MREMdMPHl/0oR9KaYIeD4VxWWthDEGLMLr Wx1f4bZBLOjnNcudpRg== X-Google-Smtp-Source: AGHT+IECXQsPVZsJ1vwB/FI0Fbvge/Nu/eIo282pruMpUqeY1GNHAGbfE3u1dgTRp5uHxf8RrgnQTw== X-Received: by 2002:a17:906:af09:b0:b3d:b251:cdec with SMTP id a640c23a62f3a-b50abfd5e91mr769738866b.37.1760031372661; Thu, 09 Oct 2025 10:36:12 -0700 (PDT) Received: from localhost ([151.35.157.113]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b55d9a4054fsm20861666b.89.2025.10.09.10.36.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 09 Oct 2025 10:36:12 -0700 (PDT) From: Francesco Lavra To: Lorenzo Bianconi , Jonathan Cameron , David Lechner , =?UTF-8?q?Nuno=20S=C3=A1?= , Andy Shevchenko , linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 2/2] iio: imu: st_lsm6dsx: Decouple sensor ODR from FIFO batch data rate Date: Thu, 9 Oct 2025 19:36:09 +0200 Message-Id: <20251009173609.992452-3-flavra@baylibre.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20251009173609.992452-1-flavra@baylibre.com> References: <20251009173609.992452-1-flavra@baylibre.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=8237; i=flavra@baylibre.com; h=from:subject; bh=662BiyGdXv2W9DnviRmUVMwteKePLQpJjJoJLBRK16s=; b=owEB7QES/pANAwAKAe3xO3POlDZfAcsmYgBo5/JF0/zE7bUAgiArKHuvRfIYia9JPAZe2DGpA QTKh3f75buJAbMEAAEKAB0WIQSGV4VPlTvcox7DFObt8TtzzpQ2XwUCaOfyRQAKCRDt8TtzzpQ2 X8b7DACEzYtzZ8wMSkuBAmiOv9BZCw69tF35aQmA9AKjWBI7cHEyA02jrjQNcnRSN73oBS8J/+N tKWbKBKm7nBTICGSz/y6NaY1QVKZiiQqlhbOACPCWK5aZf7E6xOf7THojnMphu2DtwmXQryGaMi LF8HsJ0QkllRBqmW6ZL12L55HQS0by3UWKjPfby0AnrxkX77YfFC71amB39Ln3OumjLOLRFG2de G6aDIJ671q9hEkLl6iO4G8Gku6N5Chtkwg+7ShZ06wpQnumAsbuDUvPQPwV2QUKQ0JMex2/00C5 0kfehSCZDuCE6ljgdYV9g3csZ8piKXsXqADk8q8lVmvVa+L/UiESlZcKQdzRD9Ayrxb3RNCHm+Q xi1DDITGsntMQogL/PDNh4nAbI1uEfvfyEXyltT9Ck7cEM5AaSYou0umqZpoKwKKwUIvU+AGCbd X8jVQ20RMCovetPpmwwh/Oc3iHs8UrUCmamSZmJuhqD2HfcR5M+fiGuCcynMfSAz1d4as= X-Developer-Key: i=flavra@baylibre.com; a=openpgp; fpr=8657854F953BDCA31EC314E6EDF13B73CE94365F Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The rate at which accelerometer or gyroscope sensor samples are fed to the hardware FIFO (batch data rate, or BDR) does not have to coincide with the sensor sampling frequency (output data rate, or ODR); the only requirement is for the BDR to not be greater than the ODR. Having a BDR lower than the ODR is useful in cases where an application requires a high sampling rate for accurate detection of motion events (e.g. wakeup events), but wants to read sensor sample values from the device buffer at a lower data rate. To support the above use case, add a sampling_frequency sysfs attribute to the buffer directory of st_lsm6dsx IIO devices, which controls the BDR for a given sensor independently from the "main" sampling_frequency attribute (which controls the ODR); introduce a new `bdr` field in struct st_lsm6dsx_sensor to keep track of the current BDR value, and use this field instead of the `odr` field in the code that deals with the FIFO data rate. In the sensor hub driver, make the bdr value always mirror the odr value, since there is no separate configuration setting to control the BDR for data produced by the sensor hub functionality. Signed-off-by: Francesco Lavra --- drivers/iio/imu/st_lsm6dsx/st_lsm6dsx.h | 2 + .../iio/imu/st_lsm6dsx/st_lsm6dsx_buffer.c | 64 ++++++++++++++++--- drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c | 9 ++- drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_shub.c | 4 +- 4 files changed, 66 insertions(+), 13 deletions(-) diff --git a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx.h b/drivers/iio/imu/st_l= sm6dsx/st_lsm6dsx.h index bd366c6e282a..dc4aeea3a3b8 100644 --- a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx.h +++ b/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx.h @@ -366,6 +366,7 @@ enum st_lsm6dsx_fifo_mode { * @hw: Pointer to instance of struct st_lsm6dsx_hw. * @gain: Configured sensor sensitivity. * @odr: Output data rate of the sensor [mHz]. + * @bdr: Batch data rate [mHz] * @samples_to_discard: Number of samples to discard for filters settling = time. * @watermark: Sensor watermark level. * @decimator: Sensor decimation factor. @@ -380,6 +381,7 @@ struct st_lsm6dsx_sensor { =20 u32 gain; u32 odr; + u32 bdr; =20 u16 samples_to_discard; u16 watermark; diff --git a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_buffer.c b/drivers/iio/i= mu/st_lsm6dsx/st_lsm6dsx_buffer.c index 8a9d2593576a..5912ea76d493 100644 --- a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_buffer.c +++ b/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_buffer.c @@ -56,6 +56,7 @@ #include #include #include +#include #include #include =20 @@ -105,7 +106,7 @@ static int st_lsm6dsx_get_decimator_val(struct st_lsm6dsx_sensor *sensor, u32 max_odr) { const int max_size =3D ARRAY_SIZE(st_lsm6dsx_decimator_table); - u32 decimator =3D max_odr / sensor->odr; + u32 decimator =3D max_odr / sensor->bdr; int i; =20 if (decimator > 1) @@ -136,14 +137,14 @@ static void st_lsm6dsx_get_max_min_odr(struct st_lsm6= dsx_hw *hw, if (!(hw->enable_mask & BIT(sensor->id))) continue; =20 - *max_odr =3D max_t(u32, *max_odr, sensor->odr); - *min_odr =3D min_t(u32, *min_odr, sensor->odr); + *max_odr =3D max_t(u32, *max_odr, sensor->bdr); + *min_odr =3D min_t(u32, *min_odr, sensor->bdr); } } =20 static u8 st_lsm6dsx_get_sip(struct st_lsm6dsx_sensor *sensor, u32 min_odr) { - u8 sip =3D sensor->odr / min_odr; + u8 sip =3D sensor->bdr / min_odr; =20 return sip > 1 ? round_down(sip, 2) : sip; } @@ -231,7 +232,7 @@ static int st_lsm6dsx_set_fifo_odr(struct st_lsm6dsx_se= nsor *sensor, if (enable) { int err; =20 - err =3D st_lsm6dsx_check_odr(sensor, sensor->odr, + err =3D st_lsm6dsx_check_odr(sensor, sensor->bdr, &data); if (err < 0) return err; @@ -713,7 +714,7 @@ st_lsm6dsx_update_samples_to_discard(struct st_lsm6dsx_= sensor *sensor) =20 data =3D &hw->settings->samples_to_discard[sensor->id]; for (i =3D 0; i < ST_LSM6DSX_ODR_LIST_SIZE; i++) { - if (data->val[i].milli_hz =3D=3D sensor->odr) { + if (data->val[i].milli_hz =3D=3D sensor->bdr) { sensor->samples_to_discard =3D data->val[i].samples; return; } @@ -799,6 +800,52 @@ static const struct iio_buffer_setup_ops st_lsm6dsx_bu= ffer_ops =3D { .postdisable =3D st_lsm6dsx_buffer_postdisable, }; =20 +static ssize_t st_lsm6dsx_bdr_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + struct st_lsm6dsx_sensor *sensor =3D iio_priv(dev_to_iio_dev(dev)); + u32 bdr =3D sensor->bdr; + + return sysfs_emit(buf, "%d.%03d\n", bdr / 1000, bdr % 1000); +} + +static ssize_t st_lsm6dsx_bdr_store(struct device *dev, + struct device_attribute *attr, + const char *buf, size_t len) +{ + struct iio_dev *iio_dev =3D dev_to_iio_dev(dev); + struct st_lsm6dsx_sensor *sensor =3D iio_priv(iio_dev); + int integer, fract; + int ret; + u32 bdr; + u8 data; + + ret =3D iio_str_to_fixpoint(buf, 100, &integer, &fract); + if (ret) + return ret; + bdr =3D integer * 1000 + fract; + ret =3D st_lsm6dsx_check_odr(sensor, bdr, &data); + if (ret < 0) + return ret; + bdr =3D ret; + if (!iio_device_claim_direct(iio_dev)) + return -EBUSY; + /* the batch data rate must not exceed the sensor output data rate */ + if (bdr <=3D sensor->odr) + sensor->bdr =3D bdr; + else + ret =3D -EINVAL; + iio_device_release_direct(iio_dev); + return (ret < 0) ? ret : len; +} + +static IIO_DEV_ATTR_SAMP_FREQ(0664, st_lsm6dsx_bdr_show, st_lsm6dsx_bdr_st= ore); + +static const struct iio_dev_attr *st_lsm6dsx_buffer_attrs[] =3D { + &iio_dev_attr_sampling_frequency, + NULL +}; + int st_lsm6dsx_fifo_setup(struct st_lsm6dsx_hw *hw) { int i, ret; @@ -807,8 +854,9 @@ int st_lsm6dsx_fifo_setup(struct st_lsm6dsx_hw *hw) if (!hw->iio_devs[i]) continue; =20 - ret =3D devm_iio_kfifo_buffer_setup(hw->dev, hw->iio_devs[i], - &st_lsm6dsx_buffer_ops); + ret =3D devm_iio_kfifo_buffer_setup_ext(hw->dev, hw->iio_devs[i], + &st_lsm6dsx_buffer_ops, + st_lsm6dsx_buffer_attrs); if (ret) return ret; } diff --git a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c b/drivers/iio/imu= /st_lsm6dsx/st_lsm6dsx_core.c index c65ad49829e7..e4922578329e 100644 --- a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c +++ b/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c @@ -1847,10 +1847,13 @@ static int st_lsm6dsx_write_raw(struct iio_dev *iio= _dev, =20 val =3D val * 1000 + val2 / 1000; val =3D st_lsm6dsx_check_odr(sensor, val, &data); - if (val < 0) + if (val < 0) { err =3D val; - else + } else { sensor->odr =3D val; + /* the batch data rate must not exceed the sensor ODR */ + sensor->bdr =3D min_t(u32, sensor->bdr, sensor->odr); + } break; } default: @@ -2383,7 +2386,7 @@ static struct iio_dev *st_lsm6dsx_alloc_iiodev(struct= st_lsm6dsx_hw *hw, sensor =3D iio_priv(iio_dev); sensor->id =3D id; sensor->hw =3D hw; - sensor->odr =3D hw->settings->odr_table[id].odr_avl[0].milli_hz; + sensor->odr =3D sensor->bdr =3D hw->settings->odr_table[id].odr_avl[0].mi= lli_hz; sensor->gain =3D hw->settings->fs_table[id].fs_avl[0].gain; sensor->watermark =3D 1; =20 diff --git a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_shub.c b/drivers/iio/imu= /st_lsm6dsx/st_lsm6dsx_shub.c index 3c5e65dc0f97..01d73002e888 100644 --- a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_shub.c +++ b/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_shub.c @@ -639,7 +639,7 @@ __st_lsm6dsx_shub_write_raw(struct iio_dev *iio_dev, return odr; =20 sensor->ext_info.slv_odr =3D val; - sensor->odr =3D odr; + sensor->odr =3D sensor->bdr =3D odr; return 0; } case IIO_CHAN_INFO_SCALE: @@ -745,7 +745,7 @@ st_lsm6dsx_shub_alloc_iiodev(struct st_lsm6dsx_hw *hw, sensor =3D iio_priv(iio_dev); sensor->id =3D id; sensor->hw =3D hw; - sensor->odr =3D hw->settings->odr_table[ref_id].odr_avl[0].milli_hz; + sensor->odr =3D sensor->bdr =3D hw->settings->odr_table[ref_id].odr_avl[0= ].milli_hz; sensor->ext_info.slv_odr =3D info->odr_table.odr_avl[0].milli_hz; sensor->gain =3D info->fs_table.fs_avl[0].gain; sensor->ext_info.settings =3D info; --=20 2.39.5