// SPDX-License-Identifier: GPL-2.0-only
/*
 * I2C IIO driver for Bosch BMA400 triaxial acceleration sensor.
 *
 * Copyright 2019 Dan Robertson <dan@dlrobertson.com>
 *
 * I2C address is either 0x14 or 0x15 depending on SDO
 */
#include <linux/i2c.h>
#include <linux/mod_devicetable.h>
#include <linux/module.h>
#include <linux/regmap.h>

#include "bma400.h"

static int bma400_i2c_probe(struct i2c_client *client,
			    const struct i2c_device_id *id)
{
	struct regmap *regmap;

	regmap = devm_regmap_init_i2c(client, &bma400_regmap_config);
	if (IS_ERR(regmap)) {
		dev_err(&client->dev, "failed to create regmap\n");
		return PTR_ERR(regmap);
	}

	return bma400_probe(&client->dev, regmap, id->name);
}

static int bma400_i2c_remove(struct i2c_client *client)
{
	return bma400_remove(&client->dev);
}

static const struct i2c_device_id bma400_i2c_ids[] = {
	{ "bma400", 0 },
	{ }
};
MODULE_DEVICE_TABLE(i2c, bma400_i2c_ids);

static const struct of_device_id bma400_of_i2c_match[] = {
	{ .compatible = "bosch,bma400" },
	{ }
};
MODULE_DEVICE_TABLE(of, bma400_of_i2c_match);

static struct i2c_driver bma400_i2c_driver = {
	.driver = {
		.name = "bma400",
		.of_match_table = bma400_of_i2c_match,
	},
	.probe    = bma400_i2c_probe,
	.remove   = bma400_i2c_remove,
	.id_table = bma400_i2c_ids,
};

module_i2c_driver(bma400_i2c_driver);

MODULE_AUTHOR("Dan Robertson <dan@dlrobertson.com>");
MODULE_DESCRIPTION("Bosch BMA400 triaxial acceleration sensor (I2C)");
MODULE_LICENSE("GPL");
