mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH v2 0/2] iio: proximity: hx9023s: Add performance tuning function
@ 2024-09-25 16:40 Yasin Lee
  2024-09-25 16:40 ` [PATCH v2 1/2] dt-bindings: iio: tyhx,hx9023s: Add performance tuning configuration Yasin Lee
  2024-09-25 16:40 ` [PATCH v2 2/2] iio: proximity: hx9023s: Add performance tuning function Yasin Lee
  0 siblings, 2 replies; 5+ messages in thread
From: Yasin Lee @ 2024-09-25 16:40 UTC (permalink / raw)
  To: Jonathan Cameron, Lars-Peter Clausen, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, yasin.lee.x
  Cc: linux-iio, devicetree, linux-kernel, Yasin Lee

When hardware design introduces significant sensor data noise,
performance can be improved by adjusting register settings.

Signed-off-by: Yasin Lee <yasin.lee.x@gmail.com>
---
Changes in v2:
- In the YAML file, boundary constraints have been applied to the `tyhx,performance-tuning` property, requiring the number of elements to be between 2 and 512. The description also informs users that the number of elements must be a multiple of 2.
- In the function implementation, boundary checks have been added for this property, ensuring that the number of elements is even.
- Link to v1: https://lore.kernel.org/r/20240923-add-performance-tuning-configuration-v1-0-587220c8aece@gmail.com

---
Yasin Lee (2):
      dt-bindings: iio: tyhx,hx9023s: Add performance tuning configuration
      iio: proximity: hx9023s: Add performance tuning function

 .../bindings/iio/proximity/tyhx,hx9023s.yaml       | 19 +++++++++
 drivers/iio/proximity/hx9023s.c                    | 45 ++++++++++++++++++++++
 2 files changed, 64 insertions(+)
---
base-commit: 7f6f44a9e58cd19093b544423bc04e1d668ec341
change-id: 20240923-add-performance-tuning-configuration-e2016e4d6e02

Best regards,
-- 
Yasin Lee <yasin.lee.x@gmail.com>


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH v2 1/2] dt-bindings: iio: tyhx,hx9023s: Add performance tuning configuration
  2024-09-25 16:40 [PATCH v2 0/2] iio: proximity: hx9023s: Add performance tuning function Yasin Lee
@ 2024-09-25 16:40 ` Yasin Lee
  2024-09-26  6:53   ` Krzysztof Kozlowski
  2024-09-25 16:40 ` [PATCH v2 2/2] iio: proximity: hx9023s: Add performance tuning function Yasin Lee
  1 sibling, 1 reply; 5+ messages in thread
From: Yasin Lee @ 2024-09-25 16:40 UTC (permalink / raw)
  To: Jonathan Cameron, Lars-Peter Clausen, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, yasin.lee.x
  Cc: linux-iio, devicetree, linux-kernel, Yasin Lee

When hardware design introduces significant sensor data noise,
performance can be improved by adjusting register settings.

Signed-off-by: Yasin Lee <yasin.lee.x@gmail.com>
---
 .../bindings/iio/proximity/tyhx,hx9023s.yaml          | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

diff --git a/Documentation/devicetree/bindings/iio/proximity/tyhx,hx9023s.yaml b/Documentation/devicetree/bindings/iio/proximity/tyhx,hx9023s.yaml
index 64ce8bc8bd36..0673c40472bd 100644
--- a/Documentation/devicetree/bindings/iio/proximity/tyhx,hx9023s.yaml
+++ b/Documentation/devicetree/bindings/iio/proximity/tyhx,hx9023s.yaml
@@ -28,6 +28,18 @@ properties:
 
   vdd-supply: true
 
+  tyhx,performance-tuning:
+    description:
+      Optional, When hardware design introduces significant sensor data noise,
+      performance can be improved by adjusting register settings, including
+      but not limited to sample integration time and average sample count.
+      Performance tuning parameters represented as register address-value pairs.
+      The array consists of 8-bit values, where each pair represents a register
+      address followed by the value to be written to that register.
+    $ref: /schemas/types.yaml#/definitions/uint8-array
+    minItems: 2
+    maxItems: 512
+
   "#address-cells":
     const: 1
 
@@ -65,6 +77,13 @@ examples:
         interrupt-parent = <&pio>;
         interrupts = <16 IRQ_TYPE_EDGE_FALLING>;
         vdd-supply = <&pp1800_prox>;
+        tyhx,performance-tuning = [00 00
+        02 17
+        0D 44
+        0E 44
+        0F 04
+        1F 65
+        21 65];
 
         #address-cells = <1>;
         #size-cells = <0>;

-- 
2.43.0


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH v2 2/2] iio: proximity: hx9023s: Add performance tuning function
  2024-09-25 16:40 [PATCH v2 0/2] iio: proximity: hx9023s: Add performance tuning function Yasin Lee
  2024-09-25 16:40 ` [PATCH v2 1/2] dt-bindings: iio: tyhx,hx9023s: Add performance tuning configuration Yasin Lee
