Both functions `dps310_get_pres_precision` and
`dps310_get_temp_precision` provide the oversampling rate by calling the
`BIT()` macro. However, to look up the corresponding scale factor, we
need the register value itself. Currently, this is achieved by undoing
the calculation of the oversampling rate with `ilog2()`.
Simplify the two functions for getting the scale factor and directly
use the register content for the lookup.
Signed-off-by: Thomas Haemmerle <thomas.haemmerle@leica-geosystems.com>
Link: https://lore.kernel.org/r/20240415105030.1161770-5-thomas.haemmerle@leica-geosystems.com
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
{
int reg_val, rc;
- rc = dps310_get_pres_precision(data, ®_val);
- if (rc)
+ rc = regmap_read(data->regmap, DPS310_PRS_CFG, ®_val);
+ if (rc < 0)
return rc;
- *val = scale_factors[ilog2(reg_val)];
+ *val = scale_factors[reg_val & GENMASK(2, 0)];
return 0;
}
{
int reg_val, rc;
- rc = dps310_get_temp_precision(data, ®_val);
- if (rc)
+ rc = regmap_read(data->regmap, DPS310_TMP_CFG, ®_val);
+ if (rc < 0)
return rc;
- *val = scale_factors[ilog2(reg_val)];
+ *val = scale_factors[reg_val & GENMASK(2, 0)];
return 0;
}