^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) // SPDX-License-Identifier: GPL-2.0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) #include <linux/device.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) #include <linux/module.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) #include <linux/regmap.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) #include "bmp280.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) static bool bmp180_is_writeable_reg(struct device *dev, unsigned int reg)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) switch (reg) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) case BMP280_REG_CTRL_MEAS:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) case BMP280_REG_RESET:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) return true;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) default:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) return false;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) static bool bmp180_is_volatile_reg(struct device *dev, unsigned int reg)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) switch (reg) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) case BMP180_REG_OUT_XLSB:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) case BMP180_REG_OUT_LSB:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) case BMP180_REG_OUT_MSB:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) case BMP280_REG_CTRL_MEAS:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) return true;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) default:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) return false;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) const struct regmap_config bmp180_regmap_config = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) .reg_bits = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) .val_bits = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) .max_register = BMP180_REG_OUT_XLSB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) .cache_type = REGCACHE_RBTREE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) .writeable_reg = bmp180_is_writeable_reg,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) .volatile_reg = bmp180_is_volatile_reg,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) EXPORT_SYMBOL(bmp180_regmap_config);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) static bool bmp280_is_writeable_reg(struct device *dev, unsigned int reg)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) switch (reg) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) case BMP280_REG_CONFIG:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) case BMP280_REG_CTRL_HUMIDITY:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) case BMP280_REG_CTRL_MEAS:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) case BMP280_REG_RESET:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) return true;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) default:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) return false;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) static bool bmp280_is_volatile_reg(struct device *dev, unsigned int reg)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) switch (reg) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) case BMP280_REG_HUMIDITY_LSB:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) case BMP280_REG_HUMIDITY_MSB:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) case BMP280_REG_TEMP_XLSB:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) case BMP280_REG_TEMP_LSB:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) case BMP280_REG_TEMP_MSB:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) case BMP280_REG_PRESS_XLSB:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) case BMP280_REG_PRESS_LSB:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) case BMP280_REG_PRESS_MSB:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) case BMP280_REG_STATUS:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) return true;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) default:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) return false;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) const struct regmap_config bmp280_regmap_config = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) .reg_bits = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) .val_bits = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) .max_register = BMP280_REG_HUMIDITY_LSB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) .cache_type = REGCACHE_RBTREE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) .writeable_reg = bmp280_is_writeable_reg,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) .volatile_reg = bmp280_is_volatile_reg,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) EXPORT_SYMBOL(bmp280_regmap_config);