0001
0002
0003
0004
0005
0006
0007 #include <linux/device.h>
0008 #include <linux/mod_devicetable.h>
0009 #include <linux/module.h>
0010 #include <linux/acpi.h>
0011 #include <linux/regmap.h>
0012 #include <linux/spi/spi.h>
0013
0014 #include "bmc150-accel.h"
0015
0016 static int bmc150_accel_probe(struct spi_device *spi)
0017 {
0018 struct regmap *regmap;
0019 const char *name = NULL;
0020 enum bmc150_type type = BOSCH_UNKNOWN;
0021 const struct spi_device_id *id = spi_get_device_id(spi);
0022
0023 regmap = devm_regmap_init_spi(spi, &bmc150_regmap_conf);
0024 if (IS_ERR(regmap)) {
0025 dev_err(&spi->dev, "Failed to initialize spi regmap\n");
0026 return PTR_ERR(regmap);
0027 }
0028
0029 if (id) {
0030 name = id->name;
0031 type = id->driver_data;
0032 }
0033
0034 return bmc150_accel_core_probe(&spi->dev, regmap, spi->irq, type, name,
0035 true);
0036 }
0037
0038 static void bmc150_accel_remove(struct spi_device *spi)
0039 {
0040 bmc150_accel_core_remove(&spi->dev);
0041 }
0042
0043 static const struct acpi_device_id bmc150_accel_acpi_match[] = {
0044 {"BMA0255"},
0045 {"BMA0280"},
0046 {"BMA222"},
0047 {"BMA222E"},
0048 {"BMA250E"},
0049 {"BMC150A"},
0050 {"BMI055A"},
0051 {"BSBA0150"},
0052 { },
0053 };
0054 MODULE_DEVICE_TABLE(acpi, bmc150_accel_acpi_match);
0055
0056 static const struct spi_device_id bmc150_accel_id[] = {
0057 {"bma222"},
0058 {"bma222e"},
0059 {"bma250e"},
0060 {"bma253"},
0061 {"bma255"},
0062 {"bma280"},
0063 {"bmc150_accel"},
0064 {"bmc156_accel", BOSCH_BMC156},
0065 {"bmi055_accel"},
0066 {}
0067 };
0068 MODULE_DEVICE_TABLE(spi, bmc150_accel_id);
0069
0070 static struct spi_driver bmc150_accel_driver = {
0071 .driver = {
0072 .name = "bmc150_accel_spi",
0073 .acpi_match_table = ACPI_PTR(bmc150_accel_acpi_match),
0074 .pm = &bmc150_accel_pm_ops,
0075 },
0076 .probe = bmc150_accel_probe,
0077 .remove = bmc150_accel_remove,
0078 .id_table = bmc150_accel_id,
0079 };
0080 module_spi_driver(bmc150_accel_driver);
0081
0082 MODULE_AUTHOR("Markus Pargmann <mpa@pengutronix.de>");
0083 MODULE_LICENSE("GPL v2");
0084 MODULE_DESCRIPTION("BMC150 SPI accelerometer driver");
0085 MODULE_IMPORT_NS(IIO_BMC150);