bmg160_spi.c 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. #include <linux/spi/spi.h>
  3. #include <linux/regmap.h>
  4. #include <linux/iio/iio.h>
  5. #include <linux/module.h>
  6. #include "bmg160.h"
  7. static const struct regmap_config bmg160_regmap_spi_conf = {
  8. .reg_bits = 8,
  9. .val_bits = 8,
  10. .max_register = 0x3f,
  11. };
  12. static int bmg160_spi_probe(struct spi_device *spi)
  13. {
  14. struct regmap *regmap;
  15. const struct spi_device_id *id = spi_get_device_id(spi);
  16. regmap = devm_regmap_init_spi(spi, &bmg160_regmap_spi_conf);
  17. if (IS_ERR(regmap)) {
  18. dev_err(&spi->dev, "Failed to register spi regmap: %pe\n",
  19. regmap);
  20. return PTR_ERR(regmap);
  21. }
  22. return bmg160_core_probe(&spi->dev, regmap, spi->irq, id->name);
  23. }
  24. static int bmg160_spi_remove(struct spi_device *spi)
  25. {
  26. bmg160_core_remove(&spi->dev);
  27. return 0;
  28. }
  29. static const struct spi_device_id bmg160_spi_id[] = {
  30. {"bmg160", 0},
  31. {"bmi055_gyro", 0},
  32. {"bmi088_gyro", 0},
  33. {}
  34. };
  35. MODULE_DEVICE_TABLE(spi, bmg160_spi_id);
  36. static struct spi_driver bmg160_spi_driver = {
  37. .driver = {
  38. .name = "bmg160_spi",
  39. .pm = &bmg160_pm_ops,
  40. },
  41. .probe = bmg160_spi_probe,
  42. .remove = bmg160_spi_remove,
  43. .id_table = bmg160_spi_id,
  44. };
  45. module_spi_driver(bmg160_spi_driver);
  46. MODULE_AUTHOR("Markus Pargmann <mpa@pengutronix.de>");
  47. MODULE_LICENSE("GPL v2");
  48. MODULE_DESCRIPTION("BMG160 SPI Gyro driver");