Message ID | 20231002-topic-goodix-berlin-upstream-initial-v7-3-792fb91f5e88@linaro.org (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | Input: add initial support for Goodix Berlin touchscreen IC | expand |
Hi Neil, kernel test robot noticed the following build errors: [auto build test ERROR on 6465e260f48790807eef06b583b38ca9789b6072] url: https://github.com/intel-lab-lkp/linux/commits/Neil-Armstrong/dt-bindings-input-document-Goodix-Berlin-Touchscreen-IC/20231002-145648 base: 6465e260f48790807eef06b583b38ca9789b6072 patch link: https://lore.kernel.org/r/20231002-topic-goodix-berlin-upstream-initial-v7-3-792fb91f5e88%40linaro.org patch subject: [PATCH v7 3/4] Input: goodix-berlin - add I2C support for Goodix Berlin Touchscreen IC config: nios2-allmodconfig (https://download.01.org/0day-ci/archive/20231002/202310021730.epucKAC1-lkp@intel.com/config) compiler: nios2-linux-gcc (GCC) 13.2.0 reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20231002/202310021730.epucKAC1-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202310021730.epucKAC1-lkp@intel.com/ All error/warnings (new ones prefixed by >>): drivers/input/touchscreen/goodix_berlin_core.c: In function 'goodix_berlin_checksum_valid': >> drivers/input/touchscreen/goodix_berlin_core.c:50:16: error: implicit declaration of function 'FIELD_GET' [-Werror=implicit-function-declaration] 50 | return FIELD_GET(GOODIX_BERLIN_COOR_DATA_CHECKSUM_MASK, cal_checksum) == r_checksum; | ^~~~~~~~~ drivers/input/touchscreen/goodix_berlin_core.c: In function 'goodix_berlin_get_ic_info': >> drivers/input/touchscreen/goodix_berlin_core.c:284:1: warning: the frame size of 1140 bytes is larger than 1024 bytes [-Wframe-larger-than=] 284 | } | ^ cc1: some warnings being treated as errors vim +/FIELD_GET +50 drivers/input/touchscreen/goodix_berlin_core.c 3fd649a6bbd95d Neil Armstrong 2023-10-02 15 3fd649a6bbd95d Neil Armstrong 2023-10-02 16 /* 3fd649a6bbd95d Neil Armstrong 2023-10-02 17 * Goodix "Berlin" Touchscreen ID driver 3fd649a6bbd95d Neil Armstrong 2023-10-02 18 * 3fd649a6bbd95d Neil Armstrong 2023-10-02 19 * This driver is distinct from goodix.c since hardware interface 3fd649a6bbd95d Neil Armstrong 2023-10-02 20 * is different enough to require a new driver. 3fd649a6bbd95d Neil Armstrong 2023-10-02 21 * None of the register address or data structure are close enough 3fd649a6bbd95d Neil Armstrong 2023-10-02 22 * to the previous generations. 3fd649a6bbd95d Neil Armstrong 2023-10-02 23 * 3fd649a6bbd95d Neil Armstrong 2023-10-02 24 * Currently only handles Multitouch events with already 3fd649a6bbd95d Neil Armstrong 2023-10-02 25 * programmed firmware and "config" for "Revision D" Berlin IC. 3fd649a6bbd95d Neil Armstrong 2023-10-02 26 * 3fd649a6bbd95d Neil Armstrong 2023-10-02 27 * Support is missing for: 3fd649a6bbd95d Neil Armstrong 2023-10-02 28 * - ESD Management 3fd649a6bbd95d Neil Armstrong 2023-10-02 29 * - Firmware update/flashing 3fd649a6bbd95d Neil Armstrong 2023-10-02 30 * - "Config" update/flashing 3fd649a6bbd95d Neil Armstrong 2023-10-02 31 * - Stylus Events 3fd649a6bbd95d Neil Armstrong 2023-10-02 32 * - Gesture Events 3fd649a6bbd95d Neil Armstrong 2023-10-02 33 * - Support for older revisions (A & B) 3fd649a6bbd95d Neil Armstrong 2023-10-02 34 */ 3fd649a6bbd95d Neil Armstrong 2023-10-02 35 3fd649a6bbd95d Neil Armstrong 2023-10-02 36 static bool goodix_berlin_checksum_valid(const u8 *data, int size) 3fd649a6bbd95d Neil Armstrong 2023-10-02 37 { 3fd649a6bbd95d Neil Armstrong 2023-10-02 38 u32 cal_checksum = 0; 3fd649a6bbd95d Neil Armstrong 2023-10-02 39 u16 r_checksum; 3fd649a6bbd95d Neil Armstrong 2023-10-02 40 u32 i; 3fd649a6bbd95d Neil Armstrong 2023-10-02 41 3fd649a6bbd95d Neil Armstrong 2023-10-02 42 if (size < GOODIX_BERLIN_COOR_DATA_CHECKSUM_SIZE) 3fd649a6bbd95d Neil Armstrong 2023-10-02 43 return false; 3fd649a6bbd95d Neil Armstrong 2023-10-02 44 3fd649a6bbd95d Neil Armstrong 2023-10-02 45 for (i = 0; i < size - GOODIX_BERLIN_COOR_DATA_CHECKSUM_SIZE; i++) 3fd649a6bbd95d Neil Armstrong 2023-10-02 46 cal_checksum += data[i]; 3fd649a6bbd95d Neil Armstrong 2023-10-02 47 3fd649a6bbd95d Neil Armstrong 2023-10-02 48 r_checksum = get_unaligned_le16(&data[i]); 3fd649a6bbd95d Neil Armstrong 2023-10-02 49 3fd649a6bbd95d Neil Armstrong 2023-10-02 @50 return FIELD_GET(GOODIX_BERLIN_COOR_DATA_CHECKSUM_MASK, cal_checksum) == r_checksum; 3fd649a6bbd95d Neil Armstrong 2023-10-02 51 } 3fd649a6bbd95d Neil Armstrong 2023-10-02 52
diff --git a/drivers/input/touchscreen/Kconfig b/drivers/input/touchscreen/Kconfig index 950da599ae1a..cc7b88118158 100644 --- a/drivers/input/touchscreen/Kconfig +++ b/drivers/input/touchscreen/Kconfig @@ -419,6 +419,20 @@ config TOUCHSCREEN_GOODIX config TOUCHSCREEN_GOODIX_BERLIN_CORE tristate +config TOUCHSCREEN_GOODIX_BERLIN_I2C + tristate "Goodix Berlin I2C touchscreen" + depends on I2C + select REGMAP_I2C + select TOUCHSCREEN_GOODIX_BERLIN_CORE + help + Say Y here if you have a Goodix Berlin IC connected to + your system via I2C. + + If unsure, say N. + + To compile this driver as a module, choose M here: the + module will be called goodix_berlin_i2c. + config TOUCHSCREEN_HIDEEP tristate "HiDeep Touch IC" depends on I2C diff --git a/drivers/input/touchscreen/Makefile b/drivers/input/touchscreen/Makefile index 2e2f3e70cd2c..7ef677cf7a10 100644 --- a/drivers/input/touchscreen/Makefile +++ b/drivers/input/touchscreen/Makefile @@ -48,6 +48,7 @@ obj-$(CONFIG_TOUCHSCREEN_EXC3000) += exc3000.o obj-$(CONFIG_TOUCHSCREEN_FUJITSU) += fujitsu_ts.o obj-$(CONFIG_TOUCHSCREEN_GOODIX) += goodix_ts.o obj-$(CONFIG_TOUCHSCREEN_GOODIX_BERLIN_CORE) += goodix_berlin_core.o +obj-$(CONFIG_TOUCHSCREEN_GOODIX_BERLIN_I2C) += goodix_berlin_i2c.o obj-$(CONFIG_TOUCHSCREEN_HIDEEP) += hideep.o obj-$(CONFIG_TOUCHSCREEN_HYNITRON_CSTXXX) += hynitron_cstxxx.o obj-$(CONFIG_TOUCHSCREEN_ILI210X) += ili210x.o diff --git a/drivers/input/touchscreen/goodix_berlin_i2c.c b/drivers/input/touchscreen/goodix_berlin_i2c.c new file mode 100644 index 000000000000..6407b2258eb1 --- /dev/null +++ b/drivers/input/touchscreen/goodix_berlin_i2c.c @@ -0,0 +1,69 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * Goodix Berlin Touchscreen Driver + * + * Copyright (C) 2020 - 2021 Goodix, Inc. + * Copyright (C) 2023 Linaro Ltd. + * + * Based on goodix_ts_berlin driver. + */ +#include <linux/i2c.h> +#include <linux/kernel.h> +#include <linux/module.h> +#include <linux/regmap.h> + +#include "goodix_berlin.h" + +#define I2C_MAX_TRANSFER_SIZE 256 + +static const struct regmap_config goodix_berlin_i2c_regmap_conf = { + .reg_bits = 32, + .val_bits = 8, + .max_raw_read = I2C_MAX_TRANSFER_SIZE, + .max_raw_write = I2C_MAX_TRANSFER_SIZE, +}; + +/* vendor & product left unassigned here, should probably be updated from fw info */ +static const struct input_id goodix_berlin_i2c_input_id = { + .bustype = BUS_I2C, +}; + +static int goodix_berlin_i2c_probe(struct i2c_client *client) +{ + struct regmap *regmap; + + regmap = devm_regmap_init_i2c(client, &goodix_berlin_i2c_regmap_conf); + if (IS_ERR(regmap)) + return PTR_ERR(regmap); + + return goodix_berlin_probe(&client->dev, client->irq, + &goodix_berlin_i2c_input_id, regmap); +} + +static const struct i2c_device_id goodix_berlin_i2c_id[] = { + { "gt9916", 0 }, + { } +}; + +MODULE_DEVICE_TABLE(i2c, goodix_berlin_i2c_id); + +static const struct of_device_id goodix_berlin_i2c_of_match[] = { + { .compatible = "goodix,gt9916", }, + { } +}; +MODULE_DEVICE_TABLE(of, goodix_berlin_i2c_of_match); + +static struct i2c_driver goodix_berlin_i2c_driver = { + .driver = { + .name = "goodix-berlin-i2c", + .of_match_table = goodix_berlin_i2c_of_match, + .pm = pm_sleep_ptr(&goodix_berlin_pm_ops), + }, + .probe = goodix_berlin_i2c_probe, + .id_table = goodix_berlin_i2c_id, +}; +module_i2c_driver(goodix_berlin_i2c_driver); + +MODULE_LICENSE("GPL"); +MODULE_DESCRIPTION("Goodix Berlin I2C Touchscreen driver"); +MODULE_AUTHOR("Neil Armstrong <neil.armstrong@linaro.org>");