From patchwork Sun Mar 3 16:52:57 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vasileios Amoiridis X-Patchwork-Id: 13579852 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 2DE8E6CDA5; Sun, 3 Mar 2024 16:53:06 +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=1709484788; cv=none; b=BGS4PtiLXXpqG/nbSGqegyQlx5Q/CAKyh0Ibvp6Kzv++5r3+sqhiMMaHDlTjyMqH5L7Rdhlg1Iz9vqvYx2JZpOeGUxmnBQYf9Jmos2tOs5Jd+DA/y1hbk6DS4KPGu+gLgWJZuzO+P2F068ie0Ok9RA7tCOoOjpvabsOskhUYVVU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709484788; c=relaxed/simple; bh=Wfe7KoyPBJuztYDXFmPvXzBPupp06EERxKSm+IcMdrA=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=gdmm8xmoKdpfVeH72KuikzYzR5CzyqpzfPXNZd8tu628SHX0KLrbnSxSkpLW7n7M+KWPTGopnN/ME4A8SyT8xrfWemohfYg0FLpYfjbW16Pxl2JOFW0RPYoBOTgM7SdxDv8JD2U+F0XhAi59iOXTnMYjFSkM/veC6ifaQdrlfnc= 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=mh8NdNmZ; arc=none smtp.client-ip=209.85.218.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="mh8NdNmZ" Received: by mail-ej1-f46.google.com with SMTP id a640c23a62f3a-a36126ee41eso576597066b.2; Sun, 03 Mar 2024 08:53:06 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1709484785; x=1710089585; 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=q+LGfZkm2kC8YjDAnvH8fwRgpj06URDP8BZpJfKxTVo=; b=mh8NdNmZuc07NcAXflmSH6kQIL2R8eeabkWgfLViXbRZIvx+LgoauOzhMWxrLwTZmJ dxKplpKTp6c646mGEGmCr8oHfcSWN8aKsmQ3xya6gTV3tJL4WfQwYvBgQ5vamzlRW0Rm 5Hmvs0ireqXbqC4U4RqM76xmXxJPD71lOKaxVxuhF0IQSEaB2Xr+weZM+IF3NkoIzWs4 HQMSSQrnzXzxdGU9xyqxS6b05a3OmS9FNA3TVRw2GbwKw48cqKghbWO6tziqG2I7tr4s dqWaEQjcnmlGOAsvxjTtNmUd7FmnOzesMnjnpRETMCixaFMvL/Y7QaQKb9LZn4ET135b dEiA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1709484785; x=1710089585; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=q+LGfZkm2kC8YjDAnvH8fwRgpj06URDP8BZpJfKxTVo=; b=mYjuQlOog4PJuIF9iqImtM2bhee6crAP5rOkWSlAE0sBKpfEgfUnmFtR+JDGr+5LWO X4rKxLJMjUD45FgNQ6hmiLj4AQ2CjF8gSCAY6JJagXs3RcjrAqljBouGQ2GUGbQG8p0u f7DTvcgBfrIJpUBJOYVcvR9doz6SQCbZxFPPBJK2kcbqWkrdTlPO6nPSQoMllwbYRyCB iEBarVl8PpPxqdWoTQPo8XMBzC1ybPGQsz3RSQta4wWqcXdQkDsI2nnray2MHMFWNLOo xwT7iOjzkCJVyYSYjPK4fjW62XbJhs1FD003D9ln3L0579sXuzXEXg1F8xI0EGwiD2jB OeTg== X-Forwarded-Encrypted: i=1; AJvYcCVVXiEb1kmLDK/KpU1QHcm8j8kOjclfyOv+V6lHq1eXug2ZVhHGsq0j/N3/7oPtuLc6EUp6cGzNLWAJzqKyWf6LBLDhsFjv+mBVFN8UP6i5YVkz37jbjNCzm47G24Q5JNGtG6NLxtTk X-Gm-Message-State: AOJu0YySMfHlZU7Vsi9QdCL9+1I5eDaiDTJ0IT6foPBRQB3K2a+7/p97 N03Ii7R2A2gxm4j444laOshWeX8BKnZxsQMbMHJDrrcUEQUytSNg X-Google-Smtp-Source: AGHT+IGLHdpuVRRL7XZYY+Cu40TxzcnpQ+KtuPjarPvLbWkrGLDMQfR0DCyrG6Eoco4FDr3HkqGWmw== X-Received: by 2002:a17:906:3e09:b0:a45:514a:24f4 with SMTP id k9-20020a1709063e0900b00a45514a24f4mr98967eji.23.1709484785435; Sun, 03 Mar 2024 08:53:05 -0800 (PST) Received: from localhost.localdomain ([2a04:ee41:82:7577:d4e3:724b:4d69:34b2]) by smtp.gmail.com with ESMTPSA id lh15-20020a170906f8cf00b00a44f14c8d64sm1413992ejb.135.2024.03.03.08.53.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 03 Mar 2024 08:53:05 -0800 (PST) From: Vasileios Amoiridis To: jic23@kernel.org Cc: lars@metafoo.de, andriy.shevchenko@linux.intel.com, ang.iglesiasg@gmail.com, mazziesaccount@gmail.com, ak@it-klinger.de, petre.rodan@subdimension.ro, phil@raspberrypi.com, 579lpy@gmail.com, linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, Vasileios Amoiridis Subject: [PATCH 1/4] iio: pressure: BMP280 core driver headers sorting Date: Sun, 3 Mar 2024 17:52:57 +0100 Message-Id: <20240303165300.468011-2-vassilisamir@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20240303165300.468011-1-vassilisamir@gmail.com> References: <20240303165300.468011-1-vassilisamir@gmail.com> Precedence: bulk X-Mailing-List: linux-iio@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Sort headers in alphabetical order. Signed-off-by: Vasileios Amoiridis --- drivers/iio/pressure/bmp280-core.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/drivers/iio/pressure/bmp280-core.c b/drivers/iio/pressure/bmp280-core.c index fe8734468ed3..29a8b7195076 100644 --- a/drivers/iio/pressure/bmp280-core.c +++ b/drivers/iio/pressure/bmp280-core.c @@ -27,20 +27,20 @@ #include #include -#include -#include -#include -#include +#include #include +#include +#include #include #include -#include -#include #include #include /* For irq_get_irq_data() */ -#include +#include +#include #include #include +#include +#include #include From patchwork Sun Mar 3 16:52:58 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vasileios Amoiridis X-Patchwork-Id: 13579853 Received: from mail-ej1-f45.google.com (mail-ej1-f45.google.com [209.85.218.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 060FC6E5EC; Sun, 3 Mar 2024 16:53:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709484790; cv=none; b=YL1jkRdIYzrGht0wyr2RcpCqVowJMsKe09joV1FTWatIIY6kOI8zqXzubDtu4IYyjwAu2cL0c1mMvzLjeYW5j6ORsCFTbcN7yxWKYlI8XonL65o5uhy/6fa2gg9s3g2EPnhT5WK3zomNyYdFLjjfdF/9nbqEUqCfjOW3wLBSIKQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709484790; c=relaxed/simple; bh=jVXy9lioZ8kjlYkytLDO0ybrYl1qAi+3ZwTGHGj4x7Y=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=RSPV4XPYXZ9nsqevDV0j6Q2Es1/Hj8pUx62L3Xr/nJaSqLVA77WIMQu9EAY2iD9VF6RwDAatk3gW/GdiIedfmR5TCbEn5E44pZeWI6xrHwAe7lthLNCTKHYxw5c4B5MxOWzOYZfTtR1K42whLjd8AYrx5FCg+Ior8aFh2F/V0/M= 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=fvFvC23s; arc=none smtp.client-ip=209.85.218.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="fvFvC23s" Received: by mail-ej1-f45.google.com with SMTP id a640c23a62f3a-a36126ee41eso576598566b.2; Sun, 03 Mar 2024 08:53:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1709484787; x=1710089587; 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=VRG8TNmENP/pTcySnhHli+1ouRQdj2vqC4wgPeKT1sQ=; b=fvFvC23sSjn9beHvqIg3pcnROzEFwA/9/fi/qX3ThqPacBk9jEZa4kxA9EzOzPOZ9g yYHH65jgYGGfB1Zem9B46tQNQCUXe/7WKgBGc7AE5zX40nRPEY0M3d4hzKOc+KPcKVMB DHSkOI8w+qz8Fk/i1E0hSSkAtJobQyzAriq70x/1yux7fb/VFcwv4CIuC1p6BTk4sAL0 Hsax//rjuHwo2t5NvMjA+ieXL3RNtfkwdCgFfc243hm29oeK7fg65RqnnSZoWLtuj/VH Pd6oVkZl/iPURnpdscxWieMCcPkN7lni2HgQT9/Rv7nzF23wMIvQeBlwTftzIM6OTSpi fa2Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1709484787; x=1710089587; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=VRG8TNmENP/pTcySnhHli+1ouRQdj2vqC4wgPeKT1sQ=; b=nxV2e1UeAELg6iKsPSite2jQWRbo3uWtK2Y4ODdGYTVn2C+hKZgMnx2sN2KR1yS9y+ OYV7OaCM8bDeuYjSmtkkLfSxM5iLD5xPtPfba3m8unuLrAn8kunMSEhN9CWCcaYGNt5I apQmQ6mbnWBb0t9ZSbKDZ43/OVFFtvwzJ0sVuggba62jBw2lOSsZl/tdRcfrWyCZNcra xgIwj6cjX+CAbwhuC53CEu0LvkuQfPmbxhvdqnkdFOuvHU9UUoewKFOd70YXon0Z/tCh +NWbgexly2/ioeDPhE9DZ+VkKPJY23jwMY1v9vFurZnRK3xYHPLWrR149KOa3Pv0ZbHp 5uXA== X-Forwarded-Encrypted: i=1; AJvYcCXlcLlxcVJ0pGb3GbQLORjGsV8w/cQS6XqQ8CRIfbQVgeNBWdAJAEDnZGkIj7SuFkbhSki/S7Pbgp0vv2xNTc29vB8Fr+slYUNPKwQRxCSbH2FENMii38v5QZgWnJy8Wh2rs4hxmpwN X-Gm-Message-State: AOJu0Yx71okllLln16AVqL78+Nufxp6RC8eE8fRH8nltY1DDIsmIeLpH 0G59PLoK1ZKhJUqtIslo/3U3WfsbJpQLlYNATLjiXVnbPxTbQaYvfGrOWUsotSUVcurC X-Google-Smtp-Source: AGHT+IFwkivHORp9/DELAvjWF9pUwUuYgSYHm6ZvEsidzS7M0b2A0y1EUXDO7uhNbQoD9YA5M6sVrQ== X-Received: by 2002:a17:906:2411:b0:a44:e92:ebcb with SMTP id z17-20020a170906241100b00a440e92ebcbmr5005844eja.21.1709484787156; Sun, 03 Mar 2024 08:53:07 -0800 (PST) Received: from localhost.localdomain ([2a04:ee41:82:7577:d4e3:724b:4d69:34b2]) by smtp.gmail.com with ESMTPSA id lh15-20020a170906f8cf00b00a44f14c8d64sm1413992ejb.135.2024.03.03.08.53.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 03 Mar 2024 08:53:06 -0800 (PST) From: Vasileios Amoiridis To: jic23@kernel.org Cc: lars@metafoo.de, andriy.shevchenko@linux.intel.com, ang.iglesiasg@gmail.com, mazziesaccount@gmail.com, ak@it-klinger.de, petre.rodan@subdimension.ro, phil@raspberrypi.com, 579lpy@gmail.com, linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, Vasileios Amoiridis Subject: [PATCH 2/4] iio: pressure: Add scale value for channels Date: Sun, 3 Mar 2024 17:52:58 +0100 Message-Id: <20240303165300.468011-3-vassilisamir@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20240303165300.468011-1-vassilisamir@gmail.com> References: <20240303165300.468011-1-vassilisamir@gmail.com> Precedence: bulk X-Mailing-List: linux-iio@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Add extra IIO_CHAN_INFO_SCALE in order to be able to have the scales for the values in userspace. Can be used for triggered buffers. Signed-off-by: Vasileios Amoiridis --- drivers/iio/pressure/bmp280-core.c | 70 ++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) diff --git a/drivers/iio/pressure/bmp280-core.c b/drivers/iio/pressure/bmp280-core.c index 29a8b7195076..acdf6138d317 100644 --- a/drivers/iio/pressure/bmp280-core.c +++ b/drivers/iio/pressure/bmp280-core.c @@ -138,16 +138,19 @@ static const struct iio_chan_spec bmp280_channels[] = { { .type = IIO_PRESSURE, .info_mask_separate = BIT(IIO_CHAN_INFO_PROCESSED) | + BIT(IIO_CHAN_INFO_SCALE) | BIT(IIO_CHAN_INFO_OVERSAMPLING_RATIO), }, { .type = IIO_TEMP, .info_mask_separate = BIT(IIO_CHAN_INFO_PROCESSED) | + BIT(IIO_CHAN_INFO_SCALE) | BIT(IIO_CHAN_INFO_OVERSAMPLING_RATIO), }, { .type = IIO_HUMIDITYRELATIVE, .info_mask_separate = BIT(IIO_CHAN_INFO_PROCESSED) | + BIT(IIO_CHAN_INFO_SCALE) | BIT(IIO_CHAN_INFO_OVERSAMPLING_RATIO), }, }; @@ -156,6 +159,7 @@ static const struct iio_chan_spec bmp380_channels[] = { { .type = IIO_PRESSURE, .info_mask_separate = BIT(IIO_CHAN_INFO_PROCESSED) | + BIT(IIO_CHAN_INFO_SCALE) | BIT(IIO_CHAN_INFO_OVERSAMPLING_RATIO), .info_mask_shared_by_all = BIT(IIO_CHAN_INFO_SAMP_FREQ) | BIT(IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY), @@ -163,6 +167,7 @@ static const struct iio_chan_spec bmp380_channels[] = { { .type = IIO_TEMP, .info_mask_separate = BIT(IIO_CHAN_INFO_PROCESSED) | + BIT(IIO_CHAN_INFO_SCALE) | BIT(IIO_CHAN_INFO_OVERSAMPLING_RATIO), .info_mask_shared_by_all = BIT(IIO_CHAN_INFO_SAMP_FREQ) | BIT(IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY), @@ -170,6 +175,7 @@ static const struct iio_chan_spec bmp380_channels[] = { { .type = IIO_HUMIDITYRELATIVE, .info_mask_separate = BIT(IIO_CHAN_INFO_PROCESSED) | + BIT(IIO_CHAN_INFO_SCALE) | BIT(IIO_CHAN_INFO_OVERSAMPLING_RATIO), .info_mask_shared_by_all = BIT(IIO_CHAN_INFO_SAMP_FREQ) | BIT(IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY), @@ -487,6 +493,70 @@ static int bmp280_read_raw(struct iio_dev *indio_dev, break; } break; + case IIO_CHAN_INFO_SCALE: + switch (chan->type) { + case IIO_HUMIDITYRELATIVE: + if (!strcmp(indio_dev->name, "bme280")) { + *val = 1000; + *val2 = 1024; + ret = IIO_VAL_FRACTIONAL; + } else { + ret = -EINVAL; + } + break; + case IIO_PRESSURE: + if ((!strcmp(indio_dev->name, "bmp085")) || + (!strcmp(indio_dev->name, "bmp180")) || + (!strcmp(indio_dev->name, "bmp181"))) { + *val = 1; + *val2 = 1000; + ret = IIO_VAL_FRACTIONAL; + } else if ((!strcmp(indio_dev->name, "bmp280")) || + (!strcmp(indio_dev->name, "bme280"))) { + *val = 1; + *val2 = 256000; + ret = IIO_VAL_FRACTIONAL; + } else if (!strcmp(indio_dev->name, "bmp380")) { + *val = 1; + *val2 = 100000; + ret = IIO_VAL_FRACTIONAL; + } else if (!strcmp(indio_dev->name, "bmp580")) { + *val = 1; + *val2 = 64000; + ret = IIO_VAL_FRACTIONAL; + } else { + ret = -EINVAL; + } + break; + case IIO_TEMP: + if ((!strcmp(indio_dev->name, "bmp085")) || + (!strcmp(indio_dev->name, "bmp180")) || + (!strcmp(indio_dev->name, "bmp181"))) { + *val = 100; + *val2 = 1; + ret = IIO_VAL_FRACTIONAL; + } else if ((!strcmp(indio_dev->name, "bmp280")) || + (!strcmp(indio_dev->name, "bme280"))) { + *val = 10; + *val2 = 1; + ret = IIO_VAL_FRACTIONAL; + } else if (!strcmp(indio_dev->name, "bmp380")) { + *val = 10; + *val2 = 1; + ret = IIO_VAL_FRACTIONAL; + } else if (!strcmp(indio_dev->name, "bmp580")) { + *val = 1000; + *val2 = 16; + ret = IIO_VAL_FRACTIONAL_LOG2; + } else { + ret = -EINVAL; + } + break; + default: + ret = -EINVAL; + break; + } + break; case IIO_CHAN_INFO_OVERSAMPLING_RATIO: switch (chan->type) { case IIO_HUMIDITYRELATIVE: From patchwork Sun Mar 3 16:52:59 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vasileios Amoiridis X-Patchwork-Id: 13579854 Received: from mail-lf1-f48.google.com (mail-lf1-f48.google.com [209.85.167.48]) (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 17D556F534; Sun, 3 Mar 2024 16:53:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709484796; cv=none; b=R42PEkPzBQaVRAZGnkB9jP9q7+CGhmeaDqf48LEzmRZzMBvvA0We5og8iQ5N/BVhU0xoIaZdNNfBAaKXBeBjFu1P4v0uAtKRDyZoxjnGLiDcCUBOTUvMu9zCFB/7ESsJFkK2vMMe+eh3OR5/rJ/8BORUpe2sjn6O0z1r3/d/Eyw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709484796; c=relaxed/simple; bh=bNnxFftLPMdf7q3HsaLS/01VslR/IOK6Av5LVYV91qI=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=JJRHNtREw7igwt71W1FzM96AXio3+eDHVFNDnUxSgmVojpNOVf48f+duOkYQV1i3TuMSS4YydWF7sApNB82B6VlH2t82p4aHqmto0OMtJLgUzyCX9uYP+SbWsEwbavi2/wThdq9mxyH5fGnUWR2mAqDM3rMAPFPFFnk3z4os3y0= 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=IFKiGhKU; arc=none smtp.client-ip=209.85.167.48 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="IFKiGhKU" Received: by mail-lf1-f48.google.com with SMTP id 2adb3069b0e04-5131c0691feso4566221e87.1; Sun, 03 Mar 2024 08:53:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1709484792; x=1710089592; 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=5saPLXm4A0oh+uwK5Efp69UNd7Y9kGQOB8iQdyZT3QE=; b=IFKiGhKUFwG5UY1XtQjU1ykl0HKGVKztIb7NosiHaZ4NwlsV1JqJ7DCBAdbKQ42k9f GNfP3JrDEOh/irORDBuEoAuH9UxqFnRnpyHUTjMtJrqYzemu1pNfXnLvUIdqCERuW97H J5hRwaZnA9sLc+ljVJ9yYuUjK6qUR/BmdfCQjui/ry6W3McGgYM5XA7bvHKdPjtiLMpc ydaNHpx8SrcuV9zq8xUaNUzE489moU6KELV7q6ve2DYVl9yTyHdwEcSBaZ9U2Hw7n9rW k4jMpmVhSvFiO+1IZQbcLFoRMoI9ZyMVMirgZDZbtQWUZW0BC5nTL2JkSlqQAXL6i3Be LBFQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1709484792; x=1710089592; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=5saPLXm4A0oh+uwK5Efp69UNd7Y9kGQOB8iQdyZT3QE=; b=Nu5/ei7Xm6RO/mhBiT6GC1Tav2500VhdGkAoGjiiK9td+RrBNzLMKnAto/yhfjDSK1 uCbgr1r6phpiiNxIrZ9/AcuF9ZLBfx7MJ2TMHtZBQXLQr3jvxClLLPj2WzH5gKvuZurE rxA/NzaX7E4ej/4XE+qWReDKLaN/c3HerFgN4Uaj12g8L8iTO5pmuiF3RFqcgqhcLVXw SksZT1/7KbQkb1dTxgApMDMO0UUAf4yEtuY/vALXSUyAWcVV70P9ZAarAwF+yES2LJr7 kxQ1fEPM20BPIutqj7ESekIAlxvb0HCZUDFudY4xtsTvOUvUgWMMOer79EoQgnuHZ27W Gd+Q== X-Forwarded-Encrypted: i=1; AJvYcCXW7kfynKv00T6sqelrRoTuSIZb9tB/wap5BWqU4iZlo+0IqoWOt2ctKhuL06Kh7gaT4wq3V33rB3Xfclaa71RriY2SM8Njgs8OLgtUWklJ97JWJbfvbcUHunfqdyPKjWpZ6YsYpcFf X-Gm-Message-State: AOJu0YxqIZ9rsoiDoYF1JT6qPtrJLDVzlNX6/G8zkcZXcrDHdqa35kLO phgNxB61Uamy7U4KXzzFPqXCLtw/IL3Y72xbiCIg45YPQnqk3rtw X-Google-Smtp-Source: AGHT+IFRjPG0V3oZ18GlJzZ+Cb6FNCWz/92E47uZgIKx6pU3nz0gB3lwFVhTO15rAdHE+MVhluXiKA== X-Received: by 2002:a05:6512:3a83:b0:513:39c8:10f2 with SMTP id q3-20020a0565123a8300b0051339c810f2mr3508767lfu.30.1709484792128; Sun, 03 Mar 2024 08:53:12 -0800 (PST) Received: from localhost.localdomain ([2a04:ee41:82:7577:d4e3:724b:4d69:34b2]) by smtp.gmail.com with ESMTPSA id lh15-20020a170906f8cf00b00a44f14c8d64sm1413992ejb.135.2024.03.03.08.53.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 03 Mar 2024 08:53:11 -0800 (PST) From: Vasileios Amoiridis To: jic23@kernel.org Cc: lars@metafoo.de, andriy.shevchenko@linux.intel.com, ang.iglesiasg@gmail.com, mazziesaccount@gmail.com, ak@it-klinger.de, petre.rodan@subdimension.ro, phil@raspberrypi.com, 579lpy@gmail.com, linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, Vasileios Amoiridis Subject: [PATCH 3/4] iio: pressure: Add timestamp and scan_masks for BMP280 driver Date: Sun, 3 Mar 2024 17:52:59 +0100 Message-Id: <20240303165300.468011-4-vassilisamir@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20240303165300.468011-1-vassilisamir@gmail.com> References: <20240303165300.468011-1-vassilisamir@gmail.com> Precedence: bulk X-Mailing-List: linux-iio@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 The scan mask for the BME280 device which contains humidity measurement needs to become different in order for the timestamp to be able to work. Scan masks are added for different combinations of measurements. The temperature measurement is needed for either pressure or humidity measurements. Signed-off-by: Vasileios Amoiridis --- drivers/iio/pressure/bmp280-core.c | 113 +++++++++++++++++++++++++---- drivers/iio/pressure/bmp280.h | 1 + 2 files changed, 100 insertions(+), 14 deletions(-) diff --git a/drivers/iio/pressure/bmp280-core.c b/drivers/iio/pressure/bmp280-core.c index acdf6138d317..3bdf6002983f 100644 --- a/drivers/iio/pressure/bmp280-core.c +++ b/drivers/iio/pressure/bmp280-core.c @@ -134,36 +134,86 @@ enum { BMP380_P11 = 20, }; +enum bmp280_scan { + BMP280_TEMP, + BMP280_PRESS, + BME280_HUMID, +}; + static const struct iio_chan_spec bmp280_channels[] = { + { + .type = IIO_TEMP, + .info_mask_separate = BIT(IIO_CHAN_INFO_PROCESSED) | + BIT(IIO_CHAN_INFO_SCALE) | + BIT(IIO_CHAN_INFO_OVERSAMPLING_RATIO), + .scan_index = 0, + .scan_type = { + .sign = 's', + .realbits = 32, + .storagebits = 32, + .endianness = IIO_CPU, + }, + }, { .type = IIO_PRESSURE, .info_mask_separate = BIT(IIO_CHAN_INFO_PROCESSED) | BIT(IIO_CHAN_INFO_SCALE) | BIT(IIO_CHAN_INFO_OVERSAMPLING_RATIO), + .scan_index = 1, + .scan_type = { + .sign = 'u', + .realbits = 32, + .storagebits = 32, + .endianness = IIO_CPU, + }, }, + IIO_CHAN_SOFT_TIMESTAMP(2), +}; + +static const struct iio_chan_spec bme280_channels[] = { { .type = IIO_TEMP, .info_mask_separate = BIT(IIO_CHAN_INFO_PROCESSED) | BIT(IIO_CHAN_INFO_SCALE) | BIT(IIO_CHAN_INFO_OVERSAMPLING_RATIO), + .scan_index = 0, + .scan_type = { + .sign = 's', + .realbits = 32, + .storagebits = 32, + .endianness = IIO_CPU, + }, }, { - .type = IIO_HUMIDITYRELATIVE, + .type = IIO_PRESSURE, .info_mask_separate = BIT(IIO_CHAN_INFO_PROCESSED) | BIT(IIO_CHAN_INFO_SCALE) | BIT(IIO_CHAN_INFO_OVERSAMPLING_RATIO), + .scan_index = 1, + .scan_type = { + .sign = 'u', + .realbits = 32, + .storagebits = 32, + .endianness = IIO_CPU, + }, }, -}; - -static const struct iio_chan_spec bmp380_channels[] = { { - .type = IIO_PRESSURE, + .type = IIO_HUMIDITYRELATIVE, .info_mask_separate = BIT(IIO_CHAN_INFO_PROCESSED) | BIT(IIO_CHAN_INFO_SCALE) | BIT(IIO_CHAN_INFO_OVERSAMPLING_RATIO), - .info_mask_shared_by_all = BIT(IIO_CHAN_INFO_SAMP_FREQ) | - BIT(IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY), + .scan_index = 2, + .scan_type = { + .sign = 'u', + .realbits = 32, + .storagebits = 32, + .endianness = IIO_CPU, + }, }, + IIO_CHAN_SOFT_TIMESTAMP(3), +}; + +static const struct iio_chan_spec bmp380_channels[] = { { .type = IIO_TEMP, .info_mask_separate = BIT(IIO_CHAN_INFO_PROCESSED) | @@ -171,15 +221,30 @@ static const struct iio_chan_spec bmp380_channels[] = { BIT(IIO_CHAN_INFO_OVERSAMPLING_RATIO), .info_mask_shared_by_all = BIT(IIO_CHAN_INFO_SAMP_FREQ) | BIT(IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY), + .scan_index = 0, + .scan_type = { + .sign = 's', + .realbits = 32, + .storagebits = 32, + .endianness = IIO_CPU, + }, }, { - .type = IIO_HUMIDITYRELATIVE, + .type = IIO_PRESSURE, .info_mask_separate = BIT(IIO_CHAN_INFO_PROCESSED) | BIT(IIO_CHAN_INFO_SCALE) | BIT(IIO_CHAN_INFO_OVERSAMPLING_RATIO), .info_mask_shared_by_all = BIT(IIO_CHAN_INFO_SAMP_FREQ) | BIT(IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY), + .scan_index = 1, + .scan_type = { + .sign = 'u', + .realbits = 32, + .storagebits = 32, + .endianness = IIO_CPU, + }, }, + IIO_CHAN_SOFT_TIMESTAMP(2), }; static int bmp280_read_calib(struct bmp280_data *data) @@ -835,6 +900,20 @@ static const struct iio_info bmp280_info = { .write_raw = &bmp280_write_raw, }; +static const unsigned long bmp280_avail_scan_masks[] = { + BIT(BMP280_TEMP), + BIT(BMP280_PRESS) | BIT(BMP280_TEMP), + 0, +}; + +static const unsigned long bme280_avail_scan_masks[] = { + BIT(BMP280_TEMP), + BIT(BMP280_PRESS) | BIT(BMP280_TEMP), + BIT(BME280_HUMID) | BIT(BMP280_TEMP), + BIT(BME280_HUMID) | BIT(BMP280_PRESS) | BIT(BMP280_TEMP), + 0, +}; + static int bmp280_chip_config(struct bmp280_data *data) { u8 osrs = FIELD_PREP(BMP280_OSRS_TEMP_MASK, data->oversampling_temp + 1) | @@ -874,7 +953,8 @@ const struct bmp280_chip_info bmp280_chip_info = { .regmap_config = &bmp280_regmap_config, .start_up_time = 2000, .channels = bmp280_channels, - .num_channels = 2, + .num_channels = 3, + .avail_scan_masks = bmp280_avail_scan_masks, .oversampling_temp_avail = bmp280_oversampling_avail, .num_oversampling_temp_avail = ARRAY_SIZE(bmp280_oversampling_avail), @@ -927,8 +1007,9 @@ const struct bmp280_chip_info bme280_chip_info = { .num_chip_id = ARRAY_SIZE(bme280_chip_ids), .regmap_config = &bmp280_regmap_config, .start_up_time = 2000, - .channels = bmp280_channels, - .num_channels = 3, + .channels = bme280_channels, + .num_channels = 4, + .avail_scan_masks = bme280_avail_scan_masks, .oversampling_temp_avail = bmp280_oversampling_avail, .num_oversampling_temp_avail = ARRAY_SIZE(bmp280_oversampling_avail), @@ -1305,7 +1386,8 @@ const struct bmp280_chip_info bmp380_chip_info = { .regmap_config = &bmp380_regmap_config, .start_up_time = 2000, .channels = bmp380_channels, - .num_channels = 2, + .num_channels = 3, + .avail_scan_masks = bmp280_avail_scan_masks, .oversampling_temp_avail = bmp380_oversampling_avail, .num_oversampling_temp_avail = ARRAY_SIZE(bmp380_oversampling_avail), @@ -1807,7 +1889,8 @@ const struct bmp280_chip_info bmp580_chip_info = { .regmap_config = &bmp580_regmap_config, .start_up_time = 2000, .channels = bmp380_channels, - .num_channels = 2, + .num_channels = 3, + .avail_scan_masks = bmp280_avail_scan_masks, .oversampling_temp_avail = bmp580_oversampling_avail, .num_oversampling_temp_avail = ARRAY_SIZE(bmp580_oversampling_avail), @@ -2072,7 +2155,8 @@ const struct bmp280_chip_info bmp180_chip_info = { .regmap_config = &bmp180_regmap_config, .start_up_time = 2000, .channels = bmp280_channels, - .num_channels = 2, + .num_channels = 3, + .avail_scan_masks = bmp280_avail_scan_masks, .oversampling_temp_avail = bmp180_oversampling_temp_avail, .num_oversampling_temp_avail = @@ -2179,6 +2263,7 @@ int bmp280_common_probe(struct device *dev, /* Apply initial values from chip info structure */ indio_dev->channels = chip_info->channels; indio_dev->num_channels = chip_info->num_channels; + indio_dev->available_scan_masks = chip_info->avail_scan_masks; data->oversampling_press = chip_info->oversampling_press_default; data->oversampling_humid = chip_info->oversampling_humid_default; data->oversampling_temp = chip_info->oversampling_temp_default; diff --git a/drivers/iio/pressure/bmp280.h b/drivers/iio/pressure/bmp280.h index 4012387d7956..d77402cb3121 100644 --- a/drivers/iio/pressure/bmp280.h +++ b/drivers/iio/pressure/bmp280.h @@ -426,6 +426,7 @@ struct bmp280_chip_info { const struct iio_chan_spec *channels; int num_channels; + const unsigned long *avail_scan_masks; unsigned int start_up_time; const int *oversampling_temp_avail; From patchwork Sun Mar 3 16:53:00 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vasileios Amoiridis X-Patchwork-Id: 13579855 Received: from mail-lj1-f172.google.com (mail-lj1-f172.google.com [209.85.208.172]) (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 EF1EE6CDD1; Sun, 3 Mar 2024 16:53:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709484798; cv=none; b=lSa7jnMQV6+WmN5dLpTqIctkipUfzkIPufmW639R6wx3WRks3YxzhZN9NtC7pNH9bunBMu7DKSHC2BvAd0R+288K+Id+KHu96lsHZs7QXrC+Lxl/EPtMi4A5shpNmz+/ORyLwlYGN6srUgTl5vnyC5u10V/nV9MA5jhrq1DDZu8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709484798; c=relaxed/simple; bh=uhESgY2UxXBKI+7rBvTEsnnDNHfYJqOz6gw05iIfEZ8=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=E44XnD+OPkfTixPjjy12kZXBQBFjLdSWbb5Jw0ZwNdOhIUnS9LiqIOAD3MC5bus9lkxLlmvkRi9sGTX37MDPxZLCKRfXs6oRzseQAMJQDhg80r1yhLrvLqaYjijEjxz0l+LyWHMv5rAMRoJonlHZW1Xckb0totAAA19/meT9tyQ= 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=emP4IYTw; arc=none smtp.client-ip=209.85.208.172 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="emP4IYTw" Received: by mail-lj1-f172.google.com with SMTP id 38308e7fff4ca-2d23d301452so40406761fa.1; Sun, 03 Mar 2024 08:53:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1709484794; x=1710089594; 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=nvQGs5JXVU+jRv/aFfQyeDN1+W6T2RkgkEWiTbN0Q2Q=; b=emP4IYTwgb8okUTOxbUC8qlEDpzlN2KKPJJoSMLPFt38yiDF1/kWEX7OU/PJPRJFsx ffebZhJtHdDLJ6tAHySKtxo4RxWKNaeECvM5M5Q+TptcxyrxELiPfFVcRNlAhbnYvE8Y q9th+XoOl0NaDhWegrWRjgUvRjLAp8zkCFBzEHnKAJLShKqPbrWnVmiuzK/Uez83m64+ LVsUvMR1R4DrW0xFXlR1biHBpEp69V63CwyX5Kraxseiwycu2OtsQmTqDqDRK3zPFLJ8 A8cRLcLMHvZC3WopDHlEuKf0wwWSCntGVsEBHyBLb2X2Qd0398wNNn4w6QAXVsksrLoM 3aFQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1709484794; x=1710089594; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=nvQGs5JXVU+jRv/aFfQyeDN1+W6T2RkgkEWiTbN0Q2Q=; b=Jxi330V8JMhphWk5rbAvBQ5fQ2JFsayNsWIFTA3bUfJ3lb1/KaZGCItDzknVszE6F9 xqxWslNnOUlCVGUVxSDdlTI9NcYwV0bh8yCz6ifyTXAITTGo8PfCsuKoSU0TR2fCzC9R v/WKIQMlZCaDrR6TScBv9FCJDafD/VincioaneWz9YPH6Jgu6B+KvXwt7C3by0WWGYYt IirT/5taJb+ORNXpv599hFpr70yom+iMUwvG7qTLlh4J65Ol/Lmvy3mrOS3Sl2fJUoOw zrG3M1WVpyv5zWuZ+y/CPfC7y8x9oRVSmIq+Md/RWhJ51vqyIoty/VNYYJobRYrgEfd9 CEkA== X-Forwarded-Encrypted: i=1; AJvYcCV2Xf+IruRIGG8kyxeSuWSKTLOWEFpX7lkrnLAXIbPXr8riLHLMrRVl3yuN/Y5LisdOgKmPoBVU1Hgrpni7+WBChU5IqgCfd5m/2apkXOqKA/wyi3TYbx1SVVILy0Tmp7LjRATR85f2 X-Gm-Message-State: AOJu0Yzq8gvCBi4FLb4tUbi7BhrgTSq7ZQDau4mXc+9HA+O+dN0u/7AS r0P08nxORrZ2ygoe2zrpnTDj8hWL2si8xSm6J/lGxla+SVKehPHX X-Google-Smtp-Source: AGHT+IHBVQnX6U+5ZuBsF7tNjPtOunE/B/o91NDafDH9W4gR/xabrIQ7eit/M+UkVW/nPPqxZzioLA== X-Received: by 2002:a05:6512:2388:b0:512:be8e:79da with SMTP id c8-20020a056512238800b00512be8e79damr6134926lfv.8.1709484794074; Sun, 03 Mar 2024 08:53:14 -0800 (PST) Received: from localhost.localdomain ([2a04:ee41:82:7577:d4e3:724b:4d69:34b2]) by smtp.gmail.com with ESMTPSA id lh15-20020a170906f8cf00b00a44f14c8d64sm1413992ejb.135.2024.03.03.08.53.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 03 Mar 2024 08:53:13 -0800 (PST) From: Vasileios Amoiridis To: jic23@kernel.org Cc: lars@metafoo.de, andriy.shevchenko@linux.intel.com, ang.iglesiasg@gmail.com, mazziesaccount@gmail.com, ak@it-klinger.de, petre.rodan@subdimension.ro, phil@raspberrypi.com, 579lpy@gmail.com, linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, Vasileios Amoiridis Subject: [PATCH 4/4] iio: pressure: Add triggered buffer support for BMP280 driver Date: Sun, 3 Mar 2024 17:53:00 +0100 Message-Id: <20240303165300.468011-5-vassilisamir@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20240303165300.468011-1-vassilisamir@gmail.com> References: <20240303165300.468011-1-vassilisamir@gmail.com> Precedence: bulk X-Mailing-List: linux-iio@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Add a buffer struct that will hold the values of the measurements and will be pushed to userspace. Modify all read_* functions in order to just read and compensate the data without though converting to the required IIO measurement units which are used for the oneshot captures. Signed-off-by: Vasileios Amoiridis --- drivers/iio/pressure/Kconfig | 2 + drivers/iio/pressure/bmp280-core.c | 155 +++++++++++++++++++++++------ drivers/iio/pressure/bmp280.h | 7 ++ 3 files changed, 134 insertions(+), 30 deletions(-) diff --git a/drivers/iio/pressure/Kconfig b/drivers/iio/pressure/Kconfig index 79adfd059c3a..5145b94b4679 100644 --- a/drivers/iio/pressure/Kconfig +++ b/drivers/iio/pressure/Kconfig @@ -31,6 +31,8 @@ config BMP280 select REGMAP select BMP280_I2C if (I2C) select BMP280_SPI if (SPI_MASTER) + select IIO_BUFFER + select IIO_TRIGGERED_BUFFER help Say yes here to build support for Bosch Sensortec BMP180, BMP280, BMP380 and BMP580 pressure and temperature sensors. Also supports the BME280 with diff --git a/drivers/iio/pressure/bmp280-core.c b/drivers/iio/pressure/bmp280-core.c index 3bdf6002983f..3b1a159e57ea 100644 --- a/drivers/iio/pressure/bmp280-core.c +++ b/drivers/iio/pressure/bmp280-core.c @@ -31,8 +31,12 @@ #include #include #include +#include #include #include +#include +#include +#include #include #include /* For irq_get_irq_data() */ #include @@ -457,13 +461,16 @@ static int bmp280_read_temp(struct bmp280_data *data, /* * val might be NULL if we're called by the read_press routine, - * who only cares about the carry over t_fine value. + * who only cares about the carry over t_fine value or if we're called + * by the buffer handler function. */ if (val) { *val = comp_temp * 10; return IIO_VAL_INT; } + data->iio_buffer.temperature = comp_temp; + return 0; } @@ -494,10 +501,16 @@ static int bmp280_read_press(struct bmp280_data *data, } comp_press = bmp280_compensate_press(data, adc_press); - *val = comp_press; - *val2 = 256000; + /* val might be NULL if we're called by the buffer handler */ + if (val) { + *val = comp_press; + *val2 = 256000; + return IIO_VAL_FRACTIONAL; + } + + data->iio_buffer.pressure = comp_press; - return IIO_VAL_FRACTIONAL; + return 0; } static int bmp280_read_humid(struct bmp280_data *data, int *val, int *val2) @@ -526,9 +539,15 @@ static int bmp280_read_humid(struct bmp280_data *data, int *val, int *val2) } comp_humidity = bmp280_compensate_humidity(data, adc_humidity); - *val = comp_humidity * 1000 / 1024; + /* val might be NULL if we're called by the buffer handler */ + if (val) { + *val = comp_humidity * 1000 / 1024; + return IIO_VAL_INT; + } - return IIO_VAL_INT; + data->iio_buffer.humidity = comp_humidity; + + return 0; } static int bmp280_read_raw(struct iio_dev *indio_dev, @@ -1170,7 +1189,8 @@ static int bmp380_read_temp(struct bmp280_data *data, int *val, int *val2) /* * Val might be NULL if we're called by the read_press routine, - * who only cares about the carry over t_fine value. + * who only cares about the carry over t_fine value or if we're called + * by the buffer handler. */ if (val) { /* IIO reports temperatures in milli Celsius */ @@ -1178,6 +1198,8 @@ static int bmp380_read_temp(struct bmp280_data *data, int *val, int *val2) return IIO_VAL_INT; } + data->iio_buffer.temperature = comp_temp; + return 0; } @@ -1206,11 +1228,17 @@ static int bmp380_read_press(struct bmp280_data *data, int *val, int *val2) } comp_press = bmp380_compensate_press(data, adc_press); - *val = comp_press; - /* Compensated pressure is in cPa (centipascals) */ - *val2 = 100000; + /* val might be NULL if we're called by the buffer handler */ + if (val) { + *val = comp_press; + /* Compensated pressure is in cPa (centipascals) */ + *val2 = 100000; + return IIO_VAL_FRACTIONAL; + } + + data->iio_buffer.pressure = comp_press; - return IIO_VAL_FRACTIONAL; + return 0; } static int bmp380_read_calib(struct bmp280_data *data) @@ -1543,14 +1571,21 @@ static int bmp580_read_temp(struct bmp280_data *data, int *val, int *val2) return -EIO; } - /* - * Temperature is returned in Celsius degrees in fractional - * form down 2^16. We rescale by x1000 to return milli Celsius - * to respect IIO ABI. - */ - *val = raw_temp * 1000; - *val2 = 16; - return IIO_VAL_FRACTIONAL_LOG2; + /* val might be NULL if we're called by the buffer handler */ + if (val) { + /* + * Temperature is returned in Celsius degrees in fractional + * form down 2^16. We rescale by x1000 to return milli Celsius + * to respect IIO ABI. + */ + *val = raw_temp * 1000; + *val2 = 16; + return IIO_VAL_FRACTIONAL_LOG2; + } + + data->iio_buffer.temperature = raw_temp; + + return 0; } static int bmp580_read_press(struct bmp280_data *data, int *val, int *val2) @@ -1570,13 +1605,21 @@ static int bmp580_read_press(struct bmp280_data *data, int *val, int *val2) dev_err(data->dev, "reading pressure skipped\n"); return -EIO; } - /* - * Pressure is returned in Pascals in fractional form down 2^16. - * We rescale /1000 to convert to kilopascal to respect IIO ABI. - */ - *val = raw_press; - *val2 = 64000; /* 2^6 * 1000 */ - return IIO_VAL_FRACTIONAL; + + /* val might be NULL if we're called by the buffer handler */ + if (val) { + /* + * Pressure is returned in Pascals in fractional form down 2^16. + * We rescale /1000 to convert to kilopascal to respect IIO ABI. + */ + *val = raw_press; + *val2 = 64000; /* 2^6 * 1000 */ + return IIO_VAL_FRACTIONAL; + } + + data->iio_buffer.pressure = raw_press; + + return 0; } static const int bmp580_odr_table[][2] = { @@ -2048,13 +2091,16 @@ static int bmp180_read_temp(struct bmp280_data *data, int *val, int *val2) /* * val might be NULL if we're called by the read_press routine, - * who only cares about the carry over t_fine value. + * who only cares about the carry over t_fine value or if we're called + * by the buffer handler. */ if (val) { *val = comp_temp * 100; return IIO_VAL_INT; } + data->iio_buffer.temperature = comp_temp; + return 0; } @@ -2133,10 +2179,16 @@ static int bmp180_read_press(struct bmp280_data *data, comp_press = bmp180_compensate_press(data, adc_press); - *val = comp_press; - *val2 = 1000; + /* val might be NULL if we're called by the buffer handler */ + if (val) { + *val = comp_press; + *val2 = 1000; + return IIO_VAL_FRACTIONAL; + } + + data->iio_buffer.pressure = comp_press; - return IIO_VAL_FRACTIONAL; + return 0; } static int bmp180_chip_config(struct bmp280_data *data) @@ -2217,6 +2269,43 @@ static int bmp085_fetch_eoc_irq(struct device *dev, return 0; } +static irqreturn_t bmp280_buffer_handler(int irq, void *p) +{ + struct iio_poll_func *pf = p; + struct iio_dev *indio_dev = pf->indio_dev; + struct bmp280_data *data = iio_priv(indio_dev); + int ret; + + mutex_lock(&data->lock); + + if (test_bit(BMP280_TEMP, indio_dev->active_scan_mask)) { + ret = data->chip_info->read_temp(data, NULL, NULL); + if (ret < 0) + goto done; + } + + if (test_bit(BMP280_PRESS, indio_dev->active_scan_mask)) { + ret = data->chip_info->read_press(data, NULL, NULL); + if (ret < 0) + goto done; + } + + if (test_bit(BME280_HUMID, indio_dev->active_scan_mask)) { + ret = data->chip_info->read_humid(data, NULL, NULL); + if (ret < 0) + goto done; + } + + iio_push_to_buffers_with_timestamp(indio_dev, &data->iio_buffer, + pf->timestamp); + +done: + mutex_unlock(&data->lock); + iio_trigger_notify_done(indio_dev->trig); + + return IRQ_HANDLED; + +} static void bmp280_pm_disable(void *data) { struct device *dev = data; @@ -2358,6 +2447,12 @@ int bmp280_common_probe(struct device *dev, return ret; } + ret = devm_iio_triggered_buffer_setup(dev, indio_dev, + iio_pollfunc_store_time, + &bmp280_buffer_handler, NULL); + if (ret) + return dev_err_probe(data->dev, ret, + "iio triggered buffer setup failed\n"); /* Enable runtime PM */ pm_runtime_get_noresume(dev); pm_runtime_set_active(dev); diff --git a/drivers/iio/pressure/bmp280.h b/drivers/iio/pressure/bmp280.h index d77402cb3121..d5c0451ebf68 100644 --- a/drivers/iio/pressure/bmp280.h +++ b/drivers/iio/pressure/bmp280.h @@ -400,6 +400,13 @@ struct bmp280_data { */ s32 t_fine; + /* IIO sysfs buffer */ + struct { + s32 temperature; + u32 pressure; + u32 humidity; + s64 timestamp; + } iio_buffer; /* * DMA (thus cache coherency maintenance) may require the * transfer buffers to live in their own cache lines.