diff options
author | Stephan Gerhold <stephan@gerhold.net> | 2021-08-02 18:56:57 +0300 |
---|---|---|
committer | Jonathan Cameron <Jonathan.Cameron@huawei.com> | 2021-08-08 18:48:30 +0300 |
commit | 52ae7c708d970e28848f206573a9f11a7826a980 (patch) | |
tree | 1bdee3d0762c4573b028f12e04881295f47592bd /drivers/iio/accel/bmc150-accel-i2c.c | |
parent | 73d672e63f3062e987f9c92abdeb332e280f47db (diff) | |
download | linux-52ae7c708d970e28848f206573a9f11a7826a980.tar.xz |
iio: accel: bmc150: Add support for BMC156
BMC156 is another accelerometer that works just fine with the bmc150-accel
driver. It's very similar to BMC150 (also a accelerometer + magnetometer
combo) but with only one accelerometer interrupt pin. It would make sense
if only INT1 was exposed but someone at Bosch decided to only have an
INT2 pin.
Try to deal with this by making use of the INT2 support introduced
in the previous commit and force using INT2 for BMC156. To detect
that we need to bring up a simplified version of the previous type IDs.
Note that unlike the type IDs removed in commit c06a6aba6835
("iio: accel: bmc150: Drop misleading/duplicate chip identifiers")
here I only add one for the special case of BMC156. Everything else
still happens by reading the CHIP_ID register since the chip type
information often is not accurate in ACPI tables.
Tested-by: Nikita Travkin <nikita@trvn.ru> # BMC156
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Stephan Gerhold <stephan@gerhold.net>
Link: https://lore.kernel.org/r/20210802155657.102766-5-stephan@gerhold.net
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Diffstat (limited to 'drivers/iio/accel/bmc150-accel-i2c.c')
-rw-r--r-- | drivers/iio/accel/bmc150-accel-i2c.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/drivers/iio/accel/bmc150-accel-i2c.c b/drivers/iio/accel/bmc150-accel-i2c.c index 999495f0669d..88bd8a25f142 100644 --- a/drivers/iio/accel/bmc150-accel-i2c.c +++ b/drivers/iio/accel/bmc150-accel-i2c.c @@ -176,6 +176,7 @@ static int bmc150_accel_probe(struct i2c_client *client, { struct regmap *regmap; const char *name = NULL; + enum bmc150_type type = BOSCH_UNKNOWN; bool block_supported = i2c_check_functionality(client->adapter, I2C_FUNC_I2C) || i2c_check_functionality(client->adapter, @@ -188,10 +189,13 @@ static int bmc150_accel_probe(struct i2c_client *client, return PTR_ERR(regmap); } - if (id) + if (id) { name = id->name; + type = id->driver_data; + } - ret = bmc150_accel_core_probe(&client->dev, regmap, client->irq, name, block_supported); + ret = bmc150_accel_core_probe(&client->dev, regmap, client->irq, + type, name, block_supported); if (ret) return ret; @@ -236,6 +240,7 @@ static const struct i2c_device_id bmc150_accel_id[] = { {"bma255"}, {"bma280"}, {"bmc150_accel"}, + {"bmc156_accel", BOSCH_BMC156}, {"bmi055_accel"}, {} }; @@ -251,6 +256,7 @@ static const struct of_device_id bmc150_accel_of_match[] = { { .compatible = "bosch,bma255" }, { .compatible = "bosch,bma280" }, { .compatible = "bosch,bmc150_accel" }, + { .compatible = "bosch,bmc156_accel" }, { .compatible = "bosch,bmi055_accel" }, { }, }; |