mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-10 07:00:48 +00:00
iio: accel: Add bma150/smb380 support to bma180
The bma150/smb380 are very similar to the bma023 but have a temperature channel as well. Signed-off-by: Jonathan Bakker <xc-racer2@live.ca> Reviewed-by: Linus Walleij <linus.walleij@linaro.org> Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
This commit is contained in:
parent
35328fb52b
commit
6198bdb489
@ -89,13 +89,13 @@ config ADXL372_I2C
|
||||
module will be called adxl372_i2c.
|
||||
|
||||
config BMA180
|
||||
tristate "Bosch BMA023/BMA180/BMA25x 3-Axis Accelerometer Driver"
|
||||
tristate "Bosch BMA023/BMA1x0/BMA25x 3-Axis Accelerometer Driver"
|
||||
depends on I2C && INPUT_BMA150=n
|
||||
select IIO_BUFFER
|
||||
select IIO_TRIGGERED_BUFFER
|
||||
help
|
||||
Say Y here if you want to build a driver for the Bosch BMA023, BMA180
|
||||
or BMA25x triaxial acceleration sensor.
|
||||
Say Y here if you want to build a driver for the Bosch BMA023, BMA150
|
||||
BMA180, SMB380, or BMA25x triaxial acceleration sensor.
|
||||
|
||||
To compile this driver as a module, choose M here: the
|
||||
module will be called bma180.
|
||||
|
@ -7,7 +7,7 @@
|
||||
* Support for BMA250 (c) Peter Meerwald <pmeerw@pmeerw.net>
|
||||
*
|
||||
* SPI is not supported by driver
|
||||
* BMA023: 7-bit I2C slave address 0x38
|
||||
* BMA023/BMA150/SMB380: 7-bit I2C slave address 0x38
|
||||
* BMA180: 7-bit I2C slave address 0x40 or 0x41
|
||||
* BMA250: 7-bit I2C slave address 0x18 or 0x19
|
||||
* BMA254: 7-bit I2C slave address 0x18 or 0x19
|
||||
@ -35,6 +35,7 @@
|
||||
|
||||
enum chip_ids {
|
||||
BMA023,
|
||||
BMA150,
|
||||
BMA180,
|
||||
BMA250,
|
||||
BMA254,
|
||||
@ -565,8 +566,12 @@ static int bma180_read_raw(struct iio_dev *indio_dev,
|
||||
iio_device_release_direct_mode(indio_dev);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
*val = sign_extend32(ret >> chan->scan_type.shift,
|
||||
chan->scan_type.realbits - 1);
|
||||
if (chan->scan_type.sign == 's') {
|
||||
*val = sign_extend32(ret >> chan->scan_type.shift,
|
||||
chan->scan_type.realbits - 1);
|
||||
} else {
|
||||
*val = ret;
|
||||
}
|
||||
return IIO_VAL_INT;
|
||||
case IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY:
|
||||
*val = data->bw;
|
||||
@ -691,6 +696,18 @@ static const struct iio_chan_spec_ext_info bma180_ext_info[] = {
|
||||
.ext_info = bma023_ext_info, \
|
||||
}
|
||||
|
||||
#define BMA150_TEMP_CHANNEL { \
|
||||
.type = IIO_TEMP, \
|
||||
.info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \
|
||||
BIT(IIO_CHAN_INFO_SCALE) | BIT(IIO_CHAN_INFO_OFFSET), \
|
||||
.scan_index = TEMP, \
|
||||
.scan_type = { \
|
||||
.sign = 'u', \
|
||||
.realbits = 8, \
|
||||
.storagebits = 16, \
|
||||
}, \
|
||||
}
|
||||
|
||||
#define BMA180_ACC_CHANNEL(_axis, _bits) { \
|
||||
.type = IIO_ACCEL, \
|
||||
.modified = 1, \
|
||||
@ -727,6 +744,14 @@ static const struct iio_chan_spec bma023_channels[] = {
|
||||
IIO_CHAN_SOFT_TIMESTAMP(4),
|
||||
};
|
||||
|
||||
static const struct iio_chan_spec bma150_channels[] = {
|
||||
BMA023_ACC_CHANNEL(X, 10),
|
||||
BMA023_ACC_CHANNEL(Y, 10),
|
||||
BMA023_ACC_CHANNEL(Z, 10),
|
||||
BMA150_TEMP_CHANNEL,
|
||||
IIO_CHAN_SOFT_TIMESTAMP(4),
|
||||
};
|
||||
|
||||
static const struct iio_chan_spec bma180_channels[] = {
|
||||
BMA180_ACC_CHANNEL(X, 14),
|
||||
BMA180_ACC_CHANNEL(Y, 14),
|
||||
@ -781,6 +806,34 @@ static const struct bma180_part_info bma180_part_info[] = {
|
||||
.chip_config = bma023_chip_config,
|
||||
.chip_disable = bma023_chip_disable,
|
||||
},
|
||||
[BMA150] = {
|
||||
.chip_id = BMA023_ID_REG_VAL,
|
||||
.channels = bma150_channels,
|
||||
.num_channels = ARRAY_SIZE(bma150_channels),
|
||||
.scale_table = bma023_scale_table,
|
||||
.num_scales = ARRAY_SIZE(bma023_scale_table),
|
||||
.bw_table = bma023_bw_table,
|
||||
.num_bw = ARRAY_SIZE(bma023_bw_table),
|
||||
.temp_offset = -60, /* 0 LSB @ -30 degree C */
|
||||
.int_reset_reg = BMA023_CTRL_REG0,
|
||||
.int_reset_mask = BMA023_INT_RESET_MASK,
|
||||
.sleep_reg = BMA023_CTRL_REG0,
|
||||
.sleep_mask = BMA023_SLEEP,
|
||||
.bw_reg = BMA023_CTRL_REG2,
|
||||
.bw_mask = BMA023_BW_MASK,
|
||||
.scale_reg = BMA023_CTRL_REG2,
|
||||
.scale_mask = BMA023_RANGE_MASK,
|
||||
/* No power mode on bma150 */
|
||||
.power_reg = 0,
|
||||
.power_mask = 0,
|
||||
.lowpower_val = 0,
|
||||
.int_enable_reg = BMA023_CTRL_REG3,
|
||||
.int_enable_mask = BMA023_NEW_DATA_INT,
|
||||
.softreset_reg = BMA023_CTRL_REG0,
|
||||
.softreset_val = BMA023_RESET_VAL,
|
||||
.chip_config = bma023_chip_config,
|
||||
.chip_disable = bma023_chip_disable,
|
||||
},
|
||||
[BMA180] = {
|
||||
.chip_id = BMA180_ID_REG_VAL,
|
||||
.channels = bma180_channels,
|
||||
@ -1105,9 +1158,11 @@ static SIMPLE_DEV_PM_OPS(bma180_pm_ops, bma180_suspend, bma180_resume);
|
||||
|
||||
static const struct i2c_device_id bma180_ids[] = {
|
||||
{ "bma023", BMA023 },
|
||||
{ "bma150", BMA150 },
|
||||
{ "bma180", BMA180 },
|
||||
{ "bma250", BMA250 },
|
||||
{ "bma254", BMA254 },
|
||||
{ "smb380", BMA150 },
|
||||
{ }
|
||||
};
|
||||
|
||||
@ -1118,6 +1173,10 @@ static const struct of_device_id bma180_of_match[] = {
|
||||
.compatible = "bosch,bma023",
|
||||
.data = (void *)BMA023
|
||||
},
|
||||
{
|
||||
.compatible = "bosch,bma150",
|
||||
.data = (void *)BMA150
|
||||
},
|
||||
{
|
||||
.compatible = "bosch,bma180",
|
||||
.data = (void *)BMA180
|
||||
@ -1130,6 +1189,10 @@ static const struct of_device_id bma180_of_match[] = {
|
||||
.compatible = "bosch,bma254",
|
||||
.data = (void *)BMA254
|
||||
},
|
||||
{
|
||||
.compatible = "bosch,smb380",
|
||||
.data = (void *)BMA150
|
||||
},
|
||||
{ }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, bma180_of_match);
|
||||
@ -1149,5 +1212,5 @@ module_i2c_driver(bma180_driver);
|
||||
|
||||
MODULE_AUTHOR("Kravchenko Oleksandr <x0199363@ti.com>");
|
||||
MODULE_AUTHOR("Texas Instruments, Inc.");
|
||||
MODULE_DESCRIPTION("Bosch BMA023/BMA180/BMA25x triaxial acceleration sensor");
|
||||
MODULE_DESCRIPTION("Bosch BMA023/BMA1x0/BMA25x triaxial acceleration sensor");
|
||||
MODULE_LICENSE("GPL");
|
||||
|
Loading…
x
Reference in New Issue
Block a user