linux/drivers/iio/magnetometer/bmc150_magn_i2c.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0-only
   2/*
   3 * 3-axis magnetometer driver supporting following I2C Bosch-Sensortec chips:
   4 *  - BMC150
   5 *  - BMC156
   6 *  - BMM150
   7 *
   8 * Copyright (c) 2016, Intel Corporation.
   9 */
  10#include <linux/device.h>
  11#include <linux/mod_devicetable.h>
  12#include <linux/i2c.h>
  13#include <linux/module.h>
  14#include <linux/acpi.h>
  15#include <linux/regmap.h>
  16
  17#include "bmc150_magn.h"
  18
  19static int bmc150_magn_i2c_probe(struct i2c_client *client,
  20                                 const struct i2c_device_id *id)
  21{
  22        struct regmap *regmap;
  23        const char *name = NULL;
  24
  25        regmap = devm_regmap_init_i2c(client, &bmc150_magn_regmap_config);
  26        if (IS_ERR(regmap)) {
  27                dev_err(&client->dev, "Failed to initialize i2c regmap\n");
  28                return PTR_ERR(regmap);
  29        }
  30
  31        if (id)
  32                name = id->name;
  33
  34        return bmc150_magn_probe(&client->dev, regmap, client->irq, name);
  35}
  36
  37static int bmc150_magn_i2c_remove(struct i2c_client *client)
  38{
  39        return bmc150_magn_remove(&client->dev);
  40}
  41
  42static const struct acpi_device_id bmc150_magn_acpi_match[] = {
  43        {"BMC150B", 0},
  44        {"BMC156B", 0},
  45        {"BMM150B", 0},
  46        {},
  47};
  48MODULE_DEVICE_TABLE(acpi, bmc150_magn_acpi_match);
  49
  50static const struct i2c_device_id bmc150_magn_i2c_id[] = {
  51        {"bmc150_magn", 0},
  52        {"bmc156_magn", 0},
  53        {"bmm150_magn", 0},
  54        {}
  55};
  56MODULE_DEVICE_TABLE(i2c, bmc150_magn_i2c_id);
  57
  58static const struct of_device_id bmc150_magn_of_match[] = {
  59        { .compatible = "bosch,bmc150_magn" },
  60        { .compatible = "bosch,bmc156_magn" },
  61        { .compatible = "bosch,bmm150_magn" }, /* deprecated compatible */
  62        { .compatible = "bosch,bmm150" },
  63        { }
  64};
  65MODULE_DEVICE_TABLE(of, bmc150_magn_of_match);
  66
  67static struct i2c_driver bmc150_magn_driver = {
  68        .driver = {
  69                .name   = "bmc150_magn_i2c",
  70                .of_match_table = bmc150_magn_of_match,
  71                .acpi_match_table = ACPI_PTR(bmc150_magn_acpi_match),
  72                .pm     = &bmc150_magn_pm_ops,
  73        },
  74        .probe          = bmc150_magn_i2c_probe,
  75        .remove         = bmc150_magn_i2c_remove,
  76        .id_table       = bmc150_magn_i2c_id,
  77};
  78module_i2c_driver(bmc150_magn_driver);
  79
  80MODULE_AUTHOR("Daniel Baluta <daniel.baluta@intel.com");
  81MODULE_LICENSE("GPL v2");
  82MODULE_DESCRIPTION("BMC150 I2C magnetometer driver");
  83