1 | // SPDX-License-Identifier: GPL-2.0-or-later |
2 | /* |
3 | * AD7879-1/AD7889-1 touchscreen (I2C bus) |
4 | * |
5 | * Copyright (C) 2008-2010 Michael Hennerich, Analog Devices Inc. |
6 | */ |
7 | |
8 | #include <linux/input.h> /* BUS_I2C */ |
9 | #include <linux/i2c.h> |
10 | #include <linux/module.h> |
11 | #include <linux/types.h> |
12 | #include <linux/of.h> |
13 | #include <linux/pm.h> |
14 | #include <linux/regmap.h> |
15 | |
16 | #include "ad7879.h" |
17 | |
18 | #define AD7879_DEVID 0x79 /* AD7879-1/AD7889-1 */ |
19 | |
20 | static const struct regmap_config ad7879_i2c_regmap_config = { |
21 | .reg_bits = 8, |
22 | .val_bits = 16, |
23 | .max_register = 15, |
24 | }; |
25 | |
26 | static int ad7879_i2c_probe(struct i2c_client *client) |
27 | { |
28 | struct regmap *regmap; |
29 | |
30 | if (!i2c_check_functionality(adap: client->adapter, |
31 | I2C_FUNC_SMBUS_WORD_DATA)) { |
32 | dev_err(&client->dev, "SMBUS Word Data not Supported\n" ); |
33 | return -EIO; |
34 | } |
35 | |
36 | regmap = devm_regmap_init_i2c(client, &ad7879_i2c_regmap_config); |
37 | if (IS_ERR(ptr: regmap)) |
38 | return PTR_ERR(ptr: regmap); |
39 | |
40 | return ad7879_probe(dev: &client->dev, regmap, irq: client->irq, |
41 | BUS_I2C, AD7879_DEVID); |
42 | } |
43 | |
44 | static const struct i2c_device_id ad7879_id[] = { |
45 | { "ad7879" , 0 }, |
46 | { "ad7889" , 0 }, |
47 | { } |
48 | }; |
49 | MODULE_DEVICE_TABLE(i2c, ad7879_id); |
50 | |
51 | #ifdef CONFIG_OF |
52 | static const struct of_device_id ad7879_i2c_dt_ids[] = { |
53 | { .compatible = "adi,ad7879-1" , }, |
54 | { } |
55 | }; |
56 | MODULE_DEVICE_TABLE(of, ad7879_i2c_dt_ids); |
57 | #endif |
58 | |
59 | static struct i2c_driver ad7879_i2c_driver = { |
60 | .driver = { |
61 | .name = "ad7879" , |
62 | .pm = &ad7879_pm_ops, |
63 | .of_match_table = of_match_ptr(ad7879_i2c_dt_ids), |
64 | }, |
65 | .probe = ad7879_i2c_probe, |
66 | .id_table = ad7879_id, |
67 | }; |
68 | |
69 | module_i2c_driver(ad7879_i2c_driver); |
70 | |
71 | MODULE_AUTHOR("Michael Hennerich <michael.hennerich@analog.com>" ); |
72 | MODULE_DESCRIPTION("AD7879(-1) touchscreen I2C bus driver" ); |
73 | MODULE_LICENSE("GPL" ); |
74 | |