From nobody Tue Dec 9 03:04:50 2025 Received: from mail-wr1-f45.google.com (mail-wr1-f45.google.com [209.85.221.45]) (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 1BE0D2EA498 for ; Wed, 12 Nov 2025 22:57:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762988247; cv=none; b=Fgw9RWIqOBXkO8JplY9i+SyEKIQzsc2Vivzqo5J4jN2ulcHUViLhqKKVOUFw5hTgadT/CixJmLWRq3+dMSh7qGnrPU0QxBGXqIOEhfMRlv67puuAUsR/eL/3TxfHdPOtkH2d2yjimUxJjw5ciCGt9fg4P4qcs1uxRGRlKEEvrZ4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762988247; c=relaxed/simple; bh=4R9uJSwfRDFDC4yeCtA2URaQMWypx5dHgLVpcs09cS0=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=MunIFzX4ZXaIgCkisc6tA8DzbOmfZ8I+8LDWfrW+aecbMofjwlQDsq1nOaSnERKjwK5YhoF5ZmpfZklMO9fxbrRrx1qWwTgoDmhIq5657+InMfdv0DHCL0poDDk0XKCp6cJz+be09WN9gu09Tz3SXqnkPLLgcyriJSCahWUjBzQ= 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=RI7RZwQy; arc=none smtp.client-ip=209.85.221.45 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="RI7RZwQy" Received: by mail-wr1-f45.google.com with SMTP id ffacd0b85a97d-42b3ac40ae4so104872f8f.0 for ; Wed, 12 Nov 2025 14:57:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1762988244; x=1763593044; 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=a7502WjO5EoP4P++yfuX6KQ8nm9HsOVK8ctMCfYyteQ=; b=RI7RZwQyJyhgcL/81aggSimqFOzcGHv9XpO3DADaThX7Uv694ufufowg0WKV/iLvai 2TvIAdkYlxFWmL4gD0uV8MUBt/r/RAwa8nW/ARmWNZ4rLDXKGfuX7MHmVINt4Aq8+qxu U9NBMbqcm7YkqI4Ol74FFACNGOC+G50h9fszoPikZRlQ6Ursy0FI9iYUNo4P5OHn2tdM UjPxu69eZxzGtzfTuM39i4QhP5/dBdOXzNyxE92SyKhacKQM6pQR/SHoJr7nXmG0pAo7 eILzDel/GV1GGkWDLfmZaK4HBQDHQkOTiGyJ8XFxZ3iHD1ef6AMt2sGgcTk7/SJ+urTx w7aA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762988244; x=1763593044; 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=a7502WjO5EoP4P++yfuX6KQ8nm9HsOVK8ctMCfYyteQ=; b=QcCuSfuoqW5QEkHisx5ZLpwy+Rl7922BVNaPHO+odDyFPfASJ1IUwj67U8NJvSVfSZ oVib6pXWA+vi3zoAbqJLaVnkwrBwvt93hBKjX5IQXpZW3RiH9bjT37hPWWT5pHNVRyeo 8C6ZB9B7E9T3EJM+Azrh9PdYPOLJYJ0GMCc/Bb4dBwXf/NYpWw8HzhKO7fpA0s6eVdFZ /iMwzxDebnuS/heKyOUNIpB2yYXt/46dNiYBkmG0ibrJgYxA7dQ7vr58gxP8EWC8HeUo FZUV59k5wGSO5tK5qcmMACkj/JSBXn4kGVUf23dSGaIn6lM6aqxQ8K9llBD6xJqeix/r UI0w== X-Forwarded-Encrypted: i=1; AJvYcCWCctCBBdsIjTX/1uN1g3/4fF+MAkG+L0Q5H8521AV1K/zE5piiRBd4DQK5GHevqUh67QtMbBF1jNjFy9s=@vger.kernel.org X-Gm-Message-State: AOJu0Yxu3ZoHwil/WfKIx9a5s5ltpXtDOcIzBxdTuAJ5x9PHwt2wmGio Sp6XsYbZUM0DVdzrT0P2f2w8ieR1/IiOL30841sXMQYeTpCb6zvk+iO1 X-Gm-Gg: ASbGncunr3gR7maJ49HbaEB+do2cgrvQua6VFF7+DeY9CsGZWhrtK2agc2yVSYHfIYH eWItal4sg40iqZuMYVkxYy0w2FDKSo3I3ujbXVcCP/k6jLCac78Po6Gti8zvIfxZwULY3bmYGP7 tYfhx8zvdO22zYa8Rr96WGA2Xz/PkheMx6yx7y3NhmfX5jDVGkLx0BmvkfdL7IHxGJ2JCUe1C3w ck66pFmiE3eUOS0H9QvA3aGz960CVKUgUWiJM9v1M7j77U70KAoBrEkp/EjQ9GVqq+rkr81n+t7 DHy6ID5fOg3TSXhgaMCXZCPAsKzOWwqjxOoOAsKd5QM/vGP7Grp41BUpttuKpdgvCXvKEc/k9dJ b77Dr3Y1RFv9/nvaUmtQJiOy1wtVaoCJcOZ0FwCitRUgEXUahRK1FHRM3fjGoASvIUSThagavPS l5hvpa4cE= X-Google-Smtp-Source: AGHT+IEZeLFhjKlX+2oecgSyqmpUsjOHozvWH5fS1TJhDkljS6rsAK5pW51JKAcYLMQ4PnfaBkLYDw== X-Received: by 2002:a5d:5848:0:b0:42b:3298:4690 with SMTP id ffacd0b85a97d-42b4bdb020amr4463095f8f.33.1762988244234; Wed, 12 Nov 2025 14:57:24 -0800 (PST) Received: from localhost.localdomain ([78.209.131.33]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-42b53e85cc0sm236979f8f.17.2025.11.12.14.57.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Nov 2025 14:57:23 -0800 (PST) From: Antoni Pokusinski To: jic23@kernel.org, dlechner@baylibre.com, nuno.sa@analog.com, andy@kernel.org, marcelo.schmitt1@gmail.com Cc: linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, Antoni Pokusinski Subject: [PATCH v4 1/3] iio: mpl3115: use get_unaligned_be24() to retrieve pressure data Date: Wed, 12 Nov 2025 23:56:59 +0100 Message-Id: <20251112225701.32158-2-apokusinski01@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20251112225701.32158-1-apokusinski01@gmail.com> References: <20251112225701.32158-1-apokusinski01@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: quoted-printable Content-Type: text/plain; charset="utf-8" The pressure measurement result is arranged as 20-bit unsigned value residing in three 8-bit registers. Hence, it can be retrieved using get_unaligned_be24() and by applying 4-bit shift. Reviewed-by: Marcelo Schmitt Signed-off-by: Antoni Pokusinski --- drivers/iio/pressure/mpl3115.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/drivers/iio/pressure/mpl3115.c b/drivers/iio/pressure/mpl3115.c index c212dfdf59ff..5594256fffbd 100644 --- a/drivers/iio/pressure/mpl3115.c +++ b/drivers/iio/pressure/mpl3115.c @@ -16,6 +16,7 @@ #include #include #include +#include =20 #include #include @@ -125,7 +126,7 @@ static int mpl3115_read_info_raw(struct mpl3115_data *d= ata, =20 switch (chan->type) { case IIO_PRESSURE: { /* in 0.25 pascal / LSB */ - __be32 tmp =3D 0; + u8 press_be24[3]; =20 guard(mutex)(&data->lock); ret =3D mpl3115_request(data); @@ -134,11 +135,17 @@ static int mpl3115_read_info_raw(struct mpl3115_data = *data, =20 ret =3D i2c_smbus_read_i2c_block_data(data->client, MPL3115_OUT_PRESS, - 3, (u8 *) &tmp); + sizeof(press_be24), + press_be24); if (ret < 0) return ret; =20 - *val =3D be32_to_cpu(tmp) >> chan->scan_type.shift; + /* + * The pressure channel shift is applied in the case where the + * data (24-bit big endian) is read into a 32-bit buffer. Here + * the data is stored in a 24-bit buffer, so the shift is 4. + */ + *val =3D get_unaligned_be24(press_be24) >> 4; return IIO_VAL_INT; } case IIO_TEMP: { /* in 0.0625 celsius / LSB */ --=20 2.25.1 From nobody Tue Dec 9 03:04:50 2025 Received: from mail-wr1-f53.google.com (mail-wr1-f53.google.com [209.85.221.53]) (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 64D8D2ECEA5 for ; Wed, 12 Nov 2025 22:57:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762988251; cv=none; b=gz92Lke9eTJLqOXwTHUURrk3F8ebnpdRYA/xVhMzbplEedxfE6Ldv48NyXKxr4AEPfhn2otCW261oosygbDoMcmJMvZIJ7LXS1iwFb7yfgBRVANNKf1xESyW4LzTxN8C0t90vy4ZyujcmVTpQYKn9737vm7E3fQzJEsu0EdpEUY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762988251; c=relaxed/simple; bh=4zZLBfpumbdh7ltXIJs2K7CAoYZvWqRXe44ZO+6Tuls=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=r82qN30UjgCE9dAKgt5huJFyPGJSw22nGlr6gz4uCm6re1bxdkFD2Xv+olSuFR9LBkJ66t1gPYwIsMQYesOKxv1I/0U7hVuMn1eYiKdBZd+WJxTVHie0OQsT+lRXAFns7OtSBuz+JrYu6JfXCb/bzpzqtIf9fPzuCTth1/e3SgU= 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=TajvwjRO; arc=none smtp.client-ip=209.85.221.53 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="TajvwjRO" Received: by mail-wr1-f53.google.com with SMTP id ffacd0b85a97d-42b387483bbso142373f8f.1 for ; Wed, 12 Nov 2025 14:57:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1762988248; x=1763593048; 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=S/58+r0lPSGSY5PhfjE6noQfz+8v9ff7u2Qtdsu2R0Q=; b=TajvwjROe7ozABXoET9MLDQYtRNz8HD7y2kUgHNRjbDwtRMIPLy26eCqXsmUWru6OH ToFaae2XT6RW+oLXoY7/H4EJp0VXKX4wu2ezG2ZbOT1DJNBcqXDeqHfWNpzhw6MFbPbH 5uYx1hFpqF6EKgpO4zmhHYeS5URmrnxJsJDscv4bZch6rE2qUogUZJRlD9OZvjk9D5Tg gVARKKgDqA+hq/OMkJ0Wng0zfMDpYkh/ncLIl3qCAbIkWQ5LY6gsxoTsk0uposamMlYc H9MqK+3nX9oGROSWf5fPh7HQoJR9S/6qcbGOI2qSoHvpB3F6wK4oMVen4NtMhvksQHii gTKw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762988248; x=1763593048; 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=S/58+r0lPSGSY5PhfjE6noQfz+8v9ff7u2Qtdsu2R0Q=; b=Uah2l1d3ihMCwhRCz93gb/BSo7xlvqwbiUPjRNMsDgYFYx8/p2ZzYrw9rEo1MOgox/ ifCkFFkYrnqRUV9SM6w42pmTZsVBMt42PuDnN0ftSC3Dv8WZ7wWLZPlFNIwaqX9EXRre EHZcP/alFUmC8uIqdKcQaU9KkxR7mnn9r9JWb0743bAqk7G7iAJrAiOJXeNgANQ5/9ip lYBMR5ecCx8S2e36rqd460NbPFiwxNYOT0sJHPPCA+aUKjU0GKy2hLmP2+LOPPIdt6Xd WKRbtN8Bt8CAz3biTpFELgP0/4Wzz0dxw6+/W8V6l642Oxw5F7nanRzBAGX5rFv5SgBV /yqg== X-Forwarded-Encrypted: i=1; AJvYcCWgmN78w+gxmxZ84ijJ1fde5CD7sSKjPL62cT/VurXe/EdcM/FRORTIsZfH0XsVqerkjWGj5KciKzigyuw=@vger.kernel.org X-Gm-Message-State: AOJu0YzQvA6yo8SkB4PqCoZmSfFD+5PXCmPFNhlIQAsGeYjomCVCPcyD XrDd15MSMfUMCLmOT0moU5A2fK4ahu7vskdWrU/UdCJvlIQlW+XStgI3 X-Gm-Gg: ASbGncsWMTIwlHvDa4r9JsenqB2FrmsuB6RdbeGRyD1aEHy+pMMnpLuDUa1l+CO1v3U 6uvhUcq0/nR4egl3jAiGk9neOBCw4bRdGa3QyrH1GBvu0Tb//0jhMJYQVrrliuk9dXb2+WGQnPF LxPBR2Z30iCbwOzoW/AD5doVMhf2Scb180geNw26UsyMZ9L0RmkHiImTiQjGsgu0lRZPo3aLsCc DasDiN9nc3YDRTgRcFwutldbU2QYljvzoVxFLryDnL3Os+E12WvW606WoducWlnKJtArg27Pi/M 2Ld5HxRL+zsLunOfnG/cJ29uK83nmePuxolAcZu1a3AWhiR9L7+2GtfgVhY05liptuqU3H6omwy 9wWwC4T5qVIJukfFTueXGpKPIGkXhOSxYPpxM0Dl5b4M9VtYl1Kny3BGbMzUC5nRi6cKGBcJy X-Google-Smtp-Source: AGHT+IE66AaMLPDlrLXqAT+Djqtrr+0CcNyoHxJfYKP8kdxhu3Z+xZlQeGLQSfiijknml32Mni2xmw== X-Received: by 2002:a5d:588a:0:b0:42b:4177:7135 with SMTP id ffacd0b85a97d-42b4bdaa6e4mr4296673f8f.41.1762988247372; Wed, 12 Nov 2025 14:57:27 -0800 (PST) Received: from localhost.localdomain ([78.209.131.33]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-42b53e85cc0sm236979f8f.17.2025.11.12.14.57.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Nov 2025 14:57:26 -0800 (PST) From: Antoni Pokusinski To: jic23@kernel.org, dlechner@baylibre.com, nuno.sa@analog.com, andy@kernel.org, marcelo.schmitt1@gmail.com Cc: linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, Antoni Pokusinski Subject: [PATCH v4 2/3] iio: mpl3115: add threshold events support Date: Wed, 12 Nov 2025 23:57:00 +0100 Message-Id: <20251112225701.32158-3-apokusinski01@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20251112225701.32158-1-apokusinski01@gmail.com> References: <20251112225701.32158-1-apokusinski01@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: quoted-printable Content-Type: text/plain; charset="utf-8" Add support for pressure and temperature rising threshold events. For both channels *_en and *_value (in raw units) attributes are exposed. Since in write_event_config() the ctrl_reg1.active and ctrl_reg4 are modified, accessing the data->ctrl_reg{1,4} in set_trigger_state() and write_event_config() needs to be now guarded by data->lock. Otherwise, it would be possible that 2 concurrent threads executing these functions would access the data->ctrl_reg{1,4} at the same time and then one would overwrite the other's result. Signed-off-by: Antoni Pokusinski --- drivers/iio/pressure/mpl3115.c | 221 +++++++++++++++++++++++++++++++-- 1 file changed, 211 insertions(+), 10 deletions(-) diff --git a/drivers/iio/pressure/mpl3115.c b/drivers/iio/pressure/mpl3115.c index 5594256fffbd..aeac1586f12e 100644 --- a/drivers/iio/pressure/mpl3115.c +++ b/drivers/iio/pressure/mpl3115.c @@ -14,11 +14,13 @@ #include #include #include +#include #include #include #include =20 #include +#include #include #include #include @@ -31,6 +33,8 @@ #define MPL3115_WHO_AM_I 0x0c #define MPL3115_INT_SOURCE 0x12 #define MPL3115_PT_DATA_CFG 0x13 +#define MPL3115_PRESS_TGT 0x16 /* MSB first, 16 bit */ +#define MPL3115_TEMP_TGT 0x18 #define MPL3115_CTRL_REG1 0x26 #define MPL3115_CTRL_REG2 0x27 #define MPL3115_CTRL_REG3 0x28 @@ -43,6 +47,8 @@ #define MPL3115_STATUS_TEMP_RDY BIT(1) =20 #define MPL3115_INT_SRC_DRDY BIT(7) +#define MPL3115_INT_SRC_PTH BIT(3) +#define MPL3115_INT_SRC_TTH BIT(2) =20 #define MPL3115_PT_DATA_EVENT_ALL GENMASK(2, 0) =20 @@ -57,6 +63,8 @@ #define MPL3115_CTRL3_IPOL2 BIT(1) =20 #define MPL3115_CTRL4_INT_EN_DRDY BIT(7) +#define MPL3115_CTRL4_INT_EN_PTH BIT(3) +#define MPL3115_CTRL4_INT_EN_TTH BIT(2) =20 #define MPL3115_CTRL5_INT_CFG_DRDY BIT(7) =20 @@ -84,6 +92,7 @@ struct mpl3115_data { struct iio_trigger *drdy_trig; struct mutex lock; u8 ctrl_reg1; + u8 ctrl_reg4; }; =20 enum mpl3115_irq_pin { @@ -313,6 +322,15 @@ static irqreturn_t mpl3115_trigger_handler(int irq, vo= id *p) return IRQ_HANDLED; } =20 +static const struct iio_event_spec mpl3115_temp_press_event[] =3D { + { + .type =3D IIO_EV_TYPE_THRESH, + .dir =3D IIO_EV_DIR_RISING, + .mask_separate =3D BIT(IIO_EV_INFO_ENABLE) | + BIT(IIO_EV_INFO_VALUE), + }, +}; + static const struct iio_chan_spec mpl3115_channels[] =3D { { .type =3D IIO_PRESSURE, @@ -328,7 +346,9 @@ static const struct iio_chan_spec mpl3115_channels[] = =3D { .storagebits =3D 32, .shift =3D 12, .endianness =3D IIO_BE, - } + }, + .event_spec =3D mpl3115_temp_press_event, + .num_event_specs =3D ARRAY_SIZE(mpl3115_temp_press_event), }, { .type =3D IIO_TEMP, @@ -344,7 +364,9 @@ static const struct iio_chan_spec mpl3115_channels[] = =3D { .storagebits =3D 16, .shift =3D 4, .endianness =3D IIO_BE, - } + }, + .event_spec =3D mpl3115_temp_press_event, + .num_event_specs =3D ARRAY_SIZE(mpl3115_temp_press_event), }, IIO_CHAN_SOFT_TIMESTAMP(2), }; @@ -354,15 +376,46 @@ static irqreturn_t mpl3115_interrupt_handler(int irq,= void *private) struct iio_dev *indio_dev =3D private; struct mpl3115_data *data =3D iio_priv(indio_dev); int ret; + u8 val_press[3]; + __be16 val_temp; =20 ret =3D i2c_smbus_read_byte_data(data->client, MPL3115_INT_SOURCE); if (ret < 0) return IRQ_HANDLED; =20 - if (!(ret & MPL3115_INT_SRC_DRDY)) + if (!(ret & (MPL3115_INT_SRC_TTH | MPL3115_INT_SRC_PTH | + MPL3115_INT_SRC_DRDY))) return IRQ_NONE; =20 - iio_trigger_poll_nested(data->drdy_trig); + if (ret & MPL3115_INT_SRC_DRDY) + iio_trigger_poll_nested(data->drdy_trig); + + if (ret & MPL3115_INT_SRC_PTH) { + iio_push_event(indio_dev, + IIO_UNMOD_EVENT_CODE(IIO_PRESSURE, 0, + IIO_EV_TYPE_THRESH, + IIO_EV_DIR_RISING), + iio_get_time_ns(indio_dev)); + + /* Reset the SRC_PTH bit in INT_SOURCE */ + i2c_smbus_read_i2c_block_data(data->client, + MPL3115_OUT_PRESS, + sizeof(val_press), val_press); + } + + if (ret & MPL3115_INT_SRC_TTH) { + iio_push_event(indio_dev, + IIO_UNMOD_EVENT_CODE(IIO_TEMP, 0, + IIO_EV_TYPE_THRESH, + IIO_EV_DIR_RISING), + iio_get_time_ns(indio_dev)); + + /* Reset the SRC_TTH bit in INT_SOURCE */ + i2c_smbus_read_i2c_block_data(data->client, + MPL3115_OUT_TEMP, + sizeof(val_temp), + (u8 *)&val_temp); + } =20 return IRQ_HANDLED; } @@ -383,6 +436,7 @@ static int mpl3115_config_interrupt(struct mpl3115_data= *data, goto reg1_cleanup; =20 data->ctrl_reg1 =3D ctrl_reg1; + data->ctrl_reg4 =3D ctrl_reg4; =20 return 0; =20 @@ -396,15 +450,22 @@ static int mpl3115_set_trigger_state(struct iio_trigg= er *trig, bool state) { struct iio_dev *indio_dev =3D iio_trigger_get_drvdata(trig); struct mpl3115_data *data =3D iio_priv(indio_dev); - u8 ctrl_reg1 =3D data->ctrl_reg1; - u8 ctrl_reg4 =3D state ? MPL3115_CTRL4_INT_EN_DRDY : 0; + u8 ctrl_reg1, ctrl_reg4; =20 - if (state) + guard(mutex)(&data->lock); + + ctrl_reg1 =3D data->ctrl_reg1; + ctrl_reg4 =3D data->ctrl_reg4; + + if (state) { ctrl_reg1 |=3D MPL3115_CTRL1_ACTIVE; - else - ctrl_reg1 &=3D ~MPL3115_CTRL1_ACTIVE; + ctrl_reg4 |=3D MPL3115_CTRL4_INT_EN_DRDY; + } else { + ctrl_reg4 &=3D ~MPL3115_CTRL4_INT_EN_DRDY; =20 - guard(mutex)(&data->lock); + if (!ctrl_reg4) + ctrl_reg1 &=3D ~MPL3115_CTRL1_ACTIVE; + } =20 return mpl3115_config_interrupt(data, ctrl_reg1, ctrl_reg4); } @@ -413,10 +474,150 @@ static const struct iio_trigger_ops mpl3115_trigger_= ops =3D { .set_trigger_state =3D mpl3115_set_trigger_state, }; =20 +static int mpl3115_read_event_config(struct iio_dev *indio_dev, + const struct iio_chan_spec *chan, + enum iio_event_type type, + enum iio_event_direction dir) +{ + struct mpl3115_data *data =3D iio_priv(indio_dev); + + if (chan->type =3D=3D IIO_PRESSURE) + return !!(data->ctrl_reg4 & MPL3115_CTRL4_INT_EN_PTH); + + if (chan->type =3D=3D IIO_TEMP) + return !!(data->ctrl_reg4 & MPL3115_CTRL4_INT_EN_TTH); + + return -EINVAL; +} + +static int mpl3115_write_event_config(struct iio_dev *indio_dev, + const struct iio_chan_spec *chan, + enum iio_event_type type, + enum iio_event_direction dir, + bool state) +{ + struct mpl3115_data *data =3D iio_priv(indio_dev); + u8 int_en_mask; + u8 ctrl_reg1, ctrl_reg4; + + switch (chan->type) { + case IIO_PRESSURE: + int_en_mask =3D MPL3115_CTRL4_INT_EN_PTH; + break; + case IIO_TEMP: + int_en_mask =3D MPL3115_CTRL4_INT_EN_TTH; + break; + default: + return -EINVAL; + } + + guard(mutex)(&data->lock); + + ctrl_reg1 =3D data->ctrl_reg1; + ctrl_reg4 =3D data->ctrl_reg4; + + if (state) { + ctrl_reg1 |=3D MPL3115_CTRL1_ACTIVE; + ctrl_reg4 |=3D int_en_mask; + } else { + ctrl_reg4 &=3D ~int_en_mask; + + if (!ctrl_reg4) + ctrl_reg1 &=3D ~MPL3115_CTRL1_ACTIVE; + } + + return mpl3115_config_interrupt(data, ctrl_reg1, ctrl_reg4); +} + +static int mpl3115_read_thresh(struct iio_dev *indio_dev, + const struct iio_chan_spec *chan, + enum iio_event_type type, + enum iio_event_direction dir, + enum iio_event_info info, + int *val, int *val2) +{ + struct mpl3115_data *data =3D iio_priv(indio_dev); + int ret; + __be16 press_tgt; + + if (info !=3D IIO_EV_INFO_VALUE) + return -EINVAL; + + switch (chan->type) { + case IIO_PRESSURE: + ret =3D i2c_smbus_read_i2c_block_data(data->client, + MPL3115_PRESS_TGT, + sizeof(press_tgt), + (u8 *)&press_tgt); + if (ret < 0) + return ret; + + /* + * Target value for the pressure is 16-bit unsigned value, + * expressed in 2 Pa units + */ + *val =3D be16_to_cpu(press_tgt) << 1; + + return IIO_VAL_INT; + case IIO_TEMP: + ret =3D i2c_smbus_read_byte_data(data->client, MPL3115_TEMP_TGT); + if (ret < 0) + return ret; + + /* Target value for the temperature is 8-bit 2's complement */ + *val =3D sign_extend32(ret, 7); + + return IIO_VAL_INT; + default: + return -EINVAL; + } +} + +static int mpl3115_write_thresh(struct iio_dev *indio_dev, + const struct iio_chan_spec *chan, + enum iio_event_type type, + enum iio_event_direction dir, + enum iio_event_info info, + int val, int val2) +{ + struct mpl3115_data *data =3D iio_priv(indio_dev); + __be16 press_tgt; + + if (info !=3D IIO_EV_INFO_VALUE) + return -EINVAL; + + switch (chan->type) { + case IIO_PRESSURE: + val >>=3D 1; + + if (val < 0 || val > U16_MAX) + return -EINVAL; + + press_tgt =3D cpu_to_be16(val); + + return i2c_smbus_write_i2c_block_data(data->client, + MPL3115_PRESS_TGT, + sizeof(press_tgt), + (u8 *)&press_tgt); + case IIO_TEMP: + if (val < S8_MIN || val > S8_MAX) + return -EINVAL; + + return i2c_smbus_write_byte_data(data->client, + MPL3115_TEMP_TGT, val); + default: + return -EINVAL; + } +} + static const struct iio_info mpl3115_info =3D { .read_raw =3D &mpl3115_read_raw, .read_avail =3D &mpl3115_read_avail, .write_raw =3D &mpl3115_write_raw, + .read_event_config =3D mpl3115_read_event_config, + .write_event_config =3D mpl3115_write_event_config, + .read_event_value =3D mpl3115_read_thresh, + .write_event_value =3D mpl3115_write_thresh, }; =20 static int mpl3115_trigger_probe(struct mpl3115_data *data, --=20 2.25.1 From nobody Tue Dec 9 03:04:50 2025 Received: from mail-wr1-f51.google.com (mail-wr1-f51.google.com [209.85.221.51]) (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 54C352EFD8A for ; Wed, 12 Nov 2025 22:57:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762988253; cv=none; b=nKcqW+10+2xWrydF4/vkG46HwjB5JTurJYq/W7t3OKH1oL3qgF13GnyBP3JH1wQqUkokYT8hS7vyaD2FGyJ3QYTiUSNW0RSsmUzFX3+6ICseNX8P4jB8BFZiuUE+dcfGt49Ex/uAZT1/CmwbUuDtBTh2sr8M/I4yPRpQT9DjJ74= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762988253; c=relaxed/simple; bh=gC1f61DmLG1P9pAkwLU/JjaVxGu82BLBwYykpQQ5tcw=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=NLd9Z1QNUHrNs//h4t/2d0RCT5tIVrqpopcDr4yCqB6K9goYN5uuIqv5PBtjevmbnZiz7sI8SjMOv2XsgtoTfbxO22GzZ3R8yju2yZs8LMnejlAUc2bVXkYQUpPv2oAVWWk7ftGb+/j9qjOaF4A4HQy8X3Sa4/o8x1AQEnBu6q0= 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=LiFN5J2o; arc=none smtp.client-ip=209.85.221.51 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="LiFN5J2o" Received: by mail-wr1-f51.google.com with SMTP id ffacd0b85a97d-42b32a3e78bso170106f8f.0 for ; Wed, 12 Nov 2025 14:57:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1762988250; x=1763593050; 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=vDdGU9f1AjnbUUZofpssnIOwmqCSincQK/z8WMfUJ40=; b=LiFN5J2oICD8D4UpNq73/60lM1jSqqtCN12XSVyGH/O2b89rwteB8yEdBsFR6UIju8 NJm2HJ4uMfn9SFdyGwq+Rm4i/G8dGJNyvDv9Zzr8hIeBpsYT6vZG4clhGssAdkM+m2yY lKikoOLaGfbQovsexzhgs7OxIy5d0UZsm5WStgE8Odi8E+aIreC3sTGcaDAhytS1es+r Ph9s/elcaQ3BYbGdvW+To5+UHeySz1pzDHjxnvqCxDSaYcscvAmZ4dgtPOZcQrfvKQdq 4mqRC0zRuvLZhk47f8WKOb1cytakM25DKg+UhAcgsQuLW670bHSq2GnCAgyJ0LhK5E39 qUDA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762988250; x=1763593050; 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=vDdGU9f1AjnbUUZofpssnIOwmqCSincQK/z8WMfUJ40=; b=SiKXT9tKzQjsKy3MZ2UCrpb20TQP0SmFOkBFWfcOk4ekgwJ+CdsQ2WBoyTcIvpOM7s Eg7NA280QvMusDrLlX00L+z+Osho2q6NkXRXxFoYYqn+Y/xvWPmlXVeEMspJPJrV6sSm LOZTyH+5DxPtIgGcB2tC/HnmilJXbCVzA0100ERWCQ7xHreqGoklbCpqb+OiCrwNfdyE S5zt6Hf0lmqeD/JGRqg01eDDSA9irN9vLH5EVaG//vYuVVhMYdjqXKrarXLPXNGpZDTi +CxBxw/4oAJLaJ2VgbiHrb8IPVP8lsHD7FO2q59teuogRQNvHXMzQU273EPkTGZxsZhm WAKg== X-Forwarded-Encrypted: i=1; AJvYcCWyhpb5eOCJgCpeTybmeYMlTC53nA4WzeatbbYbbjxJ/db/rIOylYy9zUn9QhehgSe2wmt3EmijKED5pDQ=@vger.kernel.org X-Gm-Message-State: AOJu0Ywig2z4DUL5FMoyvJsIQjbIUB7Lk2zK/kiqLXitvFWVr9pFUHC9 oaj2LEvO+BncDq5xpBKDHrIxXfP0z+u2u2DUeh03oYnG374+UBZ7Ih1e X-Gm-Gg: ASbGncsdSy6j6uzFY3WgFOaO8CKzRQS/2B9/bL81b1e4tPF/qrvr11Eb0YvQySbrnwN 6qz1X8UZLoPPMrAvL4qtVpddJEYwEXODycH1nAuMlzAxfSmL5A6jXvG7SpaE7yN6VlryxZU9rMo VK+sf4yFPEA4uizhi5XhlbMIsfWI14Pd9t/AeCi4XouYYR4OOGtyZSyLgDe5sL5CPOCad2t2R4V xL60KnvI4CIqCLsMcUeGBAG2KNB+QXXziHy/XS1pPK5I2j5dMeG3kQ46wGATRFW8sayQykAxV59 ZgYAUUwfad9FBDqtXtw28fPcFkrTo2TIvJcjw5+O7+NUtortT6smiyo+rn1OgklT4EvCGjfqwcb 1RFOqiO5PnWhbhIN4nPPR8K7+ip5ikjskUA13AZ+oa8+UKEE1RCAAMb4F9CdPxUvl37XC7cIO X-Google-Smtp-Source: AGHT+IHd2ghe5/cUirh89dZkN5PNcB58L5BDtdQaut5HE/Jd3Vznjz6w0+Wyr/d7Bgq1xX0pEP1YUw== X-Received: by 2002:a05:6000:4008:b0:429:d6dc:ae1a with SMTP id ffacd0b85a97d-42b4bd9bca6mr5035268f8f.30.1762988249643; Wed, 12 Nov 2025 14:57:29 -0800 (PST) Received: from localhost.localdomain ([78.209.131.33]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-42b53e85cc0sm236979f8f.17.2025.11.12.14.57.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Nov 2025 14:57:29 -0800 (PST) From: Antoni Pokusinski To: jic23@kernel.org, dlechner@baylibre.com, nuno.sa@analog.com, andy@kernel.org, marcelo.schmitt1@gmail.com Cc: linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, Antoni Pokusinski Subject: [PATCH v4 3/3] iio: ABI: document pressure event attributes Date: Wed, 12 Nov 2025 23:57:01 +0100 Message-Id: <20251112225701.32158-4-apokusinski01@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20251112225701.32158-1-apokusinski01@gmail.com> References: <20251112225701.32158-1-apokusinski01@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: quoted-printable Content-Type: text/plain; charset="utf-8" Add sysfs pressure event attributes exposed by the mpl3115 driver. These allow controlling the threshold value and the enable state. Reviewed-by: Marcelo Schmitt Signed-off-by: Antoni Pokusinski --- Documentation/ABI/testing/sysfs-bus-iio | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Documentation/ABI/testing/sysfs-bus-iio b/Documentation/ABI/te= sting/sysfs-bus-iio index 352ab7b8476c..5f87dcee78f7 100644 --- a/Documentation/ABI/testing/sysfs-bus-iio +++ b/Documentation/ABI/testing/sysfs-bus-iio @@ -898,6 +898,7 @@ What: /sys/.../iio:deviceX/events/in_tempY_thresh_risi= ng_en What: /sys/.../iio:deviceX/events/in_tempY_thresh_falling_en What: /sys/.../iio:deviceX/events/in_capacitanceY_thresh_rising_en What: /sys/.../iio:deviceX/events/in_capacitanceY_thresh_falling_en +What: /sys/.../iio:deviceX/events/in_pressure_thresh_rising_en KernelVersion: 2.6.37 Contact: linux-iio@vger.kernel.org Description: @@ -1047,6 +1048,7 @@ What: /sys/.../events/in_capacitanceY_thresh_rising_= value What: /sys/.../events/in_capacitanceY_thresh_falling_value What: /sys/.../events/in_capacitanceY_thresh_adaptive_rising_value What: /sys/.../events/in_capacitanceY_thresh_falling_rising_value +What: /sys/.../events/in_pressure_thresh_rising_value KernelVersion: 2.6.37 Contact: linux-iio@vger.kernel.org Description: --=20 2.25.1