@ 2024-09-25 16:40 ` Yasin Lee
  1 sibling, 0 replies; 5+ messages in thread
From: Yasin Lee @ 2024-09-25 16:40 UTC (permalink / raw)
  To: Jonathan Cameron, Lars-Peter Clausen, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, yasin.lee.x
  Cc: linux-iio, devicetree, linux-kernel, Yasin Lee

When hardware design introduces significant sensor data noise,
performance can be improved by adjusting register settings.

Signed-off-by: Yasin Lee <yasin.lee.x@gmail.com>
---
 drivers/iio/proximity/hx9023s.c | 45 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 45 insertions(+)

diff --git a/drivers/iio/proximity/hx9023s.c b/drivers/iio/proximity/hx9023s.c
index 8b9f84400e00..8f7995816545 100644
--- a/drivers/iio/proximity/hx9023s.c
+++ b/drivers/iio/proximity/hx9023s.c
@@ -582,6 +582,47 @@ static int hx9023s_ch_en(struct hx9023s_data *data, u8 ch_id, bool en)
 	return regmap_write(data->regmap, HX9023S_CH_NUM_CFG, data->ch_en_stat);
 }
 
+static int hx9023s_performance_tuning(struct hx9023s_data *data)
+{
+	int ret;
+	u32 i, len;
+	u8 addr_val[512];
+	struct device *dev = regmap_get_device(data->regmap);
+	struct fwnode_handle *fwnode = dev_fwnode(dev);
+
+	ret = fwnode_property_count_u8(fwnode, "tyhx,performance-tuning");
+	if (ret < 2 || ret > 512) {
+		if (ret < 0) {
+			dev_err(dev, "Failed to get length of property\n");
+			return ret;
+		}
+		dev_err(dev, "The property requires between 2 and 512 elements\n");
+		return -EINVAL;
+	}
+
+	len = ret;
+	if (len % 2 != 0) {
+		dev_err(dev, "The property must contain an even number of elements\n");
+		return -EINVAL;
+	}
+
+	ret = fwnode_property_read_u8_array(fwnode, "tyhx,performance-tuning", addr_val, len);
+	if (ret < 0) {
+		dev_err(dev, "Failed to read property\n");
+		return ret;
+	}
+
+	for (i = 0; i < len; i += 2) {
+		ret = regmap_write(data->regmap, addr_val[i], addr_val[i + 1]);
+		if (ret) {
+			dev_err(dev, "Failed to write register\n");
+			return ret;
+		}
+	}
+
+	return ret;
+}
+
 static int hx9023s_property_get(struct hx9023s_data *data)
 {
 	struct device *dev = regmap_get_device(data->regmap);
@@ -1045,6 +1086,10 @@ static int hx9023s_probe(struct i2c_client *client)
 	if (ret)
 		return dev_err_probe(dev, ret, "channel config failed\n");
 
+	ret = hx9023s_performance_tuning(data);
+	if (ret)
+		dev_warn(dev, "performance tuning not configured\n");
+
 	ret = regcache_sync(data->regmap);
 	if (ret)
 		return dev_err_probe(dev, ret, "regcache sync failed\n");

-- 
2.43.0


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v2 1/2] dt-bindings: iio: tyhx,hx9023s: Add performance tuning configuration
  2024-09-25 16:40 ` [PATCH v2 1/2] dt-bindings: iio: tyhx,hx9023s: Add performance tuning configuration Yasin Lee
