bmg160_i2c.c 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. #include <linux/i2c.h>
  3. #include <linux/regmap.h>
  4. #include <linux/iio/iio.h>
  5. #include <linux/module.h>
  6. #include <linux/mod_devicetable.h>
  7. #include "bmg160.h"
  8. static const struct regmap_config bmg160_regmap_i2c_conf = {
  9. .reg_bits = 8,
  10. .val_bits = 8,
  11. .max_register = 0x3f
  12. };
  13. static int bmg160_i2c_probe(struct i2c_client *client)
  14. {
  15. const struct i2c_device_id *id = i2c_client_get_device_id(client);
  16. struct regmap *regmap;
  17. const char *name = NULL;
  18. regmap = devm_regmap_init_i2c(client, &bmg160_regmap_i2c_conf);
  19. if (IS_ERR(regmap)) {
  20. dev_err(&client->dev, "Failed to register i2c regmap: %pe\n",
  21. regmap);
  22. return PTR_ERR(regmap);
  23. }
  24. if (id)
  25. name = id->name;
  26. return bmg160_core_probe(&client->dev, regmap, client->irq, name);
  27. }
  28. static void bmg160_i2c_remove(struct i2c_client *client)
  29. {
  30. bmg160_core_remove(&client->dev);
  31. }
  32. static const struct acpi_device_id bmg160_acpi_match[] = {
  33. {"BMG0160", 0},
  34. {"BMI055B", 0},
  35. {"BMI088B", 0},
  36. {},
  37. };
  38. MODULE_DEVICE_TABLE(acpi, bmg160_acpi_match);
  39. static const struct i2c_device_id bmg160_i2c_id[] = {
  40. { "bmg160" },
  41. { "bmi055_gyro" },
  42. { "bmi088_gyro" },
  43. {}
  44. };
  45. MODULE_DEVICE_TABLE(i2c, bmg160_i2c_id);
  46. static const struct of_device_id bmg160_of_match[] = {
  47. { .compatible = "bosch,bmg160" },
  48. { .compatible = "bosch,bmi055_gyro" },
  49. { }
  50. };
  51. MODULE_DEVICE_TABLE(of, bmg160_of_match);
  52. static struct i2c_driver bmg160_i2c_driver = {
  53. .driver = {
  54. .name = "bmg160_i2c",
  55. .acpi_match_table = bmg160_acpi_match,
  56. .of_match_table = bmg160_of_match,
  57. .pm = &bmg160_pm_ops,
  58. },
  59. .probe = bmg160_i2c_probe,
  60. .remove = bmg160_i2c_remove,
  61. .id_table = bmg160_i2c_id,
  62. };
  63. module_i2c_driver(bmg160_i2c_driver);
  64. MODULE_AUTHOR("Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>");
  65. MODULE_LICENSE("GPL v2");
  66. MODULE_DESCRIPTION("BMG160 I2C Gyro driver");