[PATCH v1 01/10] iio: pressure: bmp280: Fix regmap for BMP280 device

Vasileios Amoiridis posted 10 patches 1 year, 5 months ago
[PATCH v1 01/10] iio: pressure: bmp280: Fix regmap for BMP280 device
Posted by Vasileios Amoiridis 1 year, 5 months ago
Up to now, the BMP280 device is using the regmap of the BME280 which
has registers that exist only in the BME280 device.

Fixes: 14e8015f8569 ("iio: pressure: bmp280: split driver in logical parts")
Signed-off-by: Vasileios Amoiridis <vassilisamir@gmail.com>
---
 drivers/iio/pressure/bmp280-core.c   |  2 +-
 drivers/iio/pressure/bmp280-regmap.c | 45 ++++++++++++++++++++++++++--
 drivers/iio/pressure/bmp280.h        |  1 +
 3 files changed, 44 insertions(+), 4 deletions(-)

diff --git a/drivers/iio/pressure/bmp280-core.c b/drivers/iio/pressure/bmp280-core.c
index 2fc5724196e3..cc8553177977 100644
--- a/drivers/iio/pressure/bmp280-core.c
+++ b/drivers/iio/pressure/bmp280-core.c
@@ -1186,7 +1186,7 @@ const struct bmp280_chip_info bme280_chip_info = {
 	.id_reg = BMP280_REG_ID,
 	.chip_id = bme280_chip_ids,
 	.num_chip_id = ARRAY_SIZE(bme280_chip_ids),
-	.regmap_config = &bmp280_regmap_config,
+	.regmap_config = &bme280_regmap_config,
 	.start_up_time = 2000,
 	.channels = bme280_channels,
 	.num_channels = ARRAY_SIZE(bme280_channels),
diff --git a/drivers/iio/pressure/bmp280-regmap.c b/drivers/iio/pressure/bmp280-regmap.c
index fa52839474b1..d27d68edd906 100644
--- a/drivers/iio/pressure/bmp280-regmap.c
+++ b/drivers/iio/pressure/bmp280-regmap.c
@@ -41,7 +41,7 @@ const struct regmap_config bmp180_regmap_config = {
 };
 EXPORT_SYMBOL_NS(bmp180_regmap_config, IIO_BMP280);
 
-static bool bmp280_is_writeable_reg(struct device *dev, unsigned int reg)
+static bool bme280_is_writeable_reg(struct device *dev, unsigned int reg)
 {
 	switch (reg) {
 	case BMP280_REG_CONFIG:
@@ -54,7 +54,35 @@ static bool bmp280_is_writeable_reg(struct device *dev, unsigned int reg)
 	}
 }
 
+static bool bmp280_is_writeable_reg(struct device *dev, unsigned int reg)
+{
+	switch (reg) {
+	case BMP280_REG_CONFIG:
+	case BMP280_REG_CTRL_MEAS:
+	case BMP280_REG_RESET:
+		return true;
+	default:
+		return false;
+	}
+}
+
 static bool bmp280_is_volatile_reg(struct device *dev, unsigned int reg)
+{
+	switch (reg) {
+	case BMP280_REG_TEMP_XLSB:
+	case BMP280_REG_TEMP_LSB:
+	case BMP280_REG_TEMP_MSB:
+	case BMP280_REG_PRESS_XLSB:
+	case BMP280_REG_PRESS_LSB:
+	case BMP280_REG_PRESS_MSB:
+	case BMP280_REG_STATUS:
+		return true;
+	default:
+		return false;
+	}
+}
+
+static bool bme280_is_volatile_reg(struct device *dev, unsigned int reg)
 {
 	switch (reg) {
 	case BME280_REG_HUMIDITY_LSB:
@@ -71,7 +99,6 @@ static bool bmp280_is_volatile_reg(struct device *dev, unsigned int reg)
 		return false;
 	}
 }
-
 static bool bmp380_is_writeable_reg(struct device *dev, unsigned int reg)
 {
 	switch (reg) {
@@ -167,7 +194,7 @@ const struct regmap_config bmp280_regmap_config = {
 	.reg_bits = 8,
 	.val_bits = 8,
 
-	.max_register = BME280_REG_HUMIDITY_LSB,
+	.max_register = BMP280_REG_TEMP_XLSB,
 	.cache_type = REGCACHE_RBTREE,
 
 	.writeable_reg = bmp280_is_writeable_reg,
@@ -175,6 +202,18 @@ const struct regmap_config bmp280_regmap_config = {
 };
 EXPORT_SYMBOL_NS(bmp280_regmap_config, IIO_BMP280);
 
+const struct regmap_config bme280_regmap_config = {
+	.reg_bits = 8,
+	.val_bits = 8,
+
+	.max_register = BME280_REG_HUMIDITY_LSB,
+	.cache_type = REGCACHE_RBTREE,
+
+	.writeable_reg = bme280_is_writeable_reg,
+	.volatile_reg = bme280_is_volatile_reg,
+};
+EXPORT_SYMBOL_NS(bme280_regmap_config, IIO_BMP280);
+
 const struct regmap_config bmp380_regmap_config = {
 	.reg_bits = 8,
 	.val_bits = 8,
diff --git a/drivers/iio/pressure/bmp280.h b/drivers/iio/pressure/bmp280.h
index 0933e411ae2c..4b0ebce001df 100644
--- a/drivers/iio/pressure/bmp280.h
+++ b/drivers/iio/pressure/bmp280.h
@@ -490,6 +490,7 @@ extern const struct bmp280_chip_info bmp580_chip_info;
 /* Regmap configurations */
 extern const struct regmap_config bmp180_regmap_config;
 extern const struct regmap_config bmp280_regmap_config;
+extern const struct regmap_config bme280_regmap_config;
 extern const struct regmap_config bmp380_regmap_config;
 extern const struct regmap_config bmp580_regmap_config;
 
-- 
2.25.1
Re: [PATCH v1 01/10] iio: pressure: bmp280: Fix regmap for BMP280 device
Posted by Jonathan Cameron 1 year, 4 months ago
On Thu, 11 Jul 2024 23:15:49 +0200
Vasileios Amoiridis <vassilisamir@gmail.com> wrote:

> Up to now, the BMP280 device is using the regmap of the BME280 which
> has registers that exist only in the BME280 device.
> 
> Fixes: 14e8015f8569 ("iio: pressure: bmp280: split driver in logical parts")
> Signed-off-by: Vasileios Amoiridis <vassilisamir@gmail.com>
This fix is for an ancient issue (2016) so I'm not going to rush it in
but will mark it for stable inclusion.  Advantage of taking this through
the main tree is we can move faster with the rest of the series.
So applied to the testing branch of iio.git which will be rebase on rc1
when available and become togreg for this cycle.

Thanks,

Jonathan
Re: [PATCH v1 01/10] iio: pressure: bmp280: Fix regmap for BMP280 device
Posted by Vasileios Amoiridis 1 year, 4 months ago
On Sat, Jul 20, 2024 at 12:04:29PM +0100, Jonathan Cameron wrote:
> On Thu, 11 Jul 2024 23:15:49 +0200
> Vasileios Amoiridis <vassilisamir@gmail.com> wrote:
> 
> > Up to now, the BMP280 device is using the regmap of the BME280 which
> > has registers that exist only in the BME280 device.
> > 
> > Fixes: 14e8015f8569 ("iio: pressure: bmp280: split driver in logical parts")
> > Signed-off-by: Vasileios Amoiridis <vassilisamir@gmail.com>
> This fix is for an ancient issue (2016) so I'm not going to rush it in
> but will mark it for stable inclusion.  Advantage of taking this through
> the main tree is we can move faster with the rest of the series.
> So applied to the testing branch of iio.git which will be rebase on rc1
> when available and become togreg for this cycle.
> 
> Thanks,
> 
> Jonathan
> 
> 

Hi Jonathan,

No problem at all! Yes indeed it's an old fix and I am in no rush at all
so th simpler the better :)

Cheers,
Vasilis