From nobody Wed Dec 17 19:18:02 2025 Received: from mail-pf1-f194.google.com (mail-pf1-f194.google.com [209.85.210.194]) (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 4A216218AA0 for ; Sat, 4 Oct 2025 01:56:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.194 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759543008; cv=none; b=OYlMg3lHZDOx7sC7uIBpDXFzAA2C36NQNxUP80n1060SZO9ZBjb0xgGgHzmBmoBHccUN9UvWF+kUrqN3Ar6V49HSTbB5tpWd4+DxKkaBNI+YtY0WpISk+OAawCkisKjQIM9+85dFZMxAK/yfPkjkeZgxYwu3kVfNt/INtGcYJiM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759543008; c=relaxed/simple; bh=9CQjQxJsutgII4B2do5o6K9A2olhaHHOafQzFjMKQdA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Gw2YJa1wI0i7krcXLwGU3W2IRpat8dfvmfjIA7sysQbVRf5AZIOnlqaO/2X++YDHF9UKHLTTI8P7/PJPI8BLxGr3QsWV3hwQDL+Rc0uD/2E5spZ3azZo1g2ut5JLzPWMnsNU2Gx5fZ9gZPd04+8HURl6X9NXvZllAroTajrSs0s= 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=bpId+tUX; arc=none smtp.client-ip=209.85.210.194 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="bpId+tUX" Received: by mail-pf1-f194.google.com with SMTP id d2e1a72fcca58-78af3fe5b17so2468026b3a.2 for ; Fri, 03 Oct 2025 18:56:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1759543004; x=1760147804; 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=rK2RcAWNzYWhY12ieZZB4A3XwiOU33LzfFmZAdexkYc=; b=bpId+tUXTl8vYzIuKZF1w6YRzWBenvh+eBEOoxgv8eZSAKXelAiYBya3G29UMr+Z3i /iY457/zQerzA33mBRloILpLeBnCE7c8BkC24twMFupEz23aztG3bNavwfKL7VwIEALt QOfa3SLpe00jOollc88LW2j8EFrfqYT0mCEwCGUaS1dQFWA6iGtgcXdog6BfeX7EHNI/ 1A+vQV26SYt0b9wmrtnEMewT1VLyyFmsokyxD4OQ18Lla/xSU0BJQ5c71LfaVH78UjKk 4PlQ6scdas70tUhDcWB9BzzCVQWgLo7ERYQCzjPwnKjWaQ9AxXz/7ftM4SCTxQTiUi/c HdNA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1759543004; x=1760147804; 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=rK2RcAWNzYWhY12ieZZB4A3XwiOU33LzfFmZAdexkYc=; b=tGFPmcA3BLVDWZGTq8SyOPrgxeQmZvlhPp7BIEEX/3CI/9wA4jb/yjG6UTAQ/98BYs 0u0ayPmm1oqkMIVyVQJ32hufkdd4Ak9fRiqIEeolqgr4g1y0cUhV/HYAYxzwGuff5lsN C359/sVOT9+ojauDL6pzvpRuxGKLebqLIXQWRmdj4RhX2FQIoYVj/Ep4VhBn0buku7qc Q2yrgpQa7m1er1pCKI6s5FCnTQt3elUfRcuzEwSuG/Lhr669ywkwthHOIuofPBg82ulc PiWdEORYcspL/rXs+i69Ayx2oGNweFORAXZvEctvc+eumXNowckKCRGJDalJVSbz9AFl cgJg== X-Forwarded-Encrypted: i=1; AJvYcCX7vNmVN1Q2ekREE3jXC7r3mLTuHTDl4Er6kSEmblh0AUQe++Urspk90QcECUAUpnrUsc+XnnlddQt/YYE=@vger.kernel.org X-Gm-Message-State: AOJu0YzeL/XV8V+Nn0aGYBoDjLKK2TcEpFjB7b8hhqapYn+qCRT3pC3Z x64QO3LP9aiNtGCKUbFHPs91giHx5moaFQvcbUbjBkRE+DpXvx6TxVJV X-Gm-Gg: ASbGncvV8VPrpbJi615D/+YT5y2SAZw9gNuBYacLBwrZVXTeOSyIO2jh6HTpOzixPIO PCyLB0F39Ij6KkvOPgxO78+POHWg3wASTkqzv6pjqSt5XRiyO/gIs9IRHwROIubhwtgkvmX9AGw HluD6SprYBFBv6OqEgmhDrtdpR9jL45JHthfqtBowSa9G0YLpQf0YMpvokHFQtoGaRq0zMFbdMD lSzSAGC7c64e8NcMmRAI+/q2x5FQ/3tJ3mWEH+fl1OMwY4LtZZEuKMF6csLv/TvgWrW4P8gX2RP UUdMp+Sw3o/BeOUowQzxaxpirVcQ3tTo21rF16VqUrezq8YVwAVfqJrHP4hKkeTEYsoK+mnp45c q6jABIHlOk4rl6WwDjtCihNch0YU+XHLehAhTPRyLLGO8+t+NvdtB2InjXDGTqvkvcw== X-Google-Smtp-Source: AGHT+IGLZrZ8Iq9T39sC4XilbTFNhZxJLoEviq80CK6g39OUwc/4C5+482Wqw0HUfzPUahIppnFM0A== X-Received: by 2002:a17:903:ac3:b0:267:9931:dbfb with SMTP id d9443c01a7336-28e9a664f4dmr62292785ad.54.1759543004557; Fri, 03 Oct 2025 18:56:44 -0700 (PDT) Received: from Ubuntu24.. ([157.33.197.131]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-28e8d134859sm63197485ad.57.2025.10.03.18.56.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 03 Oct 2025 18:56:44 -0700 (PDT) From: Shrikant Raskar To: jic23@kernel.org, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org Cc: dlechner@baylibre.com, nuno.sa@analog.com, andy@kernel.org, matt@ranostay.sg, skhan@linuxfoundation.org, david.hunter.linux@gmail.com, linux-iio@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-kernel-mentees@lists.linux.dev, Shrikant Raskar Subject: [PATCH 1/2] dt-bindings: iio: max30100: Add pulse-width property Date: Sat, 4 Oct 2025 07:26:22 +0530 Message-ID: <20251004015623.7019-2-raskar.shree97@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20251004015623.7019-1-raskar.shree97@gmail.com> References: <20251004015623.7019-1-raskar.shree97@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 MAX30100 sensor supports multiple LED pulse widths (200us, 400us, 800us, 1600us). These settings affect measurement resolution and power consumption. Until now, the driver always defaulted to 1600us. Introduce a new device tree property `maxim,pulse-width` that allows users to select the desired pulse width in microseconds from device tree. Valid values are: 200, 400, 800, 1600. This prepares for driver changes that read this property and configure the SPO2 register accordingly. Signed-off-by: Shrikant Raskar --- .../devicetree/bindings/iio/health/maxim,max30100.yaml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Documentation/devicetree/bindings/iio/health/maxim,max30100.ya= ml b/Documentation/devicetree/bindings/iio/health/maxim,max30100.yaml index 967778fb0ce8..55aaf2ff919b 100644 --- a/Documentation/devicetree/bindings/iio/health/maxim,max30100.yaml +++ b/Documentation/devicetree/bindings/iio/health/maxim,max30100.yaml @@ -27,6 +27,11 @@ properties: LED current whilst the engine is running. First indexed value is the configuration for the RED LED, and second value is for the IR LE= D. =20 + maxim,pulse-width: + maxItems: 1 + description: Pulse width in microseconds + enum: [200, 400, 800, 1600] + additionalProperties: false =20 required: @@ -44,6 +49,7 @@ examples: compatible =3D "maxim,max30100"; reg =3D <0x57>; maxim,led-current-microamp =3D <24000 50000>; + maxim,pulse-width =3D <1600>; interrupt-parent =3D <&gpio1>; interrupts =3D <16 2>; }; --=20 2.43.0 From nobody Wed Dec 17 19:18:02 2025 Received: from mail-pf1-f196.google.com (mail-pf1-f196.google.com [209.85.210.196]) (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 10C7321FF4C for ; Sat, 4 Oct 2025 01:56:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.196 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759543016; cv=none; b=gSWNGhqQBv/Q4arhIVTARR0BrvamZwrl7oN1SSmAAdWwjFQNeshjF/1Yl5KxxDP3hR2Qit9jMVEC8REMfojIgJ38HsQDbuqppaTxXEUmoQb3AVj1a984p9GUv8QhEhYNqrf/Iskjzxv44DxVAuu9SDw/396QTFq/EvwoGD19skk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759543016; c=relaxed/simple; bh=60sFE8dH95IQRhjstRyY7EVNnqU2lIgts0o7HyQejn8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Quh2wSVr/eL9y7sunibk9WuvSCiRvYFDGf/5X9RWOl2GfxcuJJC762Cm3NgOF5qFUh8CnrKG8GxqeeDUdJ0cI3+x3Tlim68w9ZHmJ9jmao2rgwkkAjEokHMaLYKIg+A7rIkQvZpEriXKN57vUAuyQT/Os2kyHvQ9s3DIi12sOpk= 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=ironIDZ4; arc=none smtp.client-ip=209.85.210.196 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="ironIDZ4" Received: by mail-pf1-f196.google.com with SMTP id d2e1a72fcca58-78af9ebe337so2053153b3a.1 for ; Fri, 03 Oct 2025 18:56:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1759543014; x=1760147814; 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=bXs1QSVIqrmDB/CsKZ6PEf+V8gETdC9cB2i9VQlHTvA=; b=ironIDZ4udqKpjhSZpwBgM5dXqqf6gjHm26vva9HCngT685JrolL9UNhibj0dBlwSx l+AKJP2jbVFRSCUtOHvzGDcQ8s5ujWJxPduox8/VF4ydymvgS6SU7/QGtKqC3bTLz5L/ nK1XtYtyMpw5F8efTW6rxPOniakQxBIcq5Lyr898t4N3FBjorBk0p2qvZr02LkVK4mZj 9acOYCcHfHoxsQGAnfJc7lTS+vl7IdAuUEEJzl2dQVgmzW1qfEQBzEzReoHc1rXCc2rr l/oWm+YAW+0KdQofSBE3HOQGYxIXAKT8wir7eXCwqpZyoMCrhB2urOm3eMxYxT1KJRmU DBBQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1759543014; x=1760147814; 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=bXs1QSVIqrmDB/CsKZ6PEf+V8gETdC9cB2i9VQlHTvA=; b=v6N9RJaeEn4cvU9vaQGpGq5IHUmFfu4MinGuOlRx2LN+zm+0qAOzYDKs+OIz4d3Zub OOiRLNdeV5mdYcof0kMjdCXF3MW1d82v26cYkUI/TAZw3AXTJljpxkc7VAKrLPpPq5h/ uEo1fRL+LzAatx53pbhnHixwx2kbW5hT9XRxp3NM0hIcv3IkEUymr4J947G36jqhpK0J af5FQbKhdXC0V32CiOdZz+oXAG/2s2C4ilvKwF/bXokKVmjo26lcz9E6FoCRlp45vDuz AvcWpWfUPjHoJc5ly/36gEilGLeDZbRV7L+GI7xt56ILleYiG45lJzXgS8+W9kDeumRJ 7/Jw== X-Forwarded-Encrypted: i=1; AJvYcCU+21Q8NsChMFXDp6kv/9cCP81VUzKRyxrGXxJ9fzGuFRqLj0SIJN1NLt2s9NI0NcmnHwsqjHY8+76ioLU=@vger.kernel.org X-Gm-Message-State: AOJu0YyIQh/krpQ7F90V6b6KH1HxkBYQyhN/MxlBk1MEbOKsycIDDETb LDaH1xLfYX8vR78nsRO4nzAFjUFsRACFQi3Y+E5SZ/N9WEUNeEswXPtT X-Gm-Gg: ASbGncvTvK3m1PrOqAoy+cTsIKONNI+Sl2fykwN/+uB/FkzXuDz1qbdO8xJ51hq8un2 f3WPse3DlvAsZ86E24ASYz8X/OiuryYh/e2ImFQiZ/qHLMTnP+ZqXKMHxFu2Xj436mR9RovYO1z amv4AWg78N6vfN1bC6103oRwv8Bx8QzfbBBPuCNaWm9i3lSMPR5hdkeyxjoOLvX6k4XKmHjSAKv rkPHwjOaTNXAbI+SVDSAzAQDM6W4y+ODLH8/94rvIFrp/kQV1fcOz6Na82GwmXtCA0OJRBBwnBQ rqKj0nR8cIxb+CU0ikmhAmKUoPIUMExqQDWJaftelqiS+AmiLEhtZFynZD+KwHWbimuMRxRS62G Cwzr0LGTfblJC0/VsB32gkoPbqAzRlPfEiGCRkcO+DwFkXL4GxtlKWTI= X-Google-Smtp-Source: AGHT+IFkvcg76qipc69NuQnIWNLwlZfZsq2gWo9bV8jdBE0nvip+ixi0boun0gdtaOb85HXiysRS2w== X-Received: by 2002:a17:903:40d1:b0:27e:f16f:618b with SMTP id d9443c01a7336-28e9a55c07fmr62108745ad.24.1759543014242; Fri, 03 Oct 2025 18:56:54 -0700 (PDT) Received: from Ubuntu24.. ([157.33.197.131]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-28e8d134859sm63197485ad.57.2025.10.03.18.56.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 03 Oct 2025 18:56:53 -0700 (PDT) From: Shrikant Raskar To: jic23@kernel.org, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org Cc: dlechner@baylibre.com, nuno.sa@analog.com, andy@kernel.org, matt@ranostay.sg, skhan@linuxfoundation.org, david.hunter.linux@gmail.com, linux-iio@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-kernel-mentees@lists.linux.dev, Shrikant Raskar Subject: [PATCH 2/2] iio: health: max30100: Add pulse-width configuration via DT Date: Sat, 4 Oct 2025 07:26:23 +0530 Message-ID: <20251004015623.7019-3-raskar.shree97@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20251004015623.7019-1-raskar.shree97@gmail.com> References: <20251004015623.7019-1-raskar.shree97@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 MAX30100 driver previously hardcoded the SPO2 pulse width to 1600us. This patch adds support for reading the pulse width from device tree (`maxim,pulse-width`) and programming it into the SPO2 configuration register. If no property is provided, the driver falls back to 1600us to preserve existing behavior. Testing: Hardware: Raspberry Pi 3B + MAX30100 breakout Verified DT property read in probe() Confirmed SPO2_CONFIG register written correctly using regmap_read() Signed-off-by: Shrikant Raskar --- drivers/iio/health/max30100.c | 39 +++++++++++++++++++++++++++++++++-- 1 file changed, 37 insertions(+), 2 deletions(-) diff --git a/drivers/iio/health/max30100.c b/drivers/iio/health/max30100.c index 814f521e47ae..2b3348c75beb 100644 --- a/drivers/iio/health/max30100.c +++ b/drivers/iio/health/max30100.c @@ -5,7 +5,6 @@ * Copyright (C) 2015, 2018 * Author: Matt Ranostay * - * TODO: enable pulse length controls via device tree properties */ =20 #include @@ -54,6 +53,9 @@ #define MAX30100_REG_SPO2_CONFIG 0x07 #define MAX30100_REG_SPO2_CONFIG_100HZ BIT(2) #define MAX30100_REG_SPO2_CONFIG_HI_RES_EN BIT(6) +#define MAX30100_REG_SPO2_CONFIG_200US 0x0 +#define MAX30100_REG_SPO2_CONFIG_400US 0x1 +#define MAX30100_REG_SPO2_CONFIG_800US 0x2 #define MAX30100_REG_SPO2_CONFIG_1600US 0x3 =20 #define MAX30100_REG_LED_CONFIG 0x09 @@ -306,19 +308,52 @@ static int max30100_led_init(struct max30100_data *da= ta) MAX30100_REG_LED_CONFIG_LED_MASK, reg); } =20 +static int max30100_get_pulse_width(unsigned int pwidth_us) +{ + switch (pwidth_us) { + case 200: + return MAX30100_REG_SPO2_CONFIG_200US; + case 400: + return MAX30100_REG_SPO2_CONFIG_400US; + case 800: + return MAX30100_REG_SPO2_CONFIG_800US; + case 1600: + return MAX30100_REG_SPO2_CONFIG_1600US; + default: + return -EINVAL; + } +} + static int max30100_chip_init(struct max30100_data *data) { int ret; + unsigned int pulse_us; + unsigned int pulse_width; + struct device *dev =3D &data->client->dev; =20 /* setup LED current settings */ ret =3D max30100_led_init(data); if (ret) return ret; =20 + /* Get pulse width from DT, default =3D 1600us */ + ret =3D device_property_read_u32(dev, "maxim,pulse-width", &pulse_us); + if (ret) { + dev_warn(dev, "no pulse-width defined, defaulting to 1600us\n"); + pulse_width =3D MAX30100_REG_SPO2_CONFIG_1600US; + } else { + pulse_width =3D max30100_get_pulse_width(pulse_us); + if (pulse_width < 0) { + dev_err(dev, "invalid pulse-width %u\n", pulse_us); + return pulse_width; + } + } + /* enable hi-res SPO2 readings at 100Hz */ ret =3D regmap_write(data->regmap, MAX30100_REG_SPO2_CONFIG, MAX30100_REG_SPO2_CONFIG_HI_RES_EN | - MAX30100_REG_SPO2_CONFIG_100HZ); + MAX30100_REG_SPO2_CONFIG_100HZ | + pulse_width); if (ret) return ret; =20 --=20 2.43.0