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 |
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 --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);