1121354b2SSong Qiang // SPDX-License-Identifier: GPL-2.0
2121354b2SSong Qiang /*
3121354b2SSong Qiang  * Support for PNI RM3100 3-axis geomagnetic sensor on a i2c bus.
4121354b2SSong Qiang  *
5121354b2SSong Qiang  * Copyright (C) 2018 Song Qiang <songqiang1304521@gmail.com>
6121354b2SSong Qiang  *
7121354b2SSong Qiang  * i2c slave address: 0x20 + SA1 << 1 + SA0.
8121354b2SSong Qiang  */
9121354b2SSong Qiang 
10121354b2SSong Qiang #include <linux/i2c.h>
11121354b2SSong Qiang #include <linux/module.h>
12121354b2SSong Qiang 
13121354b2SSong Qiang #include "rm3100.h"
14121354b2SSong Qiang 
15121354b2SSong Qiang static const struct regmap_config rm3100_regmap_config = {
16121354b2SSong Qiang 	.reg_bits = 8,
17121354b2SSong Qiang 	.val_bits = 8,
18121354b2SSong Qiang 
19121354b2SSong Qiang 	.rd_table = &rm3100_readable_table,
20121354b2SSong Qiang 	.wr_table = &rm3100_writable_table,
21121354b2SSong Qiang 	.volatile_table = &rm3100_volatile_table,
22121354b2SSong Qiang 
23121354b2SSong Qiang 	.cache_type = REGCACHE_RBTREE,
24121354b2SSong Qiang };
25121354b2SSong Qiang 
rm3100_probe(struct i2c_client * client)26121354b2SSong Qiang static int rm3100_probe(struct i2c_client *client)
27121354b2SSong Qiang {
28121354b2SSong Qiang 	struct regmap *regmap;
29121354b2SSong Qiang 
30121354b2SSong Qiang 	regmap = devm_regmap_init_i2c(client, &rm3100_regmap_config);
31121354b2SSong Qiang 	if (IS_ERR(regmap))
32121354b2SSong Qiang 		return PTR_ERR(regmap);
33121354b2SSong Qiang 
34121354b2SSong Qiang 	return rm3100_common_probe(&client->dev, regmap, client->irq);
35121354b2SSong Qiang }
36121354b2SSong Qiang 
37121354b2SSong Qiang static const struct of_device_id rm3100_dt_match[] = {
38121354b2SSong Qiang 	{ .compatible = "pni,rm3100", },
39121354b2SSong Qiang 	{ }
40121354b2SSong Qiang };
41121354b2SSong Qiang MODULE_DEVICE_TABLE(of, rm3100_dt_match);
42121354b2SSong Qiang 
43121354b2SSong Qiang static struct i2c_driver rm3100_driver = {
44121354b2SSong Qiang 	.driver = {
45121354b2SSong Qiang 		.name = "rm3100-i2c",
46121354b2SSong Qiang 		.of_match_table = rm3100_dt_match,
47121354b2SSong Qiang 	},
48*7cf15f42SUwe Kleine-König 	.probe = rm3100_probe,
49121354b2SSong Qiang };
50121354b2SSong Qiang module_i2c_driver(rm3100_driver);
51121354b2SSong Qiang 
52121354b2SSong Qiang MODULE_AUTHOR("Song Qiang <songqiang1304521@gmail.com>");
53121354b2SSong Qiang MODULE_DESCRIPTION("PNI RM3100 3-axis magnetometer i2c driver");
54121354b2SSong Qiang MODULE_LICENSE("GPL v2");
55230ee6c6SJonathan Cameron MODULE_IMPORT_NS(IIO_RM3100);
56