@ 2024-09-26  6:53   ` Krzysztof Kozlowski
  2024-09-26  7:58     ` Yasin Lee
  0 siblings, 1 reply; 5+ messages in thread
From: Krzysztof Kozlowski @ 2024-09-26  6:53 UTC (permalink / raw)
  To: Yasin Lee
  Cc: Jonathan Cameron, Lars-Peter Clausen, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, yasin.lee.x, linux-iio,
	devicetree, linux-kernel

On Thu, Sep 26, 2024 at 12:40:17AM +0800, Yasin Lee wrote:
> When hardware design introduces significant sensor data noise,
> performance can be improved by adjusting register settings.
> 
> Signed-off-by: Yasin Lee <yasin.lee.x@gmail.com>
> ---
>  .../bindings/iio/proximity/tyhx,hx9023s.yaml          | 19 +++++++++++++++++++
>  1 file changed, 19 insertions(+)
> 
> diff --git a/Documentation/devicetree/bindings/iio/proximity/tyhx,hx9023s.yaml b/Documentation/devicetree/bindings/iio/proximity/tyhx,hx9023s.yaml
> index 64ce8bc8bd36..0673c40472bd 100644
> --- a/Documentation/devicetree/bindings/iio/proximity/tyhx,hx9023s.yaml
> +++ b/Documentation/devicetree/bindings/iio/proximity/tyhx,hx9023s.yaml
> @@ -28,6 +28,18 @@ properties:
>  
>    vdd-supply: true
>  
> +  tyhx,performance-tuning:
> +    description:
> +      Optional, When hardware design introduces significant sensor data noise,
> +      performance can be improved by adjusting register settings, including
> +      but not limited to sample integration time and average sample count.
> +      Performance tuning parameters represented as register address-value pairs.
> +      The array consists of 8-bit values, where each pair represents a register
> +      address followed by the value to be written to that register.
> +    $ref: /schemas/types.yaml#/definitions/uint8-array

I think you wanted here in such case uint8-matrix with one dimension set
to two and other 256 or whatever.

I also wonder why do allow any register to be tuned. To me "tuning"
sounds like improving or tweaking the configuration, so for example I
would not expect to change some control-like registers, e.g. interrupts,
enable/disable, reset etc.


> +    minItems: 2
> +    maxItems: 512
> +
>    "#address-cells":
>      const: 1
>  
> @@ -65,6 +77,13 @@ examples:
>          interrupt-parent = <&pio>;
>          interrupts = <16 IRQ_TYPE_EDGE_FALLING>;
>          vdd-supply = <&pp1800_prox>;
> +        tyhx,performance-tuning = [00 00

This above is clearing entirely the GLOBAL_CTRL0 register, which is not
tuning.

You are basically avoiding hardware description as properties in DT and
just dump a blob.


Best regards,
Krzysztof


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v2 1/2] dt-bindings: iio: tyhx,hx9023s: Add performance tuning configuration
  2024-09-26  6:53   ` Krzysztof Kozlowski
@ 2024-09-26  7:58     ` Yasin Lee
  0 siblings, 0 replies; 5+ messages in thread
From: Yasin Lee @ 2024-09-26  7:58 UTC (permalink / raw)
  To: Krzysztof Kozlowski
  Cc: Jonathan Cameron, Lars-Peter Clausen, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, yasin.lee.x, linux-iio,
	devicetree, linux-kernel


On 9/26/24 14:53, Krzysztof Kozlowski wrote:
> On Thu, Sep 26, 2024 at 12:40:17AM +0800, Yasin Lee wrote:
>> When hardware design introduces significant sensor data noise,
>> performance can be improved by adjusting register settings.
>>
>> Signed-off-by: Yasin Lee <yasin.lee.x@gmail.com>
>> ---
>>   .../bindings/iio/proximity/tyhx,hx9023s.yaml          | 19 +++++++++++++++++++
>>   1 file changed, 19 insertions(+)
>>
>> diff --git a/Documentation/devicetree/bindings/iio/proximity/tyhx,hx9023s.yaml b/Documentation/devicetree/bindings/iio/proximity/tyhx,hx9023s.yaml
>> index 64ce8bc8bd36..0673c40472bd 100644
>> --- a/Documentation/devicetree/bindings/iio/proximity/tyhx,hx9023s.yaml
>> +++ b/Documentation/devicetree/bindings/iio/proximity/tyhx,hx9023s.yaml
>> @@ -28,6 +28,18 @@ properties:
>>   
>>     vdd-supply: true
>>   
>> +  tyhx,performance-tuning:
>> +    description:
>> +      Optional, When hardware design introduces significant sensor data noise,
>> +      performance can be improved by adjusting register settings, including
>> +      but not limited to sample integration time and average sample count.
>> +      Performance tuning parameters represented as register address-value pairs.
>> +      The array consists of 8-bit values, where each pair represents a register
>> +      address followed by the value to be written to that register.
>> +    $ref: /schemas/types.yaml#/definitions/uint8-array
> I think you wanted here in such case uint8-matrix with one dimension set
> to two and other 256 or whatever.
>
> I also wonder why do allow any register to be tuned. To me "tuning"
> sounds like improving or tweaking the configuration, so for example I
> would not expect to change some control-like registers, e.g. interrupts,
> enable/disable, reset etc.
>
>
>> +    minItems: 2
>> +    maxItems: 512
>> +
>>     "#address-cells":
>>       const: 1
>>   
>> @@ -65,6 +77,13 @@ examples:
>>           interrupt-parent = <&pio>;
>>           interrupts = <16 IRQ_TYPE_EDGE_FALLING>;
>>           vdd-supply = <&pp1800_prox>;
>> +        tyhx,performance-tuning = [00 00
> This above is clearing entirely the GLOBAL_CTRL0 register, which is not
> tuning.
>
> You are basically avoiding hardware description as properties in DT and
> just dump a blob.
>
>
> Best regards,
> Krzysztof
Hi Krzysztof,

Thank you for your feedback.

You're absolutely right about the operation on the 00 register. That was 
indeed a mistake on my part, and it was not my intention to clear the 
GLOBAL_CTRL0 register. It was only meant to serve as an example.

I also now understand that importing a data block in this manner doesn't 
align with the design philosophy of device trees. Moving forward, I will 
abstract each possible tuning configuration into separate properties. 
Since there are quite a few properties to handle, this will result in a 
larger codebase.

Given the additional work required, I will take a few more days to 
revise the patch and resubmit it.

Thank you again for your valuable input.

Best regards,
Yasin Lee

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2024-09-26  7:58 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-09-25 16:40 [PATCH v2 0/2] iio: proximity: hx9023s: Add performance tuning function Yasin Lee
2024-09-25 16:40 ` [PATCH v2 1/2] dt-bindings: iio: tyhx,hx9023s: Add performance tuning configuration Yasin Lee
2024-09-26  6:53   ` Krzysztof Kozlowski
2024-09-26  7:58     ` Yasin Lee
2024-09-25 16:40 ` [PATCH v2 2/2] iio: proximity: hx9023s: Add performance tuning function Yasin Lee

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®