linux/drivers/iio/accel/bmc150-accel-spi.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0-or-later
   2/*
   3 * 3-axis accelerometer driver supporting SPI Bosch-Sensortec accelerometer chip
   4 * Copyright © 2015 Pengutronix, Markus Pargmann <mpa@pengutronix.de>
   5 */
   6
   7#include <linux/device.h>
   8#include <linux/mod_devicetable.h>
   9#include <linux/module.h>
  10#include <linux/acpi.h>
  11#include <linux/regmap.h>
  12#include <linux/spi/spi.h>
  13
  14#include "bmc150-accel.h"
  15
  16static int bmc150_accel_probe(struct spi_device *spi)
  17{
  18        struct regmap *regmap;
  19        const char *name = NULL;
  20        enum bmc150_type type = BOSCH_UNKNOWN;
  21        const struct spi_device_id *id = spi_get_device_id(spi);
  22
  23        regmap = devm_regmap_init_spi(spi, &bmc150_regmap_conf);
  24        if (IS_ERR(regmap)) {
  25                dev_err(&spi->dev, "Failed to initialize spi regmap\n");
  26                return PTR_ERR(regmap);
  27        }
  28
  29        if (id) {
  30                name = id->name;
  31                type = id->driver_data;
  32        }
  33
  34        return bmc150_accel_core_probe(&spi->dev, regmap, spi->irq, type, name,
  35                                       true);
  36}
  37
  38static int bmc150_accel_remove(struct spi_device *spi)
  39{
  40        return bmc150_accel_core_remove(&spi->dev);
  41}
  42
  43static const struct acpi_device_id bmc150_accel_acpi_match[] = {
  44        {"BMA0255"},
  45        {"BMA0280"},
  46        {"BMA222"},
  47        {"BMA222E"},
  48        {"BMA250E"},
  49        {"BMC150A"},
  50        {"BMI055A"},
  51        {"BSBA0150"},
  52        { },
  53};
  54MODULE_DEVICE_TABLE(acpi, bmc150_accel_acpi_match);
  55
  56static const struct spi_device_id bmc150_accel_id[] = {
  57        {"bma222"},
  58        {"bma222e"},
  59        {"bma250e"},
  60        {"bma253"},
  61        {"bma255"},
  62        {"bma280"},
  63        {"bmc150_accel"},
  64        {"bmc156_accel", BOSCH_BMC156},
  65        {"bmi055_accel"},
  66        {}
  67};
  68MODULE_DEVICE_TABLE(spi, bmc150_accel_id);
  69
  70static struct spi_driver bmc150_accel_driver = {
  71        .driver = {
  72                .name   = "bmc150_accel_spi",
  73                .acpi_match_table = ACPI_PTR(bmc150_accel_acpi_match),
  74                .pm     = &bmc150_accel_pm_ops,
  75        },
  76        .probe          = bmc150_accel_probe,
  77        .remove         = bmc150_accel_remove,
  78        .id_table       = bmc150_accel_id,
  79};
  80module_spi_driver(bmc150_accel_driver);
  81
  82MODULE_AUTHOR("Markus Pargmann <mpa@pengutronix.de>");
  83MODULE_LICENSE("GPL v2");
  84MODULE_DESCRIPTION("BMC150 SPI accelerometer driver");
  85