diff mbox series

[v5,10/10] iio: sx9360: Add pre-charge resistor setting

Message ID 20220429220144.1476049-11-gwendal@chromium.org (mailing list archive)
State Accepted
Headers show
Series iio: sx9324/9360: Add settings for precharge, gain and internal resistor | expand

Commit Message

Gwendal Grignou April 29, 2022, 10:01 p.m. UTC
Add ability to set the precharge internal resistance from the device
tree.

Signed-off-by: Gwendal Grignou <gwendal@chromium.org>
Reviewed-by: Stephen Boyd <swboyd@chromium.org>
---
Changes since v4:
- Added missing tests when property is not found.

Changes since v3:
- Added Review tags.

Changes since v2:
- Change kOhms into ohms.

Changes since v1:
- Suffix field with kOhms unit.

 drivers/iio/proximity/sx9360.c | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

Comments

Jonathan Cameron June 4, 2022, 4:26 p.m. UTC | #1
On Fri, 29 Apr 2022 15:01:44 -0700
Gwendal Grignou <gwendal@chromium.org> wrote:

> Add ability to set the precharge internal resistance from the device
> tree.
> 
> Signed-off-by: Gwendal Grignou <gwendal@chromium.org>
> Reviewed-by: Stephen Boyd <swboyd@chromium.org>

Applied.  Thanks,

Jonathan

> ---
> Changes since v4:
> - Added missing tests when property is not found.
> 
> Changes since v3:
> - Added Review tags.
> 
> Changes since v2:
> - Change kOhms into ohms.
> 
> Changes since v1:
> - Suffix field with kOhms unit.
> 
>  drivers/iio/proximity/sx9360.c | 15 ++++++++++++++-
>  1 file changed, 14 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/iio/proximity/sx9360.c b/drivers/iio/proximity/sx9360.c
> index 3ebb30c8a4f61..d9a12e6be6ca6 100644
> --- a/drivers/iio/proximity/sx9360.c
> +++ b/drivers/iio/proximity/sx9360.c
> @@ -51,6 +51,8 @@
>  #define SX9360_REG_GNRL_REG_2_FREQ(_r)  (SX9360_FOSC_HZ / ((_r) * 8192))
>  
>  #define SX9360_REG_AFE_CTRL1		0x21
> +#define SX9360_REG_AFE_CTRL1_RESFILTIN_MASK GENMASK(3, 0)
> +#define SX9360_REG_AFE_CTRL1_RESFILTIN_0OHMS 0
>  #define SX9360_REG_AFE_PARAM0_PHR	0x22
>  #define SX9360_REG_AFE_PARAM1_PHR	0x23
>  #define SX9360_REG_AFE_PARAM0_PHM	0x24
> @@ -671,7 +673,7 @@ static const struct sx_common_reg_default sx9360_default_regs[] = {
>  	{ SX9360_REG_GNRL_CTRL1, 0x00 },
>  	{ SX9360_REG_GNRL_CTRL2, SX9360_REG_GNRL_CTRL2_PERIOD_102MS },
>  
> -	{ SX9360_REG_AFE_CTRL1, 0x00 },
> +	{ SX9360_REG_AFE_CTRL1, SX9360_REG_AFE_CTRL1_RESFILTIN_0OHMS },
>  	{ SX9360_REG_AFE_PARAM0_PHR, SX9360_REG_AFE_PARAM0_RSVD |
>  		SX9360_REG_AFE_PARAM0_RESOLUTION_128 },
>  	{ SX9360_REG_AFE_PARAM1_PHR, SX9360_REG_AFE_PARAM1_AGAIN_PHM_6PF |
> @@ -722,6 +724,17 @@ sx9360_get_default_reg(struct device *dev, int idx,
>  
>  	memcpy(reg_def, &sx9360_default_regs[idx], sizeof(*reg_def));
>  	switch (reg_def->reg) {
> +	case SX9360_REG_AFE_CTRL1:
> +		ret = device_property_read_u32(dev,
> +				"semtech,input-precharge-resistor-ohms",
> +				&raw);
> +		if (ret)
> +			break;
> +
> +		reg_def->def &= ~SX9360_REG_AFE_CTRL1_RESFILTIN_MASK;
> +		reg_def->def |= FIELD_PREP(SX9360_REG_AFE_CTRL1_RESFILTIN_MASK,
> +					   raw / 2000);
> +		break;
>  	case SX9360_REG_AFE_PARAM0_PHR:
>  	case SX9360_REG_AFE_PARAM0_PHM:
>  		ret = device_property_read_u32(dev, "semtech,resolution", &raw);
diff mbox series

Patch

diff --git a/drivers/iio/proximity/sx9360.c b/drivers/iio/proximity/sx9360.c
index 3ebb30c8a4f61..d9a12e6be6ca6 100644
--- a/drivers/iio/proximity/sx9360.c
+++ b/drivers/iio/proximity/sx9360.c
@@ -51,6 +51,8 @@ 
 #define SX9360_REG_GNRL_REG_2_FREQ(_r)  (SX9360_FOSC_HZ / ((_r) * 8192))
 
 #define SX9360_REG_AFE_CTRL1		0x21
+#define SX9360_REG_AFE_CTRL1_RESFILTIN_MASK GENMASK(3, 0)
+#define SX9360_REG_AFE_CTRL1_RESFILTIN_0OHMS 0
 #define SX9360_REG_AFE_PARAM0_PHR	0x22
 #define SX9360_REG_AFE_PARAM1_PHR	0x23
 #define SX9360_REG_AFE_PARAM0_PHM	0x24
@@ -671,7 +673,7 @@  static const struct sx_common_reg_default sx9360_default_regs[] = {
 	{ SX9360_REG_GNRL_CTRL1, 0x00 },
 	{ SX9360_REG_GNRL_CTRL2, SX9360_REG_GNRL_CTRL2_PERIOD_102MS },
 
-	{ SX9360_REG_AFE_CTRL1, 0x00 },
+	{ SX9360_REG_AFE_CTRL1, SX9360_REG_AFE_CTRL1_RESFILTIN_0OHMS },
 	{ SX9360_REG_AFE_PARAM0_PHR, SX9360_REG_AFE_PARAM0_RSVD |
 		SX9360_REG_AFE_PARAM0_RESOLUTION_128 },
 	{ SX9360_REG_AFE_PARAM1_PHR, SX9360_REG_AFE_PARAM1_AGAIN_PHM_6PF |
@@ -722,6 +724,17 @@  sx9360_get_default_reg(struct device *dev, int idx,
 
 	memcpy(reg_def, &sx9360_default_regs[idx], sizeof(*reg_def));
 	switch (reg_def->reg) {
+	case SX9360_REG_AFE_CTRL1:
+		ret = device_property_read_u32(dev,
+				"semtech,input-precharge-resistor-ohms",
+				&raw);
+		if (ret)
+			break;
+
+		reg_def->def &= ~SX9360_REG_AFE_CTRL1_RESFILTIN_MASK;
+		reg_def->def |= FIELD_PREP(SX9360_REG_AFE_CTRL1_RESFILTIN_MASK,
+					   raw / 2000);
+		break;
 	case SX9360_REG_AFE_PARAM0_PHR:
 	case SX9360_REG_AFE_PARAM0_PHM:
 		ret = device_property_read_u32(dev, "semtech,resolution", &raw);