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 int bmi160_i2c_remove(struct i2c_client *client) 42 { 43 bmi160_core_remove(&client->dev); 44 45 return 0; 46 } 47 48 static const struct i2c_device_id bmi160_i2c_id[] = { 49 {"bmi160", 0}, 50 {} 51 }; 52 MODULE_DEVICE_TABLE(i2c, bmi160_i2c_id); 53 54 static const struct acpi_device_id bmi160_acpi_match[] = { 55 {"BMI0160", 0}, 56 { }, 57 }; 58 MODULE_DEVICE_TABLE(acpi, bmi160_acpi_match); 59 60 #ifdef CONFIG_OF 61 static const struct of_device_id bmi160_of_match[] = { 62 { .compatible = "bosch,bmi160" }, 63 { }, 64 }; 65 MODULE_DEVICE_TABLE(of, bmi160_of_match); 66 #endif 67 68 static struct i2c_driver bmi160_i2c_driver = { 69 .driver = { 70 .name = "bmi160_i2c", 71 .acpi_match_table = ACPI_PTR(bmi160_acpi_match), 72 .of_match_table = of_match_ptr(bmi160_of_match), 73 }, 74 .probe = bmi160_i2c_probe, 75 .remove = bmi160_i2c_remove, 76 .id_table = bmi160_i2c_id, 77 }; 78 module_i2c_driver(bmi160_i2c_driver); 79 80 MODULE_AUTHOR("Daniel Baluta <daniel.baluta@intel.com>"); 81 MODULE_DESCRIPTION("BMI160 I2C driver"); 82 MODULE_LICENSE("GPL v2"); 83