1 /* 2 * BMI160 - Bosch IMU, I2C bits 3 * 4 * Copyright (c) 2016, Intel Corporation. 5 * 6 * This file is subject to the terms and conditions of version 2 of 7 * the GNU General Public License. See the file COPYING in the main 8 * directory of this archive for more details. 9 * 10 * 7-bit I2C slave address is: 11 * - 0x68 if SDO is pulled to GND 12 * - 0x69 if SDO is pulled to VDDIO 13 */ 14 #include <linux/acpi.h> 15 #include <linux/i2c.h> 16 #include <linux/module.h> 17 #include <linux/of.h> 18 #include <linux/regmap.h> 19 20 #include "bmi160.h" 21 22 static int bmi160_i2c_probe(struct i2c_client *client, 23 const struct i2c_device_id *id) 24 { 25 struct regmap *regmap; 26 const char *name = NULL; 27 28 regmap = devm_regmap_init_i2c(client, &bmi160_regmap_config); 29 if (IS_ERR(regmap)) { 30 dev_err(&client->dev, "Failed to register i2c regmap %d\n", 31 (int)PTR_ERR(regmap)); 32 return PTR_ERR(regmap); 33 } 34 35 if (id) 36 name = id->name; 37 38 return bmi160_core_probe(&client->dev, regmap, name, false); 39 } 40 41 static const struct i2c_device_id bmi160_i2c_id[] = { 42 {"bmi160", 0}, 43 {} 44 }; 45 MODULE_DEVICE_TABLE(i2c, bmi160_i2c_id); 46 47 static const struct acpi_device_id bmi160_acpi_match[] = { 48 {"BMI0160", 0}, 49 { }, 50 }; 51 MODULE_DEVICE_TABLE(acpi, bmi160_acpi_match); 52 53 #ifdef CONFIG_OF 54 static const struct of_device_id bmi160_of_match[] = { 55 { .compatible = "bosch,bmi160" }, 56 { }, 57 }; 58 MODULE_DEVICE_TABLE(of, bmi160_of_match); 59 #endif 60 61 static struct i2c_driver bmi160_i2c_driver = { 62 .driver = { 63 .name = "bmi160_i2c", 64 .acpi_match_table = ACPI_PTR(bmi160_acpi_match), 65 .of_match_table = of_match_ptr(bmi160_of_match), 66 }, 67 .probe = bmi160_i2c_probe, 68 .id_table = bmi160_i2c_id, 69 }; 70 module_i2c_driver(bmi160_i2c_driver); 71 72 MODULE_AUTHOR("Daniel Baluta <daniel.baluta@intel.com>"); 73 MODULE_DESCRIPTION("BMI160 I2C driver"); 74 MODULE_LICENSE("GPL v2"); 75