* [PATCH v2 0/2] iio: health: max30100: Add DT pulse-width support @ 2025-10-08 3:17 Shrikant Raskar 2025-10-08 3:17 ` [PATCH v2 1/2] dt-bindings: iio: max30100: Add pulse-width property Shrikant Raskar 2025-10-08 3:17 ` [PATCH v2 2/2] iio: health: max30100: Add pulse-width configuration via DT Shrikant Raskar 0 siblings, 2 replies; 15+ messages in thread From: Shrikant Raskar @ 2025-10-08 3:17 UTC (permalink / raw) To: jic23, robh, krzk+dt, conor+dt Cc: dlechner, nuno.sa, andy, matt, skhan, david.hunter.linux, linux-iio, devicetree, linux-kernel, linux-kernel-mentees, Shrikant Raskar Add support for configuring the LED pulse width of the MAX30100 sensor via a device tree property. v2 changes: dt-bindings: iio: max30100: Add pulse-width property: Add unit suffix (-microseconds) Drop redundant description iio: health: max30100: Add pulse-width configuration via DT: Improve default handling Used FIELD_PREP() for pulse width Use dev_err_probe() for error reporting Fix signedness issue Tested on: Raspberry Pi 3B + MAX30100 breakout Shrikant Raskar (2): dt-bindings: iio: max30100: Add pulse-width property iio: health: max30100: Add pulse-width configuration via DT .../bindings/iio/health/maxim,max30100.yaml | 6 ++++ drivers/iio/health/max30100.c | 35 +++++++++++++++++-- 2 files changed, 39 insertions(+), 2 deletions(-) -- 2.43.0 ^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH v2 1/2] dt-bindings: iio: max30100: Add pulse-width property 2025-10-08 3:17 [PATCH v2 0/2] iio: health: max30100: Add DT pulse-width support Shrikant Raskar @ 2025-10-08 3:17 ` Shrikant Raskar 2025-10-08 12:55 ` Rob Herring (Arm) ` (3 more replies) 2025-10-08 3:17 ` [PATCH v2 2/2] iio: health: max30100: Add pulse-width configuration via DT Shrikant Raskar 1 sibling, 4 replies; 15+ messages in thread From: Shrikant Raskar @ 2025-10-08 3:17 UTC (permalink / raw) To: jic23, robh, krzk+dt, conor+dt Cc: dlechner, nuno.sa, andy, matt, skhan, david.hunter.linux, linux-iio, devicetree, linux-kernel, linux-kernel-mentees, Shrikant Raskar 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 <raskar.shree97@gmail.com> 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.yaml 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 LED. + maxim,pulse-width-us: + maxItems: 1 + description: Pulse width in microseconds + enum: [200, 400, 800, 1600] + additionalProperties: false required: @@ -44,6 +49,7 @@ examples: compatible = "maxim,max30100"; reg = <0x57>; maxim,led-current-microamp = <24000 50000>; + maxim,pulse-width-us = <1600>; interrupt-parent = <&gpio1>; interrupts = <16 2>; }; -- 2.43.0 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [PATCH v2 1/2] dt-bindings: iio: max30100: Add pulse-width property 2025-10-08 3:17 ` [PATCH v2 1/2] dt-bindings: iio: max30100: Add pulse-width property Shrikant Raskar @ 2025-10-08 12:55 ` Rob Herring (Arm) 2025-10-11 10:38 ` Shrikant 2025-10-09 0:44 ` Krzysztof Kozlowski ` (2 subsequent siblings) 3 siblings, 1 reply; 15+ messages in thread From: Rob Herring (Arm) @ 2025-10-08 12:55 UTC (permalink / raw) To: Shrikant Raskar Cc: nuno.sa, dlechner, linux-kernel, andy, linux-iio, matt, linux-kernel-mentees, krzk+dt, devicetree, skhan, jic23, conor+dt, david.hunter.linux On Wed, 08 Oct 2025 08:47:36 +0530, Shrikant Raskar wrote: > 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 <raskar.shree97@gmail.com> > > 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(+) > My bot found errors running 'make dt_binding_check' on your patch: yamllint warnings/errors: dtschema/dtc warnings/errors: /builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/iio/health/maxim,max30100.yaml: properties:maxim,pulse-width-us: 'enum' should not be valid under {'enum': ['const', 'enum', 'exclusiveMaximum', 'exclusiveMinimum', 'minimum', 'maximum', 'multipleOf', 'pattern']} hint: Scalar and array keywords cannot be mixed from schema $id: http://devicetree.org/meta-schemas/keywords.yaml# /builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/iio/health/maxim,max30100.yaml: properties:maxim,pulse-width-us: 'anyOf' conditional failed, one must be fixed: 'enum' is not one of ['maxItems', 'description', 'deprecated'] hint: Only "maxItems" is required for a single entry if there are no constraints defined for the values. Additional properties are not allowed ('enum' was unexpected) hint: Arrays must be described with a combination of minItems/maxItems/items 'maxItems' is not one of ['description', 'deprecated', 'const', 'enum', 'minimum', 'maximum', 'multipleOf', 'default', '$ref', 'oneOf'] 1 is less than the minimum of 2 hint: Arrays must be described with a combination of minItems/maxItems/items hint: cell array properties must define how many entries and what the entries are when there is more than one entry. from schema $id: http://devicetree.org/meta-schemas/core.yaml# doc reference errors (make refcheckdocs): See https://patchwork.ozlabs.org/project/devicetree-bindings/patch/20251008031737.7321-2-raskar.shree97@gmail.com The base for the series is generally the latest rc1. A different dependency should be noted in *this* patch. If you already ran 'make dt_binding_check' and didn't see the above error(s), then make sure 'yamllint' is installed and dt-schema is up to date: pip3 install dtschema --upgrade Please check and re-submit after running the above command yourself. Note that DT_SCHEMA_FILES can be set to your schema file to speed up checking your schema. However, it must be unset to test all examples with your schema. ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v2 1/2] dt-bindings: iio: max30100: Add pulse-width property 2025-10-08 12:55 ` Rob Herring (Arm) @ 2025-10-11 10:38 ` Shrikant 0 siblings, 0 replies; 15+ messages in thread From: Shrikant @ 2025-10-11 10:38 UTC (permalink / raw) To: Rob Herring (Arm) Cc: nuno.sa, dlechner, linux-kernel, andy, linux-iio, matt, linux-kernel-mentees, krzk+dt, devicetree, skhan, jic23, conor+dt, david.hunter.linux > My bot found errors running 'make dt_binding_check' on your patch: > > yamllint warnings/errors: > > dtschema/dtc warnings/errors: > /builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/iio/health/maxim,max30100.yaml: properties:maxim,pulse-width-us: 'enum' should not be valid under {'enum': ['const', 'enum', 'exclusiveMaximum', 'exclusiveMinimum', 'minimum', 'maximum', 'multipleOf', 'pattern']} > hint: Scalar and array keywords cannot be mixed > from schema $id: http://devicetree.org/meta-schemas/keywords.yaml# > /builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/iio/health/maxim,max30100.yaml: properties:maxim,pulse-width-us: 'anyOf' conditional failed, one must be fixed: > 'enum' is not one of ['maxItems', 'description', 'deprecated'] > hint: Only "maxItems" is required for a single entry if there are no constraints defined for the values. > Additional properties are not allowed ('enum' was unexpected) > hint: Arrays must be described with a combination of minItems/maxItems/items > 'maxItems' is not one of ['description', 'deprecated', 'const', 'enum', 'minimum', 'maximum', 'multipleOf', 'default', '$ref', 'oneOf'] > 1 is less than the minimum of 2 > hint: Arrays must be described with a combination of minItems/maxItems/items > hint: cell array properties must define how many entries and what the entries are when there is more than one entry. > from schema $id: http://devicetree.org/meta-schemas/core.yaml# > > doc reference errors (make refcheckdocs): > > See https://patchwork.ozlabs.org/project/devicetree-bindings/patch/20251008031737.7321-2-raskar.shree97@gmail.com > > The base for the series is generally the latest rc1. A different dependency > should be noted in *this* patch. > > If you already ran 'make dt_binding_check' and didn't see the above > error(s), then make sure 'yamllint' is installed and dt-schema is up to > date: > > pip3 install dtschema --upgrade > > Please check and re-submit after running the above command yourself. Note > that DT_SCHEMA_FILES can be set to your schema file to speed up checking > your schema. However, it must be unset to test all examples with your schema. > Hi Rob, Thank you for reviewing my patch and pointing out the dt-binding schema issues. I’ve updated the YAML to fix the reported warnings. I’ll verify with yamllint and dtschema to confirm there are no remaining errors and submit a corrected v3 patch shortly. Thanks for your guidance. Regards, Shrikant ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v2 1/2] dt-bindings: iio: max30100: Add pulse-width property 2025-10-08 3:17 ` [PATCH v2 1/2] dt-bindings: iio: max30100: Add pulse-width property Shrikant Raskar 2025-10-08 12:55 ` Rob Herring (Arm) @ 2025-10-09 0:44 ` Krzysztof Kozlowski 2025-10-11 10:52 ` Shrikant 2025-10-10 17:49 ` David Lechner 2025-10-12 17:06 ` Jonathan Cameron 3 siblings, 1 reply; 15+ messages in thread From: Krzysztof Kozlowski @ 2025-10-09 0:44 UTC (permalink / raw) To: Shrikant Raskar, jic23, robh, krzk+dt, conor+dt Cc: dlechner, nuno.sa, andy, matt, skhan, david.hunter.linux, linux-iio, devicetree, linux-kernel, linux-kernel-mentees On 08/10/2025 12:17, Shrikant Raskar wrote: > 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 <raskar.shree97@gmail.com> > > Changes since v1: > Add unit suffix. > Drop redundant description. > > Link to v1: > https://lore.kernel.org/all/20251004015623.7019-2-raskar.shree97@gmail.com/ This does not belong to commit msg but to changelog under ---. See submitting patches. You need to also start testing your patches BEFORE you send them. Best regards, Krzysztof ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v2 1/2] dt-bindings: iio: max30100: Add pulse-width property 2025-10-09 0:44 ` Krzysztof Kozlowski @ 2025-10-11 10:52 ` Shrikant 0 siblings, 0 replies; 15+ messages in thread From: Shrikant @ 2025-10-11 10:52 UTC (permalink / raw) To: Krzysztof Kozlowski Cc: jic23, robh, krzk+dt, conor+dt, dlechner, nuno.sa, andy, matt, skhan, david.hunter.linux, linux-iio, devicetree, linux-kernel, linux-kernel-mentees > > Signed-off-by: Shrikant Raskar <raskar.shree97@gmail.com> > > > > Changes since v1: > > Add unit suffix. > > Drop redundant description. > > > > Link to v1: > > https://lore.kernel.org/all/20251004015623.7019-2-raskar.shree97@gmail.com/ > > This does not belong to commit msg but to changelog under ---. > > See submitting patches. > > You need to also start testing your patches BEFORE you send them. > Hello Krzysztof , Thanks for reviewing the patch and sharing your feedback. I have removed the changelog from the commit message and added under ---. I will test and will share the updated version of the patch shortly. Thanks for your guidance. Regards, Shrikant ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v2 1/2] dt-bindings: iio: max30100: Add pulse-width property 2025-10-08 3:17 ` [PATCH v2 1/2] dt-bindings: iio: max30100: Add pulse-width property Shrikant Raskar 2025-10-08 12:55 ` Rob Herring (Arm) 2025-10-09 0:44 ` Krzysztof Kozlowski @ 2025-10-10 17:49 ` David Lechner 2025-10-12 17:41 ` Shrikant 2025-10-12 17:06 ` Jonathan Cameron 3 siblings, 1 reply; 15+ messages in thread From: David Lechner @ 2025-10-10 17:49 UTC (permalink / raw) To: Shrikant Raskar, jic23, robh, krzk+dt, conor+dt Cc: nuno.sa, andy, matt, skhan, david.hunter.linux, linux-iio, devicetree, linux-kernel, linux-kernel-mentees On 10/7/25 10:17 PM, Shrikant Raskar wrote: > 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 <raskar.shree97@gmail.com> > > 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.yaml 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 LED. > > + maxim,pulse-width-us: > + maxItems: 1 > + description: Pulse width in microseconds Would be nice to add to the description which pulse width this is referring to. > + enum: [200, 400, 800, 1600] Properties with standard unit suffixes are u32 arrays, so I think this would fix the error and also make maxItems not necessary. items: - enum: [200, 400, 800, 1600] And we want to know what the default is if this property is omitted. default: 1600 > + > additionalProperties: false > > required: > @@ -44,6 +49,7 @@ examples: > compatible = "maxim,max30100"; > reg = <0x57>; > maxim,led-current-microamp = <24000 50000>; > + maxim,pulse-width-us = <1600>; > interrupt-parent = <&gpio1>; > interrupts = <16 2>; > }; ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v2 1/2] dt-bindings: iio: max30100: Add pulse-width property 2025-10-10 17:49 ` David Lechner @ 2025-10-12 17:41 ` Shrikant 0 siblings, 0 replies; 15+ messages in thread From: Shrikant @ 2025-10-12 17:41 UTC (permalink / raw) To: David Lechner Cc: jic23, robh, krzk+dt, conor+dt, nuno.sa, andy, matt, skhan, david.hunter.linux, linux-iio, devicetree, linux-kernel, linux-kernel-mentees On Fri, Oct 10, 2025 at 11:19 PM David Lechner <dlechner@baylibre.com> wrote: > > On 10/7/25 10:17 PM, Shrikant Raskar wrote: > > 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 <raskar.shree97@gmail.com> > > > > 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.yaml 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 LED. > > > > + maxim,pulse-width-us: > > + maxItems: 1 > > + description: Pulse width in microseconds > > Would be nice to add to the description which pulse width this is referring to. Thanks for your review comment, I have updated the description and shared v3 patch for your review. > > + enum: [200, 400, 800, 1600] > > Properties with standard unit suffixes are u32 arrays, so I think this > would fix the error and also make maxItems not necessary. > > items: > - enum: [200, 400, 800, 1600] > Thanks for sharing the fix. I have tried it but 'dt_binding_check' complains as below: 'items' is not one of ['description', 'deprecated', 'const', 'enum','minimum', 'maximum', 'multipleOf', 'default', '$ref', 'oneOf']. Schema expects it to be defined as a single u32, not an array. I have updated the patch accordingly. > And we want to know what the default is if this property is omitted. > > default: 1600 > Thanks for your feedback, I have added the default value and shared v3 patch for your review. Thanks and Regards, Shrikant > > + > > additionalProperties: false > > > > required: > > @@ -44,6 +49,7 @@ examples: > > compatible = "maxim,max30100"; > > reg = <0x57>; > > maxim,led-current-microamp = <24000 50000>; > > + maxim,pulse-width-us = <1600>; > > interrupt-parent = <&gpio1>; > > interrupts = <16 2>; > > }; > ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v2 1/2] dt-bindings: iio: max30100: Add pulse-width property 2025-10-08 3:17 ` [PATCH v2 1/2] dt-bindings: iio: max30100: Add pulse-width property Shrikant Raskar ` (2 preceding siblings ...) 2025-10-10 17:49 ` David Lechner @ 2025-10-12 17:06 ` Jonathan Cameron 2025-10-12 17:37 ` Shrikant 3 siblings, 1 reply; 15+ messages in thread From: Jonathan Cameron @ 2025-10-12 17:06 UTC (permalink / raw) To: Shrikant Raskar Cc: robh, krzk+dt, conor+dt, dlechner, nuno.sa, andy, matt, skhan, david.hunter.linux, linux-iio, devicetree, linux-kernel, linux-kernel-mentees On Wed, 8 Oct 2025 08:47:36 +0530 Shrikant Raskar <raskar.shree97@gmail.com> wrote: > 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 <raskar.shree97@gmail.com> > > 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.yaml 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 LED. > > + maxim,pulse-width-us: > + maxItems: 1 > + description: Pulse width in microseconds I continued the discussion on v1 but just to make sure it is not missed, add a bit more here briefly touching on factors that govern what the right value is here. Thanks, Jonathan > + enum: [200, 400, 800, 1600] > + > additionalProperties: false > > required: > @@ -44,6 +49,7 @@ examples: > compatible = "maxim,max30100"; > reg = <0x57>; > maxim,led-current-microamp = <24000 50000>; > + maxim,pulse-width-us = <1600>; > interrupt-parent = <&gpio1>; > interrupts = <16 2>; > }; ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v2 1/2] dt-bindings: iio: max30100: Add pulse-width property 2025-10-12 17:06 ` Jonathan Cameron @ 2025-10-12 17:37 ` Shrikant 0 siblings, 0 replies; 15+ messages in thread From: Shrikant @ 2025-10-12 17:37 UTC (permalink / raw) To: Jonathan Cameron Cc: robh, krzk+dt, conor+dt, dlechner, nuno.sa, andy, matt, skhan, david.hunter.linux, linux-iio, devicetree, linux-kernel, linux-kernel-mentees On Sun, Oct 12, 2025 at 10:36 PM Jonathan Cameron <jic23@kernel.org> wrote: > > On Wed, 8 Oct 2025 08:47:36 +0530 > Shrikant Raskar <raskar.shree97@gmail.com> wrote: > > > 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 <raskar.shree97@gmail.com> > > > > 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.yaml 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 LED. > > > > + maxim,pulse-width-us: > > + maxItems: 1 > > + description: Pulse width in microseconds > I continued the discussion on v1 but just to make sure it is not > missed, add a bit more here briefly touching on factors that govern what > the right value is here. I have considered the feedback from v1 and updated the description with suggested factors. I have shared the v3 patches with updates for your review. Thanks and Regards, Shrikant > > > + enum: [200, 400, 800, 1600] > > + > > additionalProperties: false > > > > required: > > @@ -44,6 +49,7 @@ examples: > > compatible = "maxim,max30100"; > > reg = <0x57>; > > maxim,led-current-microamp = <24000 50000>; > > + maxim,pulse-width-us = <1600>; > > interrupt-parent = <&gpio1>; > > interrupts = <16 2>; > > }; > ^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH v2 2/2] iio: health: max30100: Add pulse-width configuration via DT 2025-10-08 3:17 [PATCH v2 0/2] iio: health: max30100: Add DT pulse-width support Shrikant Raskar 2025-10-08 3:17 ` [PATCH v2 1/2] dt-bindings: iio: max30100: Add pulse-width property Shrikant Raskar @ 2025-10-08 3:17 ` Shrikant Raskar 2025-10-09 10:52 ` Nuno Sá ` (2 more replies) 1 sibling, 3 replies; 15+ messages in thread From: Shrikant Raskar @ 2025-10-08 3:17 UTC (permalink / raw) To: jic23, robh, krzk+dt, conor+dt Cc: dlechner, nuno.sa, andy, matt, skhan, david.hunter.linux, linux-iio, devicetree, linux-kernel, linux-kernel-mentees, Shrikant Raskar 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 <raskar.shree97@gmail.com> 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/ --- 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 <matt.ranostay@konsulko.com> * - * TODO: enable pulse length controls via device tree properties */ #include <linux/module.h> @@ -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 #define MAX30100_REG_LED_CONFIG 0x09 @@ -306,19 +309,47 @@ static int max30100_led_init(struct max30100_data *data) MAX30100_REG_LED_CONFIG_LED_MASK, reg); } +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 = 1600; + struct device *dev = &data->client->dev; /* setup LED current settings */ ret = max30100_led_init(data); if (ret) return ret; + /* Read pulse-width-us from DT */ + device_property_read_u32(dev, "maxim,pulse-width-us", &pulse_us); + + pulse_width = max30100_get_pulse_width(pulse_us); + if (pulse_width < 0) + return dev_err_probe(dev, pulse_width, "invalid pulse-width %uus\n", pulse_us); + /* enable hi-res SPO2 readings at 100Hz */ ret = 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; -- 2.43.0 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [PATCH v2 2/2] iio: health: max30100: Add pulse-width configuration via DT 2025-10-08 3:17 ` [PATCH v2 2/2] iio: health: max30100: Add pulse-width configuration via DT Shrikant Raskar @ 2025-10-09 10:52 ` Nuno Sá 2025-10-12 17:45 ` Shrikant 2025-10-10 16:24 ` kernel test robot 2025-10-10 17:55 ` David Lechner 2 siblings, 1 reply; 15+ messages in thread From: Nuno Sá @ 2025-10-09 10:52 UTC (permalink / raw) To: Shrikant Raskar, jic23, robh, krzk+dt, conor+dt Cc: dlechner, nuno.sa, andy, matt, skhan, david.hunter.linux, linux-iio, devicetree, linux-kernel, linux-kernel-mentees Hi Shrikant, Thanks for your patch. On Wed, 2025-10-08 at 08:47 +0530, Shrikant Raskar wrote: > 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 <raskar.shree97@gmail.com> > > 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/ As mentioned in the bindings patch, this is not place for changelog. With that fixed: Reviewed-by: Nuno Sá <nuno.sa@analog.com> > --- > 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 <matt.ranostay@konsulko.com> > * > - * TODO: enable pulse length controls via device tree properties > */ > > #include <linux/module.h> > @@ -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 > > #define MAX30100_REG_LED_CONFIG 0x09 > @@ -306,19 +309,47 @@ static int max30100_led_init(struct max30100_data *data) > MAX30100_REG_LED_CONFIG_LED_MASK, reg); > } > > +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 = 1600; > + struct device *dev = &data->client->dev; > > /* setup LED current settings */ > ret = max30100_led_init(data); > if (ret) > return ret; > > + /* Read pulse-width-us from DT */ > + device_property_read_u32(dev, "maxim,pulse-width-us", &pulse_us); > + > + pulse_width = max30100_get_pulse_width(pulse_us); > + if (pulse_width < 0) > + return dev_err_probe(dev, pulse_width, "invalid pulse-width > %uus\n", pulse_us); > + > /* enable hi-res SPO2 readings at 100Hz */ > ret = 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; > ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v2 2/2] iio: health: max30100: Add pulse-width configuration via DT 2025-10-09 10:52 ` Nuno Sá @ 2025-10-12 17:45 ` Shrikant 0 siblings, 0 replies; 15+ messages in thread From: Shrikant @ 2025-10-12 17:45 UTC (permalink / raw) To: Nuno Sá Cc: jic23, robh, krzk+dt, conor+dt, dlechner, nuno.sa, andy, matt, skhan, david.hunter.linux, linux-iio, devicetree, linux-kernel, linux-kernel-mentees On Thu, Oct 9, 2025 at 4:21 PM Nuno Sá <noname.nuno@gmail.com> wrote: > > Hi Shrikant, > > Thanks for your patch. > > On Wed, 2025-10-08 at 08:47 +0530, Shrikant Raskar wrote: > > 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 <raskar.shree97@gmail.com> > > > > 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/ > > As mentioned in the bindings patch, this is not place for changelog. With that > fixed: > > Reviewed-by: Nuno Sá <nuno.sa@analog.com> Hello Nuno Sá, Thanks for reviewing my patch. I have removed the changelog from commit message and shared the v3 patch for review. Thanks and Regards, Shrikant > > > --- > > 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 <matt.ranostay@konsulko.com> > > * > > - * TODO: enable pulse length controls via device tree properties > > */ > > > > #include <linux/module.h> > > @@ -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 > > > > #define MAX30100_REG_LED_CONFIG 0x09 > > @@ -306,19 +309,47 @@ static int max30100_led_init(struct max30100_data *data) > > MAX30100_REG_LED_CONFIG_LED_MASK, reg); > > } > > > > +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 = 1600; > > + struct device *dev = &data->client->dev; > > > > /* setup LED current settings */ > > ret = max30100_led_init(data); > > if (ret) > > return ret; > > > > + /* Read pulse-width-us from DT */ > > + device_property_read_u32(dev, "maxim,pulse-width-us", &pulse_us); > > + > > + pulse_width = max30100_get_pulse_width(pulse_us); > > + if (pulse_width < 0) > > + return dev_err_probe(dev, pulse_width, "invalid pulse-width > > %uus\n", pulse_us); > > + > > /* enable hi-res SPO2 readings at 100Hz */ > > ret = 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; > > ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v2 2/2] iio: health: max30100: Add pulse-width configuration via DT 2025-10-08 3:17 ` [PATCH v2 2/2] iio: health: max30100: Add pulse-width configuration via DT Shrikant Raskar 2025-10-09 10:52 ` Nuno Sá @ 2025-10-10 16:24 ` kernel test robot 2025-10-10 17:55 ` David Lechner 2 siblings, 0 replies; 15+ messages in thread From: kernel test robot @ 2025-10-10 16:24 UTC (permalink / raw) To: Shrikant Raskar, jic23, robh, krzk+dt, conor+dt Cc: oe-kbuild-all, dlechner, nuno.sa, andy, matt, skhan, david.hunter.linux, linux-iio, devicetree, linux-kernel, linux-kernel-mentees, Shrikant Raskar Hi Shrikant, kernel test robot noticed the following build errors: [auto build test ERROR on jic23-iio/togreg] [also build test ERROR on robh/for-next v6.17] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Shrikant-Raskar/dt-bindings-iio-max30100-Add-pulse-width-property/20251010-102537 base: https://git.kernel.org/pub/scm/linux/kernel/git/jic23/iio.git togreg patch link: https://lore.kernel.org/r/20251008031737.7321-3-raskar.shree97%40gmail.com patch subject: [PATCH v2 2/2] iio: health: max30100: Add pulse-width configuration via DT config: csky-randconfig-001-20251010 (https://download.01.org/0day-ci/archive/20251011/202510110029.epOLovuF-lkp@intel.com/config) compiler: csky-linux-gcc (GCC) 15.1.0 reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20251011/202510110029.epOLovuF-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202510110029.epOLovuF-lkp@intel.com/ All errors (new ones prefixed by >>): drivers/iio/health/max30100.c: In function 'max30100_chip_init': >> drivers/iio/health/max30100.c:352:34: error: implicit declaration of function 'FIELD_PREP' [-Wimplicit-function-declaration] 352 | FIELD_PREP(MAX30100_REG_SPO2_CONFIG_PW_MASK, pulse_width)); | ^~~~~~~~~~ vim +/FIELD_PREP +352 drivers/iio/health/max30100.c 327 328 static int max30100_chip_init(struct max30100_data *data) 329 { 330 int ret; 331 int pulse_width; 332 /* set default pulse-width-us to 1600us */ 333 unsigned int pulse_us = 1600; 334 struct device *dev = &data->client->dev; 335 336 /* setup LED current settings */ 337 ret = max30100_led_init(data); 338 if (ret) 339 return ret; 340 341 /* Read pulse-width-us from DT */ 342 device_property_read_u32(dev, "maxim,pulse-width-us", &pulse_us); 343 344 pulse_width = max30100_get_pulse_width(pulse_us); 345 if (pulse_width < 0) 346 return dev_err_probe(dev, pulse_width, "invalid pulse-width %uus\n", pulse_us); 347 348 /* enable hi-res SPO2 readings at 100Hz */ 349 ret = regmap_write(data->regmap, MAX30100_REG_SPO2_CONFIG, 350 MAX30100_REG_SPO2_CONFIG_HI_RES_EN | 351 MAX30100_REG_SPO2_CONFIG_100HZ | > 352 FIELD_PREP(MAX30100_REG_SPO2_CONFIG_PW_MASK, pulse_width)); 353 if (ret) 354 return ret; 355 356 /* enable SPO2 mode */ 357 ret = regmap_update_bits(data->regmap, MAX30100_REG_MODE_CONFIG, 358 MAX30100_REG_MODE_CONFIG_MODE_MASK, 359 MAX30100_REG_MODE_CONFIG_MODE_HR_EN | 360 MAX30100_REG_MODE_CONFIG_MODE_SPO2_EN); 361 if (ret) 362 return ret; 363 364 /* enable FIFO interrupt */ 365 return regmap_update_bits(data->regmap, MAX30100_REG_INT_ENABLE, 366 MAX30100_REG_INT_ENABLE_MASK, 367 MAX30100_REG_INT_ENABLE_FIFO_EN 368 << MAX30100_REG_INT_ENABLE_MASK_SHIFT); 369 } 370 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v2 2/2] iio: health: max30100: Add pulse-width configuration via DT 2025-10-08 3:17 ` [PATCH v2 2/2] iio: health: max30100: Add pulse-width configuration via DT Shrikant Raskar 2025-10-09 10:52 ` Nuno Sá 2025-10-10 16:24 ` kernel test robot @ 2025-10-10 17:55 ` David Lechner 2 siblings, 0 replies; 15+ messages in thread From: David Lechner @ 2025-10-10 17:55 UTC (permalink / raw) To: Shrikant Raskar, jic23, robh, krzk+dt, conor+dt Cc: nuno.sa, andy, matt, skhan, david.hunter.linux, linux-iio, devicetree, linux-kernel, linux-kernel-mentees On 10/7/25 10:17 PM, Shrikant Raskar wrote: ... > --- a/drivers/iio/health/max30100.c > +++ b/drivers/iio/health/max30100.c > @@ -5,7 +5,6 @@ > * Copyright (C) 2015, 2018 > * Author: Matt Ranostay <matt.ranostay@konsulko.com> > * > - * TODO: enable pulse length controls via device tree properties > */ > > #include <linux/module.h> > @@ -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 Would make more sense to put this new code before BIT(2) to preserve the order of lowest to highest bits. ^ permalink raw reply [flat|nested] 15+ messages in thread
end of thread, other threads:[~2025-10-12 17:45 UTC | newest] Thread overview: 15+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2025-10-08 3:17 [PATCH v2 0/2] iio: health: max30100: Add DT pulse-width support Shrikant Raskar 2025-10-08 3:17 ` [PATCH v2 1/2] dt-bindings: iio: max30100: Add pulse-width property Shrikant Raskar 2025-10-08 12:55 ` Rob Herring (Arm) 2025-10-11 10:38 ` Shrikant 2025-10-09 0:44 ` Krzysztof Kozlowski 2025-10-11 10:52 ` Shrikant 2025-10-10 17:49 ` David Lechner 2025-10-12 17:41 ` Shrikant 2025-10-12 17:06 ` Jonathan Cameron 2025-10-12 17:37 ` Shrikant 2025-10-08 3:17 ` [PATCH v2 2/2] iio: health: max30100: Add pulse-width configuration via DT Shrikant Raskar 2025-10-09 10:52 ` Nuno Sá 2025-10-12 17:45 ` Shrikant 2025-10-10 16:24 ` kernel test robot 2025-10-10 17:55 ` David Lechner
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).