cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

bmc150_magn_i2c.c (2127B)


      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");
     83MODULE_IMPORT_NS(IIO_BMC150_MAGN);