From nobody Sat Jul 25 03:46:05 2026 Received: from mail-lj1-f178.google.com (mail-lj1-f178.google.com [209.85.208.178]) (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 6AB81175A84 for ; Sat, 18 Jul 2026 21:21:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.178 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784409664; cv=none; b=BsYY+f3dh0RESMyyu/56p+L4OS8E1YbV/Es65pwphz4jcVB3osR5+XYEA28E1NHpYdUpRg/GLeoUp4WkW+c9/0zlZ4oI2RfZlLFAXwBJnidV5RLCWIW1MchWxHvW4vlIZiHU3i/C0I4wn77SCTLw1wtANio7QjAtNWi7Oej369Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784409664; c=relaxed/simple; bh=i921l1jsOCDCLyYMF16W0nk5gKoZ3r/H7/RETo157bE=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=Ao0RCyCYIsm3k4iyvnUltG7y3MHODR9SWZK+md5Vyo0VvBodBwLh1mHQ26RCf3JeSgpuo7Htbwdz2JbXSg0T8W3wyD14+yWFh2PFu8WIuHAoEkDe0RqyeBkUT8XZOKWSRHMyz/8ZZ1nngDRhk+texm/FnZsjt12tFCTiypq/Px4= 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=KlKKQzLU; arc=none smtp.client-ip=209.85.208.178 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="KlKKQzLU" Received: by mail-lj1-f178.google.com with SMTP id 38308e7fff4ca-39c9a3acd40so60153771fa.3 for ; Sat, 18 Jul 2026 14:21:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1784409659; x=1785014459; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to:content-type; bh=NwkwFaroIRAi1X69YZvYd5vK/tKxvTpddnJvZnz/Qu0=; b=KlKKQzLUXkYt0bSHpAE9ZXz6j8cgxEVRCaHT14PEXwu3LIf3FyWKfD1EH2ZWNNUQFC I/S1kBEwC8hnjZU0VJx/qFhIGyy9pw8ZvdaPgeEX8ubeSsJCwzzDg8LXJ7KxoCB+DQ2j i67AworO4odEMCxXfou6yxSL5D2lK+x7dDmLrYDVb52ETpICyPuDiznVzyr6UxheR4oC 1eBTef8F0KFvNoRtfKtIxW9zMFwhVoCCP2R7R6mB6tW5xjQO7nAD7CMHq46lY6HoKkZZ UDJtiR7Etcd+hJ+TXGUJQuAtmLdg96xdWyhEDdAKmXxodzlBx1IRfisiM1UQtXw7jHRy TwKg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784409659; x=1785014459; h=content-transfer-encoding:mime-version: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=NwkwFaroIRAi1X69YZvYd5vK/tKxvTpddnJvZnz/Qu0=; b=VrVQssD1YMWIhRNKdI1+CPFTWNBoz1nkvz7SYJkif4EA5yvthhneEhThdkSs2WHyAj 8B0sgH4S+fSzr1XvA1OUsXpyRENKdocQNHrObVsPfCu3dxrFJCrgLzW7VkiujytJC8Fh KMUUBtGH9Qsvo2c/7DufqhAPo+2H5s04n032D1QHu2ceQK1boHl2mvoQUkGwkCB59iS2 RYKBkkK0ayTrVZ48yXoClA6I83fzK6TwUKQz9ZKgcuxiAaZgK2tbQoWzHp8A4AgGFnB2 QEFrTvs9M+NBoAkTFnA2adjMny53siSYR/zTqacMPfRbqXfdIbu4t3EDhd8FaujcLcPm iNEQ== X-Forwarded-Encrypted: i=1; AHgh+Rrxb6G/QNUgvfJVJNO5E0SY3YBiYRifkMBXz/qFLoo0lV+7FuAT4ytvB2uJF0fmKAJnLWqebVcUyMsVGkU=@vger.kernel.org X-Gm-Message-State: AOJu0Yzo6NwOL5IixB4XYz4EANe71f/TWv4LdoAiF1aoJ+j1l5zE2POd /jKb0Ovz3FFC/jOWnnzFQMHern3cnVos9CuBDQSlf2vlxiuaYyZPviWD X-Gm-Gg: AfdE7ckRx2r4tgoKp5+YtsvQDAcHgGBBptwZkFgYrKCIMVEVaIMV+gy1LPXL/WSFzwG Aji9A4LD0GnL+CVHQbUG5s7Xkid0hEGqNI3fNU2Uge/nYxmi00JpEmSfgiTFLP7MKpoDToha5xY tQxIZbhDtbPoUWR3P33FPUwlkg8He41YmNOl4H71RPlPZYGUJ1v0ShqKfhsiIkG6/nFmr0dgv/m T2txAmvN0ZCfczMeXB4EkfZCGxwUTvVPZXaHveGrWRbepCnWrCTetUPUYXxa7V4U2NZChcoBwMR zi5ghaADjVRPquFkdSHzk1Jx39NELqyBeNMrGjsWHji+eXFVAh4pG6l+ZnCbenMAav8GXmn4ams S0jBXQFiyqIL66ymntE5meAd6Yj9EjPQiwQ9eTqRjZl667KUKsMGvHGjlCCTIIuARTcOnPf14zv +8UNFhNGa06Y5jKh8lFdvwpBSWU/lGGV7jf7R6e0Oh9AphXVsKVFL6aYp0sBAcy+AIuI5W8XMUa Q== X-Received: by 2002:a05:6512:3692:b0:5ae:c099:a92 with SMTP id 2adb3069b0e04-5b28f9ac21fmr1188383e87.42.1784409659133; Sat, 18 Jul 2026 14:20:59 -0700 (PDT) Received: from yantra.. (dsl-trebng21-58c187-236.dhcp.inet.fi. [88.193.135.236]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5b291e0e7b1sm1213104e87.49.2026.07.18.14.20.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 18 Jul 2026 14:20:57 -0700 (PDT) From: Rupesh Majhi To: eajames@linux.ibm.com, jic23@kernel.org Cc: dlechner@baylibre.com, nuno.sa@analog.com, andy@kernel.org, linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, Rupesh Majhi Subject: [PATCH] iio: pressure: dps310: add FIFO support Date: Sun, 19 Jul 2026 00:17:26 +0300 Message-ID: <20260718211727.39752-1-zoone.rupert@gmail.com> X-Mailer: git-send-email 2.43.0 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" The DPS310 has a 32-sample FIFO that buffers pressure and temperature readings. The FIFO_EN bit was defined but never used. This enables the FIFO in the probe after startup. Add the necessary register defines and init/flush functions. If FIFO init fails, driver falls back to single-shot mode. Signed-off-by: Rupesh Majhi --- drivers/iio/pressure/dps310.c | 73 +++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) diff --git a/drivers/iio/pressure/dps310.c b/drivers/iio/pressure/dps310.c index f45af72a0554..83f1326f542a 100644 --- a/drivers/iio/pressure/dps310.c +++ b/drivers/iio/pressure/dps310.c @@ -53,6 +53,19 @@ #define DPS310_PRS_SHIFT_EN BIT(4) #define DPS310_FIFO_EN BIT(5) #define DPS310_SPI_EN BIT(6) +/* FIFO status register */ +#define DPS310_FIFO_STS 0x0B +#define DPS310_FIFO_EMPTY BIT(0) +#define DPS310_FIFO_FULL BIT(1) + +/* FIFO samples are read from DPS310_PRS_BASE (0x00). The lower 2 bits + * of the third byte encode the sample type; the remaining bits are + * the signed measurement value. + */ +#define DPS310_FIFO_TYPE_MASK GENMASK(0, 0) +#define DPS310_FIFO_TMP_SAMPLE 0x00 +#define DPS310_FIFO_PRS_SAMPLE 0x01 + #define DPS310_RESET 0x0c #define DPS310_RESET_MAGIC 0x09 #define DPS310_COEF_BASE 0x10 @@ -90,6 +103,7 @@ struct dps310_data { s32 pressure_raw; s32 temp_raw; bool timeout_recovery_failed; + bool fifo_enabled; }; =20 static const struct iio_chan_spec dps310_channels[] =3D { @@ -843,6 +857,61 @@ static const struct iio_info dps310_info =3D { .write_raw =3D dps310_write_raw, }; =20 +static int dps310_fifo_flush(struct dps310_data *data) +{ + int rc; + + rc =3D regmap_write_bits(data->regmap, DPS310_CFG_REG, + DPS310_FIFO_EN, 0); + if (rc) + return rc; + + data->fifo_enabled =3D false; + return 0; +} + +static int __maybe_unused dps310_fifo_read_sample(struct dps310_data *data) +{ + int rc; + u8 val[3]; + s32 raw; + u8 type; + + rc =3D regmap_bulk_read(data->regmap, DPS310_PRS_BASE, + val, sizeof(val)); + if (rc) + return rc; + + type =3D val[2] & DPS310_FIFO_TYPE_MASK; + raw =3D (val[0] << 16) | (val[1] << 8) | (val[2] & ~DPS310_FIFO_TYPE_MASK= ); + raw =3D sign_extend32(raw, 23); + + if (type =3D=3D DPS310_FIFO_TMP_SAMPLE) + data->temp_raw =3D raw; + else + data->pressure_raw =3D raw; + + return 0; +} + +static int dps310_fifo_init(struct dps310_data *data) +{ + int rc; + + rc =3D dps310_fifo_flush(data); + if (rc) + return rc; + + rc =3D regmap_write_bits(data->regmap, DPS310_CFG_REG, + DPS310_FIFO_EN, DPS310_FIFO_EN); + + if (rc) + return rc; + + data->fifo_enabled =3D true; + return 0; +} + static int dps310_probe(struct i2c_client *client) { const struct i2c_device_id *id =3D i2c_client_get_device_id(client); @@ -877,6 +946,10 @@ static int dps310_probe(struct i2c_client *client) if (rc) return rc; =20 + rc =3D dps310_fifo_init(data); + if (rc) + dev_warn(&client->dev, + "FIFO init failed (%d), continuing without FIFO\n", rc); rc =3D devm_iio_device_register(&client->dev, iio); if (rc) return rc; --=20 2.43.0