Commit | Line | Data |
---|---|---|
fba09e81 NA |
1 | // SPDX-License-Identifier: GPL-2.0-or-later |
2 | /* | |
3 | * Goodix Berlin Touchscreen Driver | |
4 | * | |
5 | * Copyright (C) 2020 - 2021 Goodix, Inc. | |
6 | * Copyright (C) 2023 Linaro Ltd. | |
7 | * | |
8 | * Based on goodix_ts_berlin driver. | |
9 | */ | |
10 | #include <linux/i2c.h> | |
11 | #include <linux/kernel.h> | |
12 | #include <linux/module.h> | |
13 | #include <linux/regmap.h> | |
14 | #include <linux/input.h> | |
15 | ||
16 | #include "goodix_berlin.h" | |
17 | ||
18 | #define I2C_MAX_TRANSFER_SIZE 256 | |
19 | ||
20 | static const struct regmap_config goodix_berlin_i2c_regmap_conf = { | |
21 | .reg_bits = 32, | |
22 | .val_bits = 8, | |
23 | .max_raw_read = I2C_MAX_TRANSFER_SIZE, | |
24 | .max_raw_write = I2C_MAX_TRANSFER_SIZE, | |
25 | }; | |
26 | ||
27 | /* vendor & product left unassigned here, should probably be updated from fw info */ | |
28 | static const struct input_id goodix_berlin_i2c_input_id = { | |
29 | .bustype = BUS_I2C, | |
30 | }; | |
31 | ||
32 | static int goodix_berlin_i2c_probe(struct i2c_client *client) | |
33 | { | |
34 | struct regmap *regmap; | |
35 | int error; | |
36 | ||
37 | regmap = devm_regmap_init_i2c(client, &goodix_berlin_i2c_regmap_conf); | |
38 | if (IS_ERR(regmap)) | |
39 | return PTR_ERR(regmap); | |
40 | ||
41 | error = goodix_berlin_probe(&client->dev, client->irq, | |
42 | &goodix_berlin_i2c_input_id, regmap); | |
43 | if (error) | |
44 | return error; | |
45 | ||
46 | return 0; | |
47 | } | |
48 | ||
49 | static const struct i2c_device_id goodix_berlin_i2c_id[] = { | |
5852f2af | 50 | { "gt9916" }, |
fba09e81 NA |
51 | { } |
52 | }; | |
53 | ||
54 | MODULE_DEVICE_TABLE(i2c, goodix_berlin_i2c_id); | |
55 | ||
56 | static const struct of_device_id goodix_berlin_i2c_of_match[] = { | |
57 | { .compatible = "goodix,gt9916", }, | |
58 | { } | |
59 | }; | |
60 | MODULE_DEVICE_TABLE(of, goodix_berlin_i2c_of_match); | |
61 | ||
62 | static struct i2c_driver goodix_berlin_i2c_driver = { | |
63 | .driver = { | |
64 | .name = "goodix-berlin-i2c", | |
65 | .of_match_table = goodix_berlin_i2c_of_match, | |
66 | .pm = pm_sleep_ptr(&goodix_berlin_pm_ops), | |
67 | }, | |
68 | .probe = goodix_berlin_i2c_probe, | |
69 | .id_table = goodix_berlin_i2c_id, | |
70 | }; | |
71 | module_i2c_driver(goodix_berlin_i2c_driver); | |
72 | ||
73 | MODULE_LICENSE("GPL"); | |
74 | MODULE_DESCRIPTION("Goodix Berlin I2C Touchscreen driver"); | |
75 | MODULE_AUTHOR("Neil Armstrong <neil.armstrong@linaro.org>"); |