From nobody Wed Dec 17 19:17:00 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 D9C5929DB8F for ; Wed, 8 Oct 2025 03:18:17 +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=1759893499; cv=none; b=STsBf7gD73lfQ99lD9mebWEmIPizK5tctyp/lHpidG7Bp4Ryv4n/I2jwU+wZZU9n6FsxFK/ZCoenZtu3+twQjQP1k4X2XVs+rsmtdZ1t8SU8gTKsBmeyUfzkMW1xULdwYb04MO/JCKucYfuc0vuvq4WDC89TryzV15+JhJ3UqhQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759893499; c=relaxed/simple; bh=w88O91l141EF9mRTJr5gYUX1SUVp35Zw9XxJTz5LQBg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=TFaL9XOM7JcsrgfzCIbnQ55Gy+xTQk0cJMDrg58xwopGbwGz6rfKnE7YaHvOEigGYaMvKQre58f5tbWvxyoJZO5/+a19hFwXRT11FjHv2+27oFVgzkW9OXJwTLwFkx3X06yTIm8Ay/gWJ1AfD1Kvna4ZXLasU5SC59IPUP4HIbw= 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=M1WIwCnp; 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="M1WIwCnp" Received: by mail-pf1-f194.google.com with SMTP id d2e1a72fcca58-78af743c232so5849553b3a.1 for ; Tue, 07 Oct 2025 20:18:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1759893497; x=1760498297; 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=BlQFQcawRFMEewIt0bOgUlauxcu0MJP5hQDoYscvOlw=; b=M1WIwCnpEDzXEfOawWMTjwqmrgQJKk4/+Gosj0RlYSOe4ynNOy15RyErknQiYiS7be Wa6MO96L31WX3vNoC2viiiA0hnrnWZgJzcB1NlA2xq2eEu01XsV+UYjbcBfIbaZ9z0QA 3xvhvPYfDqmlWIFyaKqmO5VIr+oXckVj4uuPRfAI3DU2gRaL1F6XVmqjyEMqXkpoRSBD 0R7hLfEKUH+VirBEFDFBd+KIHT9ZBuINuyyTpY/g9nO3uWauw9L7RvQfXWrhqPPQnQkW 5Q82/DZ32jeuUqSR486wLyHjSMNvS7a8OwOfJ4a0zEM0zzr3RBHTlhoJYZC0JP4K52ch J9MA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1759893497; x=1760498297; 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=BlQFQcawRFMEewIt0bOgUlauxcu0MJP5hQDoYscvOlw=; b=e19iEBTyoJqWslWR64oFpvg9VgJdxZ0cY63qFZit14hLSYt3vPnnm1/usS5hLjd+6g jyLkTaW3pRNtThLrc498b/SCOxBrj0Auz4xA34F7ei0HP5sgU1WLzg+nsqDQm/nvST8e uTXTxAOKcu5lukqzCTxe9pJM53EFMk6ySAcfKgyjPPVkTwz63cik5cU2ayIhXIN0i/YD 6nRSIPgr9KYvzCMn/95Sgt8QYGn8GyV7F4lZVJca+kjEL9PKQKa44m3R/X6nWRDDnk9b 5ge76pKBRCxNsFLzn49EOopoHCO7idUhcZr0ku3c7OKWe8+xY2L9+pQEvzN+Kc7lqTwZ piFg== X-Forwarded-Encrypted: i=1; AJvYcCWasLWtDHy8SkzrbGIZhvscBlG/WqhdK9VLdahftxlTBkIo8pzLqGMOiM7N59+6gZ4xh+koT9hzlB9B+Xs=@vger.kernel.org X-Gm-Message-State: AOJu0YyoZd5WIf3jI6PI6/+IIwtvhWAlvAKCO+xviovLMv0LWtKNIKkM da3Km5pO2ni10Fa8oxxtdRHv+V2cXjbAPsH+cl17gYuC/PCeR5H0St8H X-Gm-Gg: ASbGncv/bwdGgPQGkCNKtz/MmVmtZff6gPVBaIpdxfZR3KWvaOWw8QVaV4S5JUgtqTs rniNGmJY+wUwuCJpQryqCREtA32FQIqvDBh77hxKUDL/8o+g9nDjJxmQ4iHPLCTkXCeKYLaws3u CDvicYtoP0mUUF2trZ6HXA/LFPJKx++JgpvSjM7TJqQBQWgEC4gNBLAWzO0z+csPOka1Fn0EPTS DJ2tyb0decI1wyoTQybO1jJWesKvSkvytUu8xQZRRVR3A6cmnScB2OCddmlAiIw8juI+tHwaR7k 6QsnWk8SH/9pi8S1/S5iW8nYz36dH+PNE/rdfxf4CvWEsOxfPckN1dp07md7CXxXMlolkjeCwiO HV053s0YkB41mXPXvX0tfCTjMHM4XmiFYkupmH1RzXtp2tk+5rQ== X-Google-Smtp-Source: AGHT+IEeKJ+xs0GcbSYEkaMOoq4ZNzOHvQx0Xbcrl6XMXjx/qanyX4b6zdbK6WVXlHpUCKR6ek6s0w== X-Received: by 2002:a05:6a20:a103:b0:2e3:dd60:913d with SMTP id adf61e73a8af0-32da8163cc9mr2183530637.21.1759893496900; Tue, 07 Oct 2025 20:18:16 -0700 (PDT) Received: from Ubuntu24.. ([103.187.64.31]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-b6099f5990csm16527746a12.38.2025.10.07.20.18.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Oct 2025 20:18:16 -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 v2 1/2] dt-bindings: iio: max30100: Add pulse-width property Date: Wed, 8 Oct 2025 08:47:36 +0530 Message-ID: <20251008031737.7321-2-raskar.shree97@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20251008031737.7321-1-raskar.shree97@gmail.com> References: <20251008031737.7321-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 appropriate LED pulse width for the MAX30100 depends on board-specific optical and mechanical design (lens, enclosure, LED-to-sensor distance) and the trade-off between measurement resolution and power consumption. Encoding it in Device Tree documents these platform choices and ensures consistent behavior. Tested on: Raspberry Pi 3B + MAX30100 breakout board. Signed-off-by: Shrikant Raskar Changes since v1: Add unit suffix. Drop redundant description. Link to v1: https://lore.kernel.org/all/20251004015623.7019-2-raskar.shree97@gmail.com/ --- .../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..5c651a0151cc 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-us: + 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-us =3D <1600>; interrupt-parent =3D <&gpio1>; interrupts =3D <16 2>; }; --=20 2.43.0 From nobody Wed Dec 17 19:17:00 2025 Received: from mail-pj1-f68.google.com (mail-pj1-f68.google.com [209.85.216.68]) (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 34CE629DB99 for ; Wed, 8 Oct 2025 03:18:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.68 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759893511; cv=none; b=dVOqjJafnmMHzQqRDlq70v/7HmZFXJu3zDahcLtFFnL2sr4e5brazMcCD1Q8ktKMYlkEFTw/532HG0vpWH7ITtENpJmIFytkGibLcBP7Ug+FyCBcXBV4rAzL9F8Cm4M+8v0KXBfwZ3XW4rImk86Y1MjwRewYKH2v9XNYArMavZ4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759893511; c=relaxed/simple; bh=OjsnqX4w9xVPWhGo4KZ1oMWtoIY/AxwyxdfC9ODPA0g=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=cjNDeQKGYqarXudPdfPShpo3aSqXhlL2EQ+O4qF4tDhtVIVOBydpXKcrg99Cu6R2a1d1fRnh24cnGvDaVOEjNu5lXnnjOGM7Y9mNbHjpS2vQ1f265sCptpTfvjSYYrdp1d8HcbwaJqYmVpywuvH8Nc3ta3UBsASbjvZNtGkImuI= 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=E/K8rEtD; arc=none smtp.client-ip=209.85.216.68 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="E/K8rEtD" Received: by mail-pj1-f68.google.com with SMTP id 98e67ed59e1d1-3324523dfb2so6217722a91.0 for ; Tue, 07 Oct 2025 20:18:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1759893510; x=1760498310; 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=lDg4ZaE0kQk1RB2KpwuXVcFNrMgNFMWXQ87bNU/VPH0=; b=E/K8rEtD7HOBL64OL6zdrRNpvlP6JBFlnxRWZmpEU6rdlUFihY/2L2xgQ7NZ8hHCTC hFVnZXTuPQ6jXl/rnxBs+2lnTBIJTl5mZEMwJ5aQDdgFWtpS1/wQ/WaEXxyhBb+1vstt D4wnP8g20vUyM6JJgX+rfjEtS0UmPgoGc+Dq7lFc1BOQeFNV+Dwv3rrYyPRKB+ONsd3n 3JXXjAMteARsa6djr95aWc2YSL0hWYWQVA0JubyT+DRgufZB6OYQrtizp6vt39V8SZ6j tlSmVCacPs9jjTvU/8p8MpFcROjYwqdu/iziTdzCGPfveB0J/AMFlQNs3wQYHiZwexHF YkVg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1759893510; x=1760498310; 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=lDg4ZaE0kQk1RB2KpwuXVcFNrMgNFMWXQ87bNU/VPH0=; b=b0InwjZeAZM8IMhASBOBNCb7NdOXbbpqhtIN2CwlQQ4Xka0K973qYgO6KsP9iFLWM/ Z80u70krcinWrZR+qubob6eb7JaR17H+cOnyWh5OpwBSQjAPsyUueLR7s7tNJ1ZNLhA4 uzCDUFvlpXgkdBvNP0dtAPVj+TMmELkYgVM6YCTlGisUpI/4hvg5WdfCCCm3oHifeDl+ PSnBx/f9g4AGeMQBrOPEH1e5gMwimOS9UJ5gWvsZmlrpYp1+Hr4qw7qjjxfijBTRH310 3Riybly371iiQifQKmn0sHzET/Zg/1v/wVXsmVACnL+TC2BbX/oT/1LnfUY38fsjgyFa R5XA== X-Forwarded-Encrypted: i=1; AJvYcCVpNDR3/mdkcGut//pzYxVH08r1Mg68zJ8+uhtsaOTas3+9hme6ahYPhZct49dvMX9ere1XDbNN5MIdlbc=@vger.kernel.org X-Gm-Message-State: AOJu0YzS2/zv5aRC+LYISlkwNbsixoNymvf5MEyUnZeBE96tf54aZzC2 nvOn9lVJM1AMy1z5YAtVNhGgIA7QVV0W2V7zAKvUAoR6W9e/VO88eqSo X-Gm-Gg: ASbGncsQ4M7r8s7s7AavowoLYoehb8KqAaI+Fevul2AtemWseZnnKE3OxJtt/cuESiW LfgiBeUe8rZ7BXjOrIO7E3ogO5VGBNLMdHUDG0uwF8vuMVVWN9Sm+w6A1mBuGiSXZOWrfxhZYOc DAVnPcf6+xZ1JTllpt3dSvQvVNLRvmp1GIQlcjKErNWkoM845Bj2rjtWbeYjInnYHf8AAUa8ryh 5wTNuWj1q38lwyZ7slkZg7Iwvfuy2i9hxT0/wq98A9h0KGmDMaAGlty3A0ccaOQv7eCCx/SZHEP TwRlsuKwo4IO93zHTbjkbxkYniaCGtdTs6D0xENTOlNDKdzgH3sU/q3t+I9EZSU+SFJh9GIqzy4 X5oOdscU3G4Dkk09Bwsu8CuBIF/KXec/j+NOcarELuhYTWpV26A== X-Google-Smtp-Source: AGHT+IG1UQCmaY8cs78qKrEmsXcpdVVL9Yje3K7pg4Yhi80RChazLD8kGiz5Ppw9B7HegArhgX/3FA== X-Received: by 2002:a17:90b:3911:b0:338:2ef8:14af with SMTP id 98e67ed59e1d1-33b513bee03mr2184017a91.37.1759893509584; Tue, 07 Oct 2025 20:18:29 -0700 (PDT) Received: from Ubuntu24.. ([103.187.64.31]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-b6099f5990csm16527746a12.38.2025.10.07.20.18.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Oct 2025 20:18:29 -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 v2 2/2] iio: health: max30100: Add pulse-width configuration via DT Date: Wed, 8 Oct 2025 08:47:37 +0530 Message-ID: <20251008031737.7321-3-raskar.shree97@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20251008031737.7321-1-raskar.shree97@gmail.com> References: <20251008031737.7321-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-us`) 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 Changes since v1: Use FIELD_PREP() and define a pulse width bit mask. Initialize default pulse_us before property read. Use dev_err_probe() for error reporting. Make pulse_width signed to handle negative return values. Link to v1: https://lore.kernel.org/all/20251004015623.7019-3-raskar.shree97@gmail.com/ Reviewed-by: Nuno S=C3=A1 --- drivers/iio/health/max30100.c | 35 +++++++++++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/drivers/iio/health/max30100.c b/drivers/iio/health/max30100.c index 814f521e47ae..50cd4fd13849 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,10 @@ #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_PW_MASK GENMASK(1, 0) +#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 +309,47 @@ 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; + int pulse_width; + /* set default pulse-width-us to 1600us */ + unsigned int pulse_us =3D 1600; + struct device *dev =3D &data->client->dev; =20 /* setup LED current settings */ ret =3D max30100_led_init(data); if (ret) return ret; =20 + /* Read pulse-width-us from DT */ + device_property_read_u32(dev, "maxim,pulse-width-us", &pulse_us); + + pulse_width =3D max30100_get_pulse_width(pulse_us); + if (pulse_width < 0) + return dev_err_probe(dev, pulse_width, "invalid pulse-width %uus\n", pul= se_us); + /* 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 | + FIELD_PREP(MAX30100_REG_SPO2_CONFIG_PW_MASK, pulse_width)); if (ret) return ret; =20 --=20 2.43.0