mirror of
https://github.com/fail0verflow/switch-linux.git
synced 2025-05-04 02:34:21 -04:00
iio: accel: bma180: Add support for BMA250E
The BMA250E adds a new fifo mode and is fully backwards compatible with the BMA250, but with a different chip-id. This commit adds support for it by adjusting the chip-id check and otherwise treating it as a regular BMA250. Signed-off-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Jonathan Cameron <jic23@kernel.org>
This commit is contained in:
parent
9ece370b02
commit
f1320b0951
1 changed files with 23 additions and 1 deletions
|
@ -36,6 +36,7 @@
|
||||||
enum chip_ids {
|
enum chip_ids {
|
||||||
BMA180,
|
BMA180,
|
||||||
BMA250,
|
BMA250,
|
||||||
|
BMA250E,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct bma180_data;
|
struct bma180_data;
|
||||||
|
@ -55,6 +56,7 @@ struct bma180_part_info {
|
||||||
u8 power_reg, power_mask, lowpower_val;
|
u8 power_reg, power_mask, lowpower_val;
|
||||||
u8 int_enable_reg, int_enable_mask;
|
u8 int_enable_reg, int_enable_mask;
|
||||||
u8 softreset_reg;
|
u8 softreset_reg;
|
||||||
|
u8 chip_id;
|
||||||
|
|
||||||
int (*chip_config)(struct bma180_data *data);
|
int (*chip_config)(struct bma180_data *data);
|
||||||
void (*chip_disable)(struct bma180_data *data);
|
void (*chip_disable)(struct bma180_data *data);
|
||||||
|
@ -112,6 +114,8 @@ struct bma180_part_info {
|
||||||
#define BMA250_INT1_DATA_MASK BIT(0)
|
#define BMA250_INT1_DATA_MASK BIT(0)
|
||||||
#define BMA250_INT_RESET_MASK BIT(7) /* Reset pending interrupts */
|
#define BMA250_INT_RESET_MASK BIT(7) /* Reset pending interrupts */
|
||||||
|
|
||||||
|
#define BMA250E_CHIP_ID 0xf9
|
||||||
|
|
||||||
struct bma180_data {
|
struct bma180_data {
|
||||||
struct i2c_client *client;
|
struct i2c_client *client;
|
||||||
struct iio_trigger *trig;
|
struct iio_trigger *trig;
|
||||||
|
@ -309,7 +313,7 @@ static int bma180_chip_init(struct bma180_data *data)
|
||||||
|
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
if (ret != BMA180_ID_REG_VAL)
|
if (ret != data->part_info->chip_id)
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
||||||
ret = bma180_soft_reset(data);
|
ret = bma180_soft_reset(data);
|
||||||
|
@ -632,6 +636,7 @@ static const struct bma180_part_info bma180_part_info[] = {
|
||||||
BMA180_TCO_Z, BMA180_MODE_CONFIG, BMA180_LOW_POWER,
|
BMA180_TCO_Z, BMA180_MODE_CONFIG, BMA180_LOW_POWER,
|
||||||
BMA180_CTRL_REG3, BMA180_NEW_DATA_INT,
|
BMA180_CTRL_REG3, BMA180_NEW_DATA_INT,
|
||||||
BMA180_RESET,
|
BMA180_RESET,
|
||||||
|
BMA180_CHIP_ID,
|
||||||
bma180_chip_config,
|
bma180_chip_config,
|
||||||
bma180_chip_disable,
|
bma180_chip_disable,
|
||||||
},
|
},
|
||||||
|
@ -646,6 +651,22 @@ static const struct bma180_part_info bma180_part_info[] = {
|
||||||
BMA250_POWER_REG, BMA250_LOWPOWER_MASK, 1,
|
BMA250_POWER_REG, BMA250_LOWPOWER_MASK, 1,
|
||||||
BMA250_INT_ENABLE_REG, BMA250_DATA_INTEN_MASK,
|
BMA250_INT_ENABLE_REG, BMA250_DATA_INTEN_MASK,
|
||||||
BMA250_RESET_REG,
|
BMA250_RESET_REG,
|
||||||
|
BMA180_CHIP_ID,
|
||||||
|
bma250_chip_config,
|
||||||
|
bma250_chip_disable,
|
||||||
|
},
|
||||||
|
[BMA250E] = {
|
||||||
|
bma250_channels, ARRAY_SIZE(bma250_channels),
|
||||||
|
bma250_scale_table, ARRAY_SIZE(bma250_scale_table),
|
||||||
|
bma250_bw_table, ARRAY_SIZE(bma250_bw_table),
|
||||||
|
BMA250_INT_RESET_REG, BMA250_INT_RESET_MASK,
|
||||||
|
BMA250_POWER_REG, BMA250_SUSPEND_MASK,
|
||||||
|
BMA250_BW_REG, BMA250_BW_MASK,
|
||||||
|
BMA250_RANGE_REG, BMA250_RANGE_MASK,
|
||||||
|
BMA250_POWER_REG, BMA250_LOWPOWER_MASK, 1,
|
||||||
|
BMA250_INT_ENABLE_REG, BMA250_DATA_INTEN_MASK,
|
||||||
|
BMA250_RESET_REG,
|
||||||
|
BMA250E_CHIP_ID,
|
||||||
bma250_chip_config,
|
bma250_chip_config,
|
||||||
bma250_chip_disable,
|
bma250_chip_disable,
|
||||||
},
|
},
|
||||||
|
@ -845,6 +866,7 @@ static SIMPLE_DEV_PM_OPS(bma180_pm_ops, bma180_suspend, bma180_resume);
|
||||||
static struct i2c_device_id bma180_ids[] = {
|
static struct i2c_device_id bma180_ids[] = {
|
||||||
{ "bma180", BMA180 },
|
{ "bma180", BMA180 },
|
||||||
{ "bma250", BMA250 },
|
{ "bma250", BMA250 },
|
||||||
|
{ "bma250e", BMA250E },
|
||||||
{ }
|
{ }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue