Commit | Line | Data |
---|---|---|
5170512c ERR |
1 | /* |
2 | * ADXL345 3-Axis Digital Accelerometer I2C driver | |
3 | * | |
4 | * Copyright (c) 2017 Eva Rachel Retuya <eraretuya@gmail.com> | |
5 | * | |
6 | * This file is subject to the terms and conditions of version 2 of | |
7 | * the GNU General Public License. See the file COPYING in the main | |
8 | * directory of this archive for more details. | |
9 | * | |
10 | * 7-bit I2C slave address: 0x1D (ALT ADDRESS pin tied to VDDIO) or | |
11 | * 0x53 (ALT ADDRESS pin grounded) | |
12 | */ | |
13 | ||
14 | #include <linux/i2c.h> | |
15 | #include <linux/module.h> | |
16 | #include <linux/regmap.h> | |
17 | ||
18 | #include "adxl345.h" | |
19 | ||
20 | static const struct regmap_config adxl345_i2c_regmap_config = { | |
21 | .reg_bits = 8, | |
22 | .val_bits = 8, | |
23 | }; | |
24 | ||
25 | static int adxl345_i2c_probe(struct i2c_client *client, | |
26 | const struct i2c_device_id *id) | |
27 | { | |
28 | struct regmap *regmap; | |
29 | ||
30 | regmap = devm_regmap_init_i2c(client, &adxl345_i2c_regmap_config); | |
31 | if (IS_ERR(regmap)) { | |
32 | dev_err(&client->dev, "Error initializing i2c regmap: %ld\n", | |
33 | PTR_ERR(regmap)); | |
34 | return PTR_ERR(regmap); | |
35 | } | |
36 | ||
ef89f4b9 LPC |
37 | return adxl345_core_probe(&client->dev, regmap, id->driver_data, |
38 | id ? id->name : NULL); | |
5170512c ERR |
39 | } |
40 | ||
41 | static int adxl345_i2c_remove(struct i2c_client *client) | |
42 | { | |
43 | return adxl345_core_remove(&client->dev); | |
44 | } | |
45 | ||
46 | static const struct i2c_device_id adxl345_i2c_id[] = { | |
ef89f4b9 LPC |
47 | { "adxl345", ADXL345 }, |
48 | { "adxl375", ADXL375 }, | |
5170512c ERR |
49 | { } |
50 | }; | |
51 | ||
52 | MODULE_DEVICE_TABLE(i2c, adxl345_i2c_id); | |
53 | ||
54 | static const struct of_device_id adxl345_of_match[] = { | |
55 | { .compatible = "adi,adxl345" }, | |
ef89f4b9 | 56 | { .compatible = "adi,adxl375" }, |
5170512c ERR |
57 | { }, |
58 | }; | |
59 | ||
60 | MODULE_DEVICE_TABLE(of, adxl345_of_match); | |
61 | ||
62 | static struct i2c_driver adxl345_i2c_driver = { | |
63 | .driver = { | |
64 | .name = "adxl345_i2c", | |
65 | .of_match_table = adxl345_of_match, | |
66 | }, | |
67 | .probe = adxl345_i2c_probe, | |
68 | .remove = adxl345_i2c_remove, | |
69 | .id_table = adxl345_i2c_id, | |
70 | }; | |
71 | ||
72 | module_i2c_driver(adxl345_i2c_driver); | |
73 | ||
74 | MODULE_AUTHOR("Eva Rachel Retuya <eraretuya@gmail.com>"); | |
75 | MODULE_DESCRIPTION("ADXL345 3-Axis Digital Accelerometer I2C driver"); | |
76 | MODULE_LICENSE("GPL v2"); |