iio: sx9360: Add pre-charge resistor setting
authorGwendal Grignou <gwendal@chromium.org>
Fri, 29 Apr 2022 22:01:44 +0000 (15:01 -0700)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Tue, 14 Jun 2022 10:53:11 +0000 (11:53 +0100)
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>
Link: https://lore.kernel.org/r/20220429220144.1476049-11-gwendal@chromium.org
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
drivers/iio/proximity/sx9360.c

index 3ebb30c..d9a12e6 100644 (file)
@@ -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);