From nobody Mon Feb 9 04:03:57 2026 Received: from mail-ed1-f44.google.com (mail-ed1-f44.google.com [209.85.208.44]) (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 699E131771B for ; Wed, 7 Jan 2026 12:35:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767789326; cv=none; b=RqDgNhpuSknUXQEodS75g20gJ6lD4IAmhdW5YM+5L/Lwi4eMbTlfROTVlMI02KQNSI64LMybepSH0F8ZFitmc+aVW476aTIu2pvFF3u2dBesDowZsa3rEULDp06RzirknTXhLCQG+lT/3gBr8c8/v4wIkxKWB3kuKopXb7+C6qI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767789326; c=relaxed/simple; bh=0s7F3wx9F8OanhM3tiFMaiQriDANuo8GZ/AwyAxEqkY=; h=From:To:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=kf/8W+4knohgacinYNF/JwBkFhHqnpcg6TVqhK49MbMQH08hmCpgEDcZrQ+vdfcNDXbi4cfLbDEfZVX2TF/JfnSpk6diDgti7UYFc+nK1GMz+DtYaKjoETrp+UwSXeJm7yQ50TjCsrEjj41baaYh7Xa23yZ5JSKF8tEIegtUW3A= 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=fmuL1bEo; arc=none smtp.client-ip=209.85.208.44 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="fmuL1bEo" Received: by mail-ed1-f44.google.com with SMTP id 4fb4d7f45d1cf-6505d3b84bcso3073926a12.3 for ; Wed, 07 Jan 2026 04:35:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1767789323; x=1768394123; 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=Hb9X7ojqs7UxJ/3kF+kDP4GTNw9n7fjfq/OK20F33Hg=; b=fmuL1bEoKBUtjPdfkxS+bMHNsrBzKWzOlncCcZW8wbw77YL53D8lwJd7yU2YHaB5Gy Cu3YAfjaQCDoJaP070dbstpYlgOkVLJ2yyseeQh3xjXaL/x/GcjVzQCcGFh3Z9qmw9Jd /1cEH9i7eRdF7bu9JCHE3RWGiYCB4bGAZrKMuQWyUfT02His9YWnxxyacBSi6OoHZrcF ApLUJa8lfGoM6s/I/6S16REgemF9unZc9dDTNxj8Wy7xvlusenAcKjhSA//qo9aAyjmD 4acv659aWo4cwh0n3L5yKlYnev5ZfnDx7lCla5i2xNQBk4xnPXi7ECqAS4D+QHur6DNe xYRw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767789323; x=1768394123; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=Hb9X7ojqs7UxJ/3kF+kDP4GTNw9n7fjfq/OK20F33Hg=; b=d9R2WhkcQUYxhPeoFyxC8I2R6BdewiBLFxN7shTFABrYVJdPjf/18Dys3v1qhfEgs2 XjQDpfRyLsQBHDWEFzdkT380T0NCUalamr74igCKSM7OoXRPcUE1W3PsJe9qgWgPdCII yXQMZEpWIPAPtu3jb1s0SPMfVz6MM6rtpgtMWNn3aFEwUd0/boe1RJoaw1yIWVKawNdP pcTEPVoWhnRtCVx2nOcfsy3eFK5dX7L0AzY7zPWm7sXhfhL+gfwBIwlFgDfFQOniOsjd bx3sW2EmYgtmo5kr5p5G0QnHR4zMpKAuNuroOJFVpzxmzfTIVfz5jonxouoVfN8iU7WB YSBA== X-Forwarded-Encrypted: i=1; AJvYcCWRNxx33NTlTOv8KPgk3FQy81tsKPSUdOwN+Nwuk9aM1brlhD+0v8ypJvPStRSAklpW8xSagl7PfjUqsYc=@vger.kernel.org X-Gm-Message-State: AOJu0Yw4x/GhPh8F1r/vmX1iRRtD6tHzcerjqhyDRwjuAw+FB6k4t9/Q AUSOfxOHj7J2HuauxwhxSO8VVNB+aCNRYicmzWSCa0Jp8oE08sh45/lb/hJVRj1Z+Kk= X-Gm-Gg: AY/fxX6WGqVzkdtT4wR8/9zWcszC/2FzuIQIl55Yp40yKWt476kJJ3J5LmNz08QkSRF UDZWTS7SysAJWXRI3m0hMFTClINKqAW2M/T/6qmtS78Xa7cLiAwYVdQpRPX1dMKVCzigjlnTEAU HoznS5bA4yYXU/GUE/uR58jyREitP4qSXdpR6R+J77b8L0XcgsQ224Z6pxL8EklRJxNi5+lzZ3o zSfq2/+lP3YhY4gnDtCmErghao2VBJvDkrxDeE2rMpGIPIaaM4sdnl9EHJaxUvn/HoRU5hOARsu 33CCIc8d8/dIj0oCJM0BcezeewFgWynUb66XxdJ9+6TUUvRYPfqWLZFuXhSZMtYSmo6ZNY7sZ9i BYgkhS4AQ91jZtx3vzYz1QEgRTgaaQGRykphWs6zcPzB6g4Qe8wWAjZPcJcb4SwCgIMs26j7t8n eBu3Fwd+tJsabeuvGy/mZIT8YZ0q7Y7OFWbHh60+s= X-Google-Smtp-Source: AGHT+IHDilfFE4eSHAWVwsGDGF+z/OqbkLKKZXP7CW7m7ovmXEdVaEkBR4XZZ0kGhIy0u76UlatFIA== X-Received: by 2002:a05:6402:518f:b0:64c:62f7:1ac4 with SMTP id 4fb4d7f45d1cf-65097e717abmr2090092a12.32.1767789322697; Wed, 07 Jan 2026 04:35:22 -0800 (PST) Received: from localhost (mob-176-245-211-45.net.vodafone.it. [176.245.211.45]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-6507bf6d5absm4503713a12.33.2026.01.07.04.35.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Jan 2026 04:35:22 -0800 (PST) From: Francesco Lavra To: Ramona Gradinariu , Antoniu Miclaus , Lars-Peter Clausen , Michael Hennerich , 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: accel: adxl380: Add support for 1 kHz sampling frequency Date: Wed, 7 Jan 2026 13:35:18 +0100 Message-Id: <20260107123518.4017292-3-flavra@baylibre.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20260107123518.4017292-1-flavra@baylibre.com> References: <20260107123518.4017292-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=5746; i=flavra@baylibre.com; h=from:subject; bh=0s7F3wx9F8OanhM3tiFMaiQriDANuo8GZ/AwyAxEqkY=; b=owEB7QES/pANAwAKAe3xO3POlDZfAcsmYgBpXlMAoKv/PJe5nKgcmvrGJrBmMoq0oNO0XUSSY 1jAe2v0pFeJAbMEAAEKAB0WIQSGV4VPlTvcox7DFObt8TtzzpQ2XwUCaV5TAAAKCRDt8TtzzpQ2 X8GwC/49A2LyU02o9MyMvyYV2QNhlFAaB1sELziezLeqxbamqmd7pBuN+9qsVnIiFysCCH5FPd3 /KRYI9jNt2+espGVDOTTIwEncncKX3ZOAX0+SxSF2E3gwDB/l7qt2wgrLx2SsMK9wdd4yHwYjAQ EcGQuevaKUwGxcDutPHy2f2+L8TrZvGQhsiEAKdXM73+Z11pRkQSwTcePIpBRpTSN8i+albIOe3 pTnK7YgvJiTv1SJ6TS9zLAK1nkVNRlVaImiYguJMzJe8LJMR/M6k/hUk5by84OpPF3Cazgos4Hd Blc4Ogw6S3HuaFtTo+CwnJk8gUyF+oGMe4qL1pCs019UxpAWZ1qoTyXoGyRoApx1MKndYvVw+M9 95IbJQ70NeMoWQrxMl60f8ldeONLpy3rAPz+ON23C58+q4veAjoxiXe7KJRe3b9UO7TPdKjXNLd Vt2oRjfZTdJDu/jvt0TnE0uKgqOsQUSu+nMk4FsD+mFugN7CIik2uSfMFhsgHkdzdNsJE= X-Developer-Key: i=flavra@baylibre.com; a=openpgp; fpr=8657854F953BDCA31EC314E6EDF13B73CE94365F Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" In sensor variants (such as ADXL380 and ADXL382) that support low-power mode, the SAR signal path allows sampling acceleration data at lower rates; more specifically, when the sensor operates in VLP mode, the sampling frequency is 1 kHz. To add support for the 1kHz sampling frequency value, modify the operating mode selection logic to take into account the sampling frequency, and configure the decimation filters only when applicable (i.e. when using a sampling frequency that relies on the DSM signal path). Signed-off-by: Francesco Lavra --- drivers/iio/accel/adxl380.c | 49 +++++++++++++++++++++++-------------- drivers/iio/accel/adxl380.h | 10 +++++++- 2 files changed, 40 insertions(+), 19 deletions(-) diff --git a/drivers/iio/accel/adxl380.c b/drivers/iio/accel/adxl380.c index bbf1f88ca781..a6919dfce2e9 100644 --- a/drivers/iio/accel/adxl380.c +++ b/drivers/iio/accel/adxl380.c @@ -245,12 +245,14 @@ static int adxl380_set_measure_en(struct adxl380_stat= e *st, bool en) =20 /* * Activity/Inactivity detection available only in VLP/ULP - * mode and for devices that support low power modes. Otherwise - * go straight to measure mode (same bits as ADXL380_OP_MODE_HP). + * mode and for devices that support low power modes. */ if (st->chip_info->has_low_power && (FIELD_GET(ADXL380_ACT_EN_MSK, act_inact_ctl) || FIELD_GET(ADXL380_INACT_EN_MSK, act_inact_ctl))) + st->odr =3D ADXL380_ODR_VLP; + + if (st->odr =3D=3D ADXL380_ODR_VLP) op_mode =3D ADXL380_OP_MODE_VLP; else op_mode =3D ADXL380_OP_MODE_HP; @@ -478,17 +480,22 @@ static int adxl380_set_odr(struct adxl380_state *st, = u8 odr) if (ret) return ret; =20 - ret =3D regmap_update_bits(st->regmap, ADXL380_TRIG_CFG_REG, - ADXL380_TRIG_CFG_DEC_2X_MSK, - FIELD_PREP(ADXL380_TRIG_CFG_DEC_2X_MSK, odr & 1)); - if (ret) - return ret; + if (odr >=3D ADXL380_ODR_DSM) { + u8 mul =3D odr - ADXL380_ODR_DSM; + u8 field; =20 - ret =3D regmap_update_bits(st->regmap, ADXL380_TRIG_CFG_REG, - ADXL380_TRIG_CFG_SINC_RATE_MSK, - FIELD_PREP(ADXL380_TRIG_CFG_SINC_RATE_MSK, odr >> 1)); - if (ret) - return ret; + field =3D FIELD_PREP(ADXL380_TRIG_CFG_DEC_2X_MSK, mul & 1); + ret =3D regmap_update_bits(st->regmap, ADXL380_TRIG_CFG_REG, + ADXL380_TRIG_CFG_DEC_2X_MSK, field); + if (ret) + return ret; + + field =3D FIELD_PREP(ADXL380_TRIG_CFG_SINC_RATE_MSK, mul >> 1); + ret =3D regmap_update_bits(st->regmap, ADXL380_TRIG_CFG_REG, + ADXL380_TRIG_CFG_SINC_RATE_MSK, field); + if (ret) + return ret; + } =20 st->odr =3D odr; ret =3D adxl380_set_measure_en(st, true); @@ -1219,9 +1226,14 @@ static int adxl380_read_avail(struct iio_dev *indio_= dev, *length =3D ARRAY_SIZE(st->chip_info->scale_tbl) * 2; return IIO_AVAIL_LIST; case IIO_CHAN_INFO_SAMP_FREQ: - *vals =3D (const int *)st->chip_info->samp_freq_tbl; + if (st->chip_info->has_low_power) { + *vals =3D st->chip_info->samp_freq_tbl; + *length =3D ADXL380_ODR_MAX; + } else { + *vals =3D st->chip_info->samp_freq_tbl + ADXL380_ODR_DSM; + *length =3D ADXL380_ODR_MAX - ADXL380_ODR_DSM; + } *type =3D IIO_VAL_INT; - *length =3D ARRAY_SIZE(st->chip_info->samp_freq_tbl); return IIO_AVAIL_LIST; case IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY: *vals =3D (const int *)st->lpf_tbl; @@ -1611,7 +1623,7 @@ const struct adxl380_chip_info adxl318_chip_info =3D { [ADXL380_OP_MODE_8G_RANGE] =3D { 0, 2615434 }, [ADXL380_OP_MODE_16G_RANGE] =3D { 0, 5229886 }, }, - .samp_freq_tbl =3D { 8000, 16000, 32000 }, + .samp_freq_tbl =3D { 0, 8000, 16000, 32000 }, /* * The datasheet defines an intercept of 550 LSB at 25 degC * and a sensitivity of 10.2 LSB/C. @@ -1629,7 +1641,7 @@ const struct adxl380_chip_info adxl319_chip_info =3D { [ADXL382_OP_MODE_30G_RANGE] =3D { 0, 9806650 }, [ADXL382_OP_MODE_60G_RANGE] =3D { 0, 19613300 }, }, - .samp_freq_tbl =3D { 16000, 32000, 64000 }, + .samp_freq_tbl =3D { 0, 16000, 32000, 64000 }, /* * The datasheet defines an intercept of 550 LSB at 25 degC * and a sensitivity of 10.2 LSB/C. @@ -1647,7 +1659,7 @@ const struct adxl380_chip_info adxl380_chip_info =3D { [ADXL380_OP_MODE_8G_RANGE] =3D { 0, 2615434 }, [ADXL380_OP_MODE_16G_RANGE] =3D { 0, 5229886 }, }, - .samp_freq_tbl =3D { 8000, 16000, 32000 }, + .samp_freq_tbl =3D { 1000, 8000, 16000, 32000 }, /* * The datasheet defines an intercept of 470 LSB at 25 degC * and a sensitivity of 10.2 LSB/C. @@ -1667,7 +1679,7 @@ const struct adxl380_chip_info adxl382_chip_info =3D { [ADXL382_OP_MODE_30G_RANGE] =3D { 0, 9806650 }, [ADXL382_OP_MODE_60G_RANGE] =3D { 0, 19613300 }, }, - .samp_freq_tbl =3D { 16000, 32000, 64000 }, + .samp_freq_tbl =3D { 1000, 16000, 32000, 64000 }, /* * The datasheet defines an intercept of 570 LSB at 25 degC * and a sensitivity of 10.2 LSB/C. @@ -1906,6 +1918,7 @@ int adxl380_probe(struct device *dev, struct regmap *= regmap, st->dev =3D dev; st->regmap =3D regmap; st->chip_info =3D chip_info; + st->odr =3D ADXL380_ODR_DSM; =20 mutex_init(&st->lock); =20 diff --git a/drivers/iio/accel/adxl380.h b/drivers/iio/accel/adxl380.h index e67c5aab8efc..d2c260c8b2fa 100644 --- a/drivers/iio/accel/adxl380.h +++ b/drivers/iio/accel/adxl380.h @@ -8,10 +8,18 @@ #ifndef _ADXL380_H_ #define _ADXL380_H_ =20 +enum adxl380_odr { + ADXL380_ODR_VLP, + ADXL380_ODR_DSM, + ADXL380_ODR_DSM_2X, + ADXL380_ODR_DSM_4X, + ADXL380_ODR_MAX +}; + struct adxl380_chip_info { const char *name; const int scale_tbl[3][2]; - const int samp_freq_tbl[3]; + const int samp_freq_tbl[ADXL380_ODR_MAX]; const struct iio_info *info; const int temp_offset; const u16 chip_id; --=20 2.39.5