Skip to content

Commit

Permalink
iio: imu: add BNO055 I2C driver
Browse files Browse the repository at this point in the history
This path adds an I2C driver for communicating to a BNO055 IMU via I2C bus
and it enables the BNO055 core driver to work in this scenario.

Signed-off-by: Andrea Merello <andrea.merello@iit.it>
  • Loading branch information
andreamerello authored and intel-lab-lkp committed Oct 28, 2021
1 parent 185166e commit fab6451
Show file tree
Hide file tree
Showing 3 changed files with 61 additions and 0 deletions.
6 changes: 6 additions & 0 deletions drivers/iio/imu/bno055/Kconfig
Expand Up @@ -7,3 +7,9 @@ config BOSH_BNO055_SERIAL
tristate "Bosh BNO055 attached via serial bus"
depends on SERIAL_DEV_BUS
select BOSH_BNO055_IIO

config BOSH_BNO055_I2C
tristate "Bosh BNO055 attached via I2C bus"
depends on I2C
select REGMAP_I2C
select BOSH_BNO055_IIO
1 change: 1 addition & 0 deletions drivers/iio/imu/bno055/Makefile
Expand Up @@ -2,3 +2,4 @@

obj-$(CONFIG_BOSH_BNO055_IIO) += bno055.o
obj-$(CONFIG_BOSH_BNO055_SERIAL) += bno055_sl.o
obj-$(CONFIG_BOSH_BNO055_I2C) += bno055_i2c.o
54 changes: 54 additions & 0 deletions drivers/iio/imu/bno055/bno055_i2c.c
@@ -0,0 +1,54 @@
// SPDX-License-Identifier: GPL-2.0
/*
* I2C interface for Bosh BNO055 IMU.
* This file implements I2C communication up to the register read/write
* level.
*
* Copyright (C) 2021 Istituto Italiano di Tecnologia
* Electronic Design Laboratory
* Written by Andrea Merello <andrea.merello@iit.it>
*/

#include <linux/i2c.h>
#include <linux/regmap.h>
#include <linux/module.h>

#include "bno055.h"

#define BNO055_I2C_XFER_BURST_BREAK_THRESHOLD 3 /* FIXME */

static int bno055_i2c_probe(struct i2c_client *client,
const struct i2c_device_id *id)
{
struct regmap *regmap =
devm_regmap_init_i2c(client, &bno055_regmap_config);

if (IS_ERR(regmap)) {
dev_err(&client->dev, "Unable to init register map");
return PTR_ERR(regmap);
}

return bno055_probe(&client->dev, regmap,
BNO055_I2C_XFER_BURST_BREAK_THRESHOLD);

return 0;
}

static const struct i2c_device_id bno055_i2c_id[] = {
{"bno055", 0},
{ },
};
MODULE_DEVICE_TABLE(i2c, bno055_i2c_id);

static struct i2c_driver bno055_driver = {
.driver = {
.name = "bno055-i2c",
},
.probe = bno055_i2c_probe,
.id_table = bno055_i2c_id
};
module_i2c_driver(bno055_driver);

MODULE_AUTHOR("Andrea Merello");
MODULE_DESCRIPTION("Bosch BNO055 I2C interface");
MODULE_LICENSE("GPL v2");

0 comments on commit fab6451

Please sign in to comment.