* [PATCH 0/6] Small fixes to the cyttsp5 touchscreen driver @ 2023-03-23 13:51 Maximilian Weigand 2023-03-23 13:52 ` [PATCH 1/6] Input: cyttsp5: fix array length Maximilian Weigand ` (5 more replies) 0 siblings, 6 replies; 14+ messages in thread From: Maximilian Weigand @ 2023-03-23 13:51 UTC (permalink / raw) To: Linus Walleij, Dmitry Torokhov, linux-input, linux-kernel, devicetree Cc: Maximilian Weigand, Alistair Francis While working on some intermittent module-loading problems of the cyttsp5 module on the Pine64 PineNote it was found that the device tree example of the cypress,tt21000 was in error regarding the interrupt type (IRQ_TYPE_EDGE_FALLING should be used instead of IRQ_TYPE_LEVEL_LOW). This lead to the proper implementation of device sleep states, which is required to ensure proper functioning of the touchscreen after resume when the correct interrupt type IRQ_TYPE_FALLING_EDGE is used. Sleep and wakeup commands to the touchscreen were derived from the GPL-2 android driver by Cypress Semiconductor (copyright note for Cypress Semiconductor is already in the current driver). The first two patches fix small issues with the code found during development of the suspend functionality. Maximilian Weigand (6): Input: cyttsp5: fix array length Input: cyttsp5: remove unused code devicetree: input: cypress,tt21000: fix interrupt type in dts example Input: cyttsp5: properly initialize the device as a pm wakeup device devicetree: input: cypress,tt21000: add wakeup-source entry to documentation Input: cyttsp5: implement proper sleep and wakeup procedures .../input/touchscreen/cypress,tt21000.yaml | 4 +- drivers/input/touchscreen/cyttsp5.c | 138 +++++++++++++++++- 2 files changed, 136 insertions(+), 6 deletions(-) -- 2.39.2 ^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH 1/6] Input: cyttsp5: fix array length 2023-03-23 13:51 [PATCH 0/6] Small fixes to the cyttsp5 touchscreen driver Maximilian Weigand @ 2023-03-23 13:52 ` Maximilian Weigand 2023-03-23 13:52 ` [PATCH 2/6] Input: cyttsp5: remove unused code Maximilian Weigand ` (4 subsequent siblings) 5 siblings, 0 replies; 14+ messages in thread From: Maximilian Weigand @ 2023-03-23 13:52 UTC (permalink / raw) To: Linus Walleij, Dmitry Torokhov, linux-input, linux-kernel, devicetree Cc: Maximilian Weigand, Alistair Francis The cmd array should be initialized with the proper command size and not with the actual command value that is sent to the touchscreen. Signed-off-by: Maximilian Weigand <mweigand@mweigand.net> Reviewed-by: Alistair Francis <alistair@alistair23.me> --- drivers/input/touchscreen/cyttsp5.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/input/touchscreen/cyttsp5.c b/drivers/input/touchscreen/cyttsp5.c index 16caffa35dd9..42c7b44e37f8 100644 --- a/drivers/input/touchscreen/cyttsp5.c +++ b/drivers/input/touchscreen/cyttsp5.c @@ -559,7 +559,7 @@ static int cyttsp5_hid_output_get_sysinfo(struct cyttsp5 *ts) static int cyttsp5_hid_output_bl_launch_app(struct cyttsp5 *ts) { int rc; - u8 cmd[HID_OUTPUT_BL_LAUNCH_APP]; + u8 cmd[HID_OUTPUT_BL_LAUNCH_APP_SIZE]; u16 crc; put_unaligned_le16(HID_OUTPUT_BL_LAUNCH_APP_SIZE, cmd); -- 2.39.2 ^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 2/6] Input: cyttsp5: remove unused code 2023-03-23 13:51 [PATCH 0/6] Small fixes to the cyttsp5 touchscreen driver Maximilian Weigand 2023-03-23 13:52 ` [PATCH 1/6] Input: cyttsp5: fix array length Maximilian Weigand @ 2023-03-23 13:52 ` Maximilian Weigand 2023-03-23 15:18 ` kernel test robot 2023-03-27 15:17 ` kernel test robot 2023-03-23 13:52 ` [PATCH 3/6] devicetree: input: cypress,tt21000: fix interrupt type in dts example Maximilian Weigand ` (3 subsequent siblings) 5 siblings, 2 replies; 14+ messages in thread From: Maximilian Weigand @ 2023-03-23 13:52 UTC (permalink / raw) To: Linus Walleij, Dmitry Torokhov, linux-input, linux-kernel, devicetree Cc: Maximilian Weigand, Alistair Francis The removed lines were remnants of the android driver of the touch screen and are not used in the current driver. Signed-off-by: Maximilian Weigand <mweigand@mweigand.net> Reviewed-by: Alistair Francis <alistair@alistair23.me> --- drivers/input/touchscreen/cyttsp5.c | 4 ---- 1 file changed, 4 deletions(-) diff --git a/drivers/input/touchscreen/cyttsp5.c b/drivers/input/touchscreen/cyttsp5.c index 42c7b44e37f8..8b0c6975c6ec 100644 --- a/drivers/input/touchscreen/cyttsp5.c +++ b/drivers/input/touchscreen/cyttsp5.c @@ -600,13 +600,9 @@ static int cyttsp5_get_hid_descriptor(struct cyttsp5 *ts, struct cyttsp5_hid_desc *desc) { struct device *dev = ts->dev; - __le16 hid_desc_register = cpu_to_le16(HID_DESC_REG); int rc; u8 cmd[2]; - /* Set HID descriptor register */ - memcpy(cmd, &hid_desc_register, sizeof(hid_desc_register)); - rc = cyttsp5_write(ts, HID_DESC_REG, NULL, 0); if (rc) { dev_err(dev, "Failed to get HID descriptor, rc=%d\n", rc); -- 2.39.2 ^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [PATCH 2/6] Input: cyttsp5: remove unused code 2023-03-23 13:52 ` [PATCH 2/6] Input: cyttsp5: remove unused code Maximilian Weigand @ 2023-03-23 15:18 ` kernel test robot 2023-03-27 15:17 ` kernel test robot 1 sibling, 0 replies; 14+ messages in thread From: kernel test robot @ 2023-03-23 15:18 UTC (permalink / raw) To: Maximilian Weigand, Linus Walleij, Dmitry Torokhov, linux-input, linux-kernel, devicetree Cc: oe-kbuild-all, Maximilian Weigand, Alistair Francis Hi Maximilian, Thank you for the patch! Perhaps something to improve: [auto build test WARNING on dtor-input/next] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Maximilian-Weigand/Input-cyttsp5-fix-array-length/20230323-215957 base: https://git.kernel.org/pub/scm/linux/kernel/git/dtor/input.git next patch link: https://lore.kernel.org/r/20230323135205.1160879-3-mweigand%40mweigand.net patch subject: [PATCH 2/6] Input: cyttsp5: remove unused code config: x86_64-allmodconfig (https://download.01.org/0day-ci/archive/20230323/202303232302.FB64fi39-lkp@intel.com/config) compiler: gcc-11 (Debian 11.3.0-8) 11.3.0 reproduce (this is a W=1 build): # https://github.com/intel-lab-lkp/linux/commit/4358a60821eb8149dabed197c09d3c0eab63bf38 git remote add linux-review https://github.com/intel-lab-lkp/linux git fetch --no-tags linux-review Maximilian-Weigand/Input-cyttsp5-fix-array-length/20230323-215957 git checkout 4358a60821eb8149dabed197c09d3c0eab63bf38 # save the config file mkdir build_dir && cp config build_dir/.config make W=1 O=build_dir ARCH=x86_64 olddefconfig make W=1 O=build_dir ARCH=x86_64 SHELL=/bin/bash drivers/input/touchscreen/ If you fix the issue, kindly add following tag where applicable | Reported-by: kernel test robot <lkp@intel.com> | Link: https://lore.kernel.org/oe-kbuild-all/202303232302.FB64fi39-lkp@intel.com/ All warnings (new ones prefixed by >>): drivers/input/touchscreen/cyttsp5.c: In function 'cyttsp5_get_hid_descriptor': >> drivers/input/touchscreen/cyttsp5.c:604:12: warning: unused variable 'cmd' [-Wunused-variable] 604 | u8 cmd[2]; | ^~~ vim +/cmd +604 drivers/input/touchscreen/cyttsp5.c 5b0c03e24a061f Alistair Francis 2022-10-31 598 5b0c03e24a061f Alistair Francis 2022-10-31 599 static int cyttsp5_get_hid_descriptor(struct cyttsp5 *ts, 5b0c03e24a061f Alistair Francis 2022-10-31 600 struct cyttsp5_hid_desc *desc) 5b0c03e24a061f Alistair Francis 2022-10-31 601 { 5b0c03e24a061f Alistair Francis 2022-10-31 602 struct device *dev = ts->dev; 5b0c03e24a061f Alistair Francis 2022-10-31 603 int rc; 5b0c03e24a061f Alistair Francis 2022-10-31 @604 u8 cmd[2]; 5b0c03e24a061f Alistair Francis 2022-10-31 605 5b0c03e24a061f Alistair Francis 2022-10-31 606 rc = cyttsp5_write(ts, HID_DESC_REG, NULL, 0); 5b0c03e24a061f Alistair Francis 2022-10-31 607 if (rc) { 5b0c03e24a061f Alistair Francis 2022-10-31 608 dev_err(dev, "Failed to get HID descriptor, rc=%d\n", rc); 5b0c03e24a061f Alistair Francis 2022-10-31 609 return rc; 5b0c03e24a061f Alistair Francis 2022-10-31 610 } 5b0c03e24a061f Alistair Francis 2022-10-31 611 5b0c03e24a061f Alistair Francis 2022-10-31 612 rc = wait_for_completion_interruptible_timeout(&ts->cmd_done, 5b0c03e24a061f Alistair Francis 2022-10-31 613 msecs_to_jiffies(CY_HID_GET_HID_DESCRIPTOR_TIMEOUT_MS)); 5b0c03e24a061f Alistair Francis 2022-10-31 614 if (rc <= 0) { 5b0c03e24a061f Alistair Francis 2022-10-31 615 dev_err(ts->dev, "HID get descriptor timed out\n"); 5b0c03e24a061f Alistair Francis 2022-10-31 616 rc = -ETIMEDOUT; 5b0c03e24a061f Alistair Francis 2022-10-31 617 return rc; 5b0c03e24a061f Alistair Francis 2022-10-31 618 } 5b0c03e24a061f Alistair Francis 2022-10-31 619 5b0c03e24a061f Alistair Francis 2022-10-31 620 memcpy(desc, ts->response_buf, sizeof(*desc)); 5b0c03e24a061f Alistair Francis 2022-10-31 621 5b0c03e24a061f Alistair Francis 2022-10-31 622 /* Check HID descriptor length and version */ 5b0c03e24a061f Alistair Francis 2022-10-31 623 if (le16_to_cpu(desc->hid_desc_len) != sizeof(*desc) || 5b0c03e24a061f Alistair Francis 2022-10-31 624 le16_to_cpu(desc->bcd_version) != HID_VERSION) { 5b0c03e24a061f Alistair Francis 2022-10-31 625 dev_err(dev, "Unsupported HID version\n"); 5b0c03e24a061f Alistair Francis 2022-10-31 626 return -ENODEV; 5b0c03e24a061f Alistair Francis 2022-10-31 627 } 5b0c03e24a061f Alistair Francis 2022-10-31 628 5b0c03e24a061f Alistair Francis 2022-10-31 629 return 0; 5b0c03e24a061f Alistair Francis 2022-10-31 630 } 5b0c03e24a061f Alistair Francis 2022-10-31 631 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 2/6] Input: cyttsp5: remove unused code 2023-03-23 13:52 ` [PATCH 2/6] Input: cyttsp5: remove unused code Maximilian Weigand 2023-03-23 15:18 ` kernel test robot @ 2023-03-27 15:17 ` kernel test robot 1 sibling, 0 replies; 14+ messages in thread From: kernel test robot @ 2023-03-27 15:17 UTC (permalink / raw) To: Maximilian Weigand, Linus Walleij, Dmitry Torokhov, linux-input, linux-kernel, devicetree Cc: llvm, oe-kbuild-all, Maximilian Weigand, Alistair Francis Hi Maximilian, Thank you for the patch! Perhaps something to improve: [auto build test WARNING on dtor-input/next] [also build test WARNING on dtor-input/for-linus linus/master v6.3-rc4 next-20230327] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Maximilian-Weigand/Input-cyttsp5-fix-array-length/20230323-215957 base: https://git.kernel.org/pub/scm/linux/kernel/git/dtor/input.git next patch link: https://lore.kernel.org/r/20230323135205.1160879-3-mweigand%40mweigand.net patch subject: [PATCH 2/6] Input: cyttsp5: remove unused code config: i386-randconfig-a011-20230327 (https://download.01.org/0day-ci/archive/20230327/202303272323.nRNi9Sso-lkp@intel.com/config) compiler: clang version 14.0.6 (https://github.com/llvm/llvm-project f28c006a5895fc0e329fe15fead81e37457cb1d1) reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # https://github.com/intel-lab-lkp/linux/commit/4358a60821eb8149dabed197c09d3c0eab63bf38 git remote add linux-review https://github.com/intel-lab-lkp/linux git fetch --no-tags linux-review Maximilian-Weigand/Input-cyttsp5-fix-array-length/20230323-215957 git checkout 4358a60821eb8149dabed197c09d3c0eab63bf38 # save the config file mkdir build_dir && cp config build_dir/.config COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=i386 olddefconfig COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=i386 SHELL=/bin/bash drivers/input/touchscreen/ If you fix the issue, kindly add following tag where applicable | Reported-by: kernel test robot <lkp@intel.com> | Link: https://lore.kernel.org/oe-kbuild-all/202303272323.nRNi9Sso-lkp@intel.com/ All warnings (new ones prefixed by >>): >> drivers/input/touchscreen/cyttsp5.c:604:5: warning: unused variable 'cmd' [-Wunused-variable] u8 cmd[2]; ^ 1 warning generated. vim +/cmd +604 drivers/input/touchscreen/cyttsp5.c 5b0c03e24a061f Alistair Francis 2022-10-31 598 5b0c03e24a061f Alistair Francis 2022-10-31 599 static int cyttsp5_get_hid_descriptor(struct cyttsp5 *ts, 5b0c03e24a061f Alistair Francis 2022-10-31 600 struct cyttsp5_hid_desc *desc) 5b0c03e24a061f Alistair Francis 2022-10-31 601 { 5b0c03e24a061f Alistair Francis 2022-10-31 602 struct device *dev = ts->dev; 5b0c03e24a061f Alistair Francis 2022-10-31 603 int rc; 5b0c03e24a061f Alistair Francis 2022-10-31 @604 u8 cmd[2]; 5b0c03e24a061f Alistair Francis 2022-10-31 605 5b0c03e24a061f Alistair Francis 2022-10-31 606 rc = cyttsp5_write(ts, HID_DESC_REG, NULL, 0); 5b0c03e24a061f Alistair Francis 2022-10-31 607 if (rc) { 5b0c03e24a061f Alistair Francis 2022-10-31 608 dev_err(dev, "Failed to get HID descriptor, rc=%d\n", rc); 5b0c03e24a061f Alistair Francis 2022-10-31 609 return rc; 5b0c03e24a061f Alistair Francis 2022-10-31 610 } 5b0c03e24a061f Alistair Francis 2022-10-31 611 5b0c03e24a061f Alistair Francis 2022-10-31 612 rc = wait_for_completion_interruptible_timeout(&ts->cmd_done, 5b0c03e24a061f Alistair Francis 2022-10-31 613 msecs_to_jiffies(CY_HID_GET_HID_DESCRIPTOR_TIMEOUT_MS)); 5b0c03e24a061f Alistair Francis 2022-10-31 614 if (rc <= 0) { 5b0c03e24a061f Alistair Francis 2022-10-31 615 dev_err(ts->dev, "HID get descriptor timed out\n"); 5b0c03e24a061f Alistair Francis 2022-10-31 616 rc = -ETIMEDOUT; 5b0c03e24a061f Alistair Francis 2022-10-31 617 return rc; 5b0c03e24a061f Alistair Francis 2022-10-31 618 } 5b0c03e24a061f Alistair Francis 2022-10-31 619 5b0c03e24a061f Alistair Francis 2022-10-31 620 memcpy(desc, ts->response_buf, sizeof(*desc)); 5b0c03e24a061f Alistair Francis 2022-10-31 621 5b0c03e24a061f Alistair Francis 2022-10-31 622 /* Check HID descriptor length and version */ 5b0c03e24a061f Alistair Francis 2022-10-31 623 if (le16_to_cpu(desc->hid_desc_len) != sizeof(*desc) || 5b0c03e24a061f Alistair Francis 2022-10-31 624 le16_to_cpu(desc->bcd_version) != HID_VERSION) { 5b0c03e24a061f Alistair Francis 2022-10-31 625 dev_err(dev, "Unsupported HID version\n"); 5b0c03e24a061f Alistair Francis 2022-10-31 626 return -ENODEV; 5b0c03e24a061f Alistair Francis 2022-10-31 627 } 5b0c03e24a061f Alistair Francis 2022-10-31 628 5b0c03e24a061f Alistair Francis 2022-10-31 629 return 0; 5b0c03e24a061f Alistair Francis 2022-10-31 630 } 5b0c03e24a061f Alistair Francis 2022-10-31 631 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests ^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH 3/6] devicetree: input: cypress,tt21000: fix interrupt type in dts example 2023-03-23 13:51 [PATCH 0/6] Small fixes to the cyttsp5 touchscreen driver Maximilian Weigand 2023-03-23 13:52 ` [PATCH 1/6] Input: cyttsp5: fix array length Maximilian Weigand 2023-03-23 13:52 ` [PATCH 2/6] Input: cyttsp5: remove unused code Maximilian Weigand @ 2023-03-23 13:52 ` Maximilian Weigand 2023-03-24 9:41 ` Krzysztof Kozlowski 2023-03-29 8:43 ` Linus Walleij 2023-03-23 13:52 ` [PATCH 4/6] Input: cyttsp5: properly initialize the device as a pm wakeup device Maximilian Weigand ` (2 subsequent siblings) 5 siblings, 2 replies; 14+ messages in thread From: Maximilian Weigand @ 2023-03-23 13:52 UTC (permalink / raw) To: Linus Walleij, Dmitry Torokhov, linux-input, linux-kernel, devicetree Cc: Maximilian Weigand, Alistair Francis Triggering the interrupt of the IRQ_TYPE_LEVEL_LOW type can lead to probing issues with the device for the current driver (encountered on the Pine64 PineNote). Basically the interrupt would be triggered before certain commands were sent to the device, leading to a race between the device responding fast enough and the irq handler fetching a data frame from it. Actually all devices currently using the driver already use a falling edge trigger. Signed-off-by: Maximilian Weigand <mweigand@mweigand.net> Reviewed-by: Alistair Francis <alistair@alistair23.me> --- .../devicetree/bindings/input/touchscreen/cypress,tt21000.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Documentation/devicetree/bindings/input/touchscreen/cypress,tt21000.yaml b/Documentation/devicetree/bindings/input/touchscreen/cypress,tt21000.yaml index 1959ec394768..a77203c78d6e 100644 --- a/Documentation/devicetree/bindings/input/touchscreen/cypress,tt21000.yaml +++ b/Documentation/devicetree/bindings/input/touchscreen/cypress,tt21000.yaml @@ -83,7 +83,7 @@ examples: pinctrl-names = "default"; pinctrl-0 = <&tp_reset_ds203>; interrupt-parent = <&pio>; - interrupts = <1 5 IRQ_TYPE_LEVEL_LOW>; + interrupts = <1 5 IRQ_TYPE_EDGE_FALLING>; reset-gpios = <&pio 7 1 GPIO_ACTIVE_LOW>; vdd-supply = <®_touch>; -- 2.39.2 ^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [PATCH 3/6] devicetree: input: cypress,tt21000: fix interrupt type in dts example 2023-03-23 13:52 ` [PATCH 3/6] devicetree: input: cypress,tt21000: fix interrupt type in dts example Maximilian Weigand @ 2023-03-24 9:41 ` Krzysztof Kozlowski 2023-03-29 8:43 ` Linus Walleij 1 sibling, 0 replies; 14+ messages in thread From: Krzysztof Kozlowski @ 2023-03-24 9:41 UTC (permalink / raw) To: Maximilian Weigand, Linus Walleij, Dmitry Torokhov, linux-input, linux-kernel, devicetree Cc: Alistair Francis On 23/03/2023 14:52, Maximilian Weigand wrote: > Triggering the interrupt of the IRQ_TYPE_LEVEL_LOW type can lead to > probing issues with the device for the current driver (encountered on > the Pine64 PineNote). Basically the interrupt would be triggered before > certain commands were sent to the device, leading to a race between the > device responding fast enough and the irq handler fetching a data frame > from it. Actually all devices currently using the driver already use a Use subject prefixes matching the subsystem (which you can get for example with `git log --oneline -- DIRECTORY_OR_FILE` on the directory your patch is touching). "dt-bindings", not "devicetree" Please use scripts/get_maintainers.pl to get a list of necessary people and lists to CC. It might happen, that command when run on an older kernel, gives you outdated entries. Therefore please be sure you base your patches on recent Linux kernel. > falling edge trigger. > > Signed-off-by: Maximilian Weigand <mweigand@mweigand.net> > Reviewed-by: Alistair Francis <alistair@alistair23.me> Usually reviews are public. Best regards, Krzysztof ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 3/6] devicetree: input: cypress,tt21000: fix interrupt type in dts example 2023-03-23 13:52 ` [PATCH 3/6] devicetree: input: cypress,tt21000: fix interrupt type in dts example Maximilian Weigand 2023-03-24 9:41 ` Krzysztof Kozlowski @ 2023-03-29 8:43 ` Linus Walleij 1 sibling, 0 replies; 14+ messages in thread From: Linus Walleij @ 2023-03-29 8:43 UTC (permalink / raw) To: Maximilian Weigand Cc: Dmitry Torokhov, linux-input, linux-kernel, devicetree, Alistair Francis On Thu, Mar 23, 2023 at 2:52 PM Maximilian Weigand <mweigand@mweigand.net> wrote: > Triggering the interrupt of the IRQ_TYPE_LEVEL_LOW type can lead to > probing issues with the device for the current driver (encountered on > the Pine64 PineNote). Basically the interrupt would be triggered before > certain commands were sent to the device, leading to a race between the > device responding fast enough and the irq handler fetching a data frame > from it. Actually all devices currently using the driver already use a > falling edge trigger. > > Signed-off-by: Maximilian Weigand <mweigand@mweigand.net> > Reviewed-by: Alistair Francis <alistair@alistair23.me> Reviewed-by: Linus Walleij <linus.walleij@linaro.org> Yours, Linus Walleij ^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH 4/6] Input: cyttsp5: properly initialize the device as a pm wakeup device 2023-03-23 13:51 [PATCH 0/6] Small fixes to the cyttsp5 touchscreen driver Maximilian Weigand ` (2 preceding siblings ...) 2023-03-23 13:52 ` [PATCH 3/6] devicetree: input: cypress,tt21000: fix interrupt type in dts example Maximilian Weigand @ 2023-03-23 13:52 ` Maximilian Weigand 2023-03-23 13:52 ` [PATCH 5/6] devicetree: input: cypress,tt21000: add wakeup-source entry to documentation Maximilian Weigand 2023-03-23 13:52 ` [PATCH 6/6] Input: cyttsp5: implement proper sleep and wakeup procedures Maximilian Weigand 5 siblings, 0 replies; 14+ messages in thread From: Maximilian Weigand @ 2023-03-23 13:52 UTC (permalink / raw) To: Linus Walleij, Dmitry Torokhov, linux-input, linux-kernel, devicetree Cc: Maximilian Weigand, Alistair Francis When used as a wakeup source the driver should be properly registered with the pm system using device_init_wakeup. Signed-off-by: Maximilian Weigand <mweigand@mweigand.net> Reviewed-by: Alistair Francis <alistair@alistair23.me> --- drivers/input/touchscreen/cyttsp5.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/input/touchscreen/cyttsp5.c b/drivers/input/touchscreen/cyttsp5.c index 8b0c6975c6ec..01dd10a596ab 100644 --- a/drivers/input/touchscreen/cyttsp5.c +++ b/drivers/input/touchscreen/cyttsp5.c @@ -830,6 +830,9 @@ static int cyttsp5_probe(struct device *dev, struct regmap *regmap, int irq, return error; } + if (device_property_read_bool(dev, "wakeup-source")) + device_init_wakeup(dev, true); + error = cyttsp5_startup(ts); if (error) { dev_err(ts->dev, "Fail initial startup r=%d\n", error); -- 2.39.2 ^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 5/6] devicetree: input: cypress,tt21000: add wakeup-source entry to documentation 2023-03-23 13:51 [PATCH 0/6] Small fixes to the cyttsp5 touchscreen driver Maximilian Weigand ` (3 preceding siblings ...) 2023-03-23 13:52 ` [PATCH 4/6] Input: cyttsp5: properly initialize the device as a pm wakeup device Maximilian Weigand @ 2023-03-23 13:52 ` Maximilian Weigand 2023-03-24 9:42 ` Krzysztof Kozlowski 2023-03-29 8:43 ` Linus Walleij 2023-03-23 13:52 ` [PATCH 6/6] Input: cyttsp5: implement proper sleep and wakeup procedures Maximilian Weigand 5 siblings, 2 replies; 14+ messages in thread From: Maximilian Weigand @ 2023-03-23 13:52 UTC (permalink / raw) To: Linus Walleij, Dmitry Torokhov, linux-input, linux-kernel, devicetree Cc: Maximilian Weigand, Alistair Francis The touchscreen can be used to wake up systems from sleep and therefore the wakeup-source entry should be included in the documentation. Signed-off-by: Maximilian Weigand <mweigand@mweigand.net> Reviewed-by: Alistair Francis <alistair@alistair23.me> --- .../devicetree/bindings/input/touchscreen/cypress,tt21000.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Documentation/devicetree/bindings/input/touchscreen/cypress,tt21000.yaml b/Documentation/devicetree/bindings/input/touchscreen/cypress,tt21000.yaml index a77203c78d6e..e2da13b7991d 100644 --- a/Documentation/devicetree/bindings/input/touchscreen/cypress,tt21000.yaml +++ b/Documentation/devicetree/bindings/input/touchscreen/cypress,tt21000.yaml @@ -40,6 +40,8 @@ properties: linux,keycodes: description: EV_ABS specific event code generated by the axis. + wakeup-source: true + patternProperties: "^button@[0-9]+$": type: object -- 2.39.2 ^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [PATCH 5/6] devicetree: input: cypress,tt21000: add wakeup-source entry to documentation 2023-03-23 13:52 ` [PATCH 5/6] devicetree: input: cypress,tt21000: add wakeup-source entry to documentation Maximilian Weigand @ 2023-03-24 9:42 ` Krzysztof Kozlowski 2023-03-29 8:43 ` Linus Walleij 1 sibling, 0 replies; 14+ messages in thread From: Krzysztof Kozlowski @ 2023-03-24 9:42 UTC (permalink / raw) To: Maximilian Weigand, Linus Walleij, Dmitry Torokhov, linux-input, linux-kernel, devicetree Cc: Alistair Francis On 23/03/2023 14:52, Maximilian Weigand wrote: > The touchscreen can be used to wake up systems from sleep and therefore > the wakeup-source entry should be included in the documentation. Use subject prefixes matching the subsystem (which you can get for example with `git log --oneline -- DIRECTORY_OR_FILE` on the directory your patch is touching). Please use scripts/get_maintainers.pl to get a list of necessary people and lists to CC. It might happen, that command when run on an older kernel, gives you outdated entries. Therefore please be sure you base your patches on recent Linux kernel. > > Signed-off-by: Maximilian Weigand <mweigand@mweigand.net> > Reviewed-by: Alistair Francis <alistair@alistair23.me> Best regards, Krzysztof ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 5/6] devicetree: input: cypress,tt21000: add wakeup-source entry to documentation 2023-03-23 13:52 ` [PATCH 5/6] devicetree: input: cypress,tt21000: add wakeup-source entry to documentation Maximilian Weigand 2023-03-24 9:42 ` Krzysztof Kozlowski @ 2023-03-29 8:43 ` Linus Walleij 1 sibling, 0 replies; 14+ messages in thread From: Linus Walleij @ 2023-03-29 8:43 UTC (permalink / raw) To: Maximilian Weigand Cc: Dmitry Torokhov, linux-input, linux-kernel, devicetree, Alistair Francis On Thu, Mar 23, 2023 at 2:52 PM Maximilian Weigand <mweigand@mweigand.net> wrote: > The touchscreen can be used to wake up systems from sleep and therefore > the wakeup-source entry should be included in the documentation. > > Signed-off-by: Maximilian Weigand <mweigand@mweigand.net> > Reviewed-by: Alistair Francis <alistair@alistair23.me> Reviewed-by: Linus Walleij <linus.walleij@linaro.org> Yours, Linus Walleij ^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH 6/6] Input: cyttsp5: implement proper sleep and wakeup procedures 2023-03-23 13:51 [PATCH 0/6] Small fixes to the cyttsp5 touchscreen driver Maximilian Weigand ` (4 preceding siblings ...) 2023-03-23 13:52 ` [PATCH 5/6] devicetree: input: cypress,tt21000: add wakeup-source entry to documentation Maximilian Weigand @ 2023-03-23 13:52 ` Maximilian Weigand 2023-03-27 18:11 ` kernel test robot 5 siblings, 1 reply; 14+ messages in thread From: Maximilian Weigand @ 2023-03-23 13:52 UTC (permalink / raw) To: Linus Walleij, Dmitry Torokhov, linux-input, linux-kernel, devicetree Cc: Maximilian Weigand, Alistair Francis The touchscreen can be put into a deep sleep state that prevents it from emitting touch irqs. Put the touchscreen into deep sleep during suspend if it is not marked as a wakeup source. This also fixes a problem with the touchscreen getting unresponsive after system resume because it pulled the interrupt line low during sleep in response to a touch event, thereby effectively disabling the interrupt handling (which triggers on the falling edge). Signed-off-by: Maximilian Weigand <mweigand@mweigand.net> Reviewed-by: Alistair Francis <alistair@alistair23.me> --- drivers/input/touchscreen/cyttsp5.c | 129 +++++++++++++++++++++++++++- 1 file changed, 128 insertions(+), 1 deletion(-) diff --git a/drivers/input/touchscreen/cyttsp5.c b/drivers/input/touchscreen/cyttsp5.c index 01dd10a596ab..3e8387f6347c 100644 --- a/drivers/input/touchscreen/cyttsp5.c +++ b/drivers/input/touchscreen/cyttsp5.c @@ -43,6 +43,7 @@ #define HID_DESC_REG 0x1 #define HID_INPUT_REG 0x3 #define HID_OUTPUT_REG 0x4 +#define HID_COMMAND_REG 0x5 #define REPORT_ID_TOUCH 0x1 #define REPORT_ID_BTN 0x3 @@ -68,6 +69,7 @@ #define HID_APP_OUTPUT_REPORT_ID 0x2F #define HID_BL_RESPONSE_REPORT_ID 0x30 #define HID_BL_OUTPUT_REPORT_ID 0x40 +#define HID_RESPONSE_REPORT_ID 0xF0 #define HID_OUTPUT_RESPONSE_REPORT_OFFSET 2 #define HID_OUTPUT_RESPONSE_CMD_OFFSET 4 @@ -78,9 +80,15 @@ #define HID_SYSINFO_BTN_MASK GENMASK(7, 0) #define HID_SYSINFO_MAX_BTN 8 +#define HID_CMD_SET_POWER 0x8 + +#define HID_POWER_ON 0x0 +#define HID_POWER_SLEEP 0x1 + #define CY_HID_OUTPUT_TIMEOUT_MS 200 #define CY_HID_OUTPUT_GET_SYSINFO_TIMEOUT_MS 3000 #define CY_HID_GET_HID_DESCRIPTOR_TIMEOUT_MS 4000 +#define CY_HID_SET_POWER_TIMEOUT 500 /* maximum number of concurrent tracks */ #define TOUCH_REPORT_SIZE 10 @@ -100,6 +108,14 @@ #define TOUCH_REPORT_USAGE_PG_MIN 0xFF010063 #define TOUCH_COL_USAGE_PG 0x000D0022 +#define SET_CMD_LOW(byte, bits) \ + ((byte) = (((byte) & 0xF0) | ((bits) & 0x0F))) +#define SET_CMD_HIGH(byte, bits)\ + ((byte) = (((byte) & 0x0F) | ((bits) & 0xF0))) +#define SET_CMD_OPCODE(byte, opcode) SET_CMD_LOW(byte, opcode) +#define SET_CMD_REPORT_TYPE(byte, type) SET_CMD_HIGH(byte, ((type) << 4)) +#define SET_CMD_REPORT_ID(byte, id) SET_CMD_LOW(byte, id) + /* System Information interface definitions */ struct cyttsp5_sensing_conf_data_dev { u8 electrodes_x; @@ -179,6 +195,7 @@ struct cyttsp5_hid_desc { struct cyttsp5 { struct device *dev; struct completion cmd_done; + struct completion cmd_command_done; struct cyttsp5_sysinfo sysinfo; struct cyttsp5_hid_desc hid_desc; u8 cmd_buf[CYTTSP5_PREALLOCATED_CMD_BUFFER]; @@ -191,6 +208,7 @@ struct cyttsp5 { struct regmap *regmap; struct touchscreen_properties prop; struct regulator *vdd; + bool is_wakeup_source; }; /* @@ -556,6 +574,84 @@ static int cyttsp5_hid_output_get_sysinfo(struct cyttsp5 *ts) return cyttsp5_get_sysinfo_regs(ts); } +static int cyttsp5_enter_sleep(struct cyttsp5 *ts) +{ + int rc; + u8 cmd[2]; + u16 crc; + + memset(cmd, 0, sizeof(cmd)); + + SET_CMD_REPORT_TYPE(cmd[0], 0); + SET_CMD_REPORT_ID(cmd[0], HID_POWER_SLEEP); + SET_CMD_OPCODE(cmd[1], HID_CMD_SET_POWER); + + rc = cyttsp5_write(ts, HID_COMMAND_REG, cmd, 2); + if (rc) { + dev_err(ts->dev, "Failed to write command %d", rc); + return rc; + } + + rc = wait_for_completion_interruptible_timeout(&ts->cmd_command_done, + msecs_to_jiffies(CY_HID_SET_POWER_TIMEOUT)); + if (rc <= 0) { + dev_err(ts->dev, "HID output cmd execution timed out\n"); + rc = -ETIMEDOUT; + return rc; + } + + /* validate */ + if ((ts->response_buf[2] != HID_RESPONSE_REPORT_ID) + || ((ts->response_buf[3] & 0x3) != HID_POWER_SLEEP) + || ((ts->response_buf[4] & 0xF) != HID_CMD_SET_POWER)) { + rc = -EINVAL; + dev_err(ts->dev, "Validation of the sleep response failed\n"); + return rc; + } + + return 0; + +} + +static int cyttsp5_wakeup(struct cyttsp5 *ts) +{ + int rc; + u8 cmd[2]; + u16 crc; + + memset(cmd, 0, sizeof(cmd)); + + SET_CMD_REPORT_TYPE(cmd[0], 0); + SET_CMD_REPORT_ID(cmd[0], HID_POWER_ON); + SET_CMD_OPCODE(cmd[1], HID_CMD_SET_POWER); + + rc = cyttsp5_write(ts, HID_COMMAND_REG, cmd, 2); + if (rc) { + dev_err(ts->dev, "Failed to write command %d", rc); + return rc; + } + + rc = wait_for_completion_interruptible_timeout(&ts->cmd_command_done, + msecs_to_jiffies(CY_HID_SET_POWER_TIMEOUT)); + if (rc <= 0) { + dev_err(ts->dev, "HID output cmd execution timed out\n"); + rc = -ETIMEDOUT; + return rc; + } + + /* validate */ + if ((ts->response_buf[2] != HID_RESPONSE_REPORT_ID) + || ((ts->response_buf[3] & 0x3) != HID_POWER_ON) + || ((ts->response_buf[4] & 0xF) != HID_CMD_SET_POWER)) { + rc = -EINVAL; + dev_err(ts->dev, "Validation of the sleep response failed\n"); + return rc; + } + + return 0; + +} + static int cyttsp5_hid_output_bl_launch_app(struct cyttsp5 *ts) { int rc; @@ -670,6 +766,10 @@ static irqreturn_t cyttsp5_handle_irq(int irq, void *handle) case HID_BTN_REPORT_ID: cyttsp5_btn_attention(ts->dev); break; + case HID_RESPONSE_REPORT_ID: + memcpy(ts->response_buf, ts->input_buf, size); + complete(&ts->cmd_command_done); + break; default: /* It is not an input but a command response */ memcpy(ts->response_buf, ts->input_buf, size); @@ -784,6 +884,7 @@ static int cyttsp5_probe(struct device *dev, struct regmap *regmap, int irq, dev_set_drvdata(dev, ts); init_completion(&ts->cmd_done); + init_completion(&ts->cmd_command_done); /* Power up the device */ ts->vdd = devm_regulator_get(dev, "vdd"); @@ -830,8 +931,11 @@ static int cyttsp5_probe(struct device *dev, struct regmap *regmap, int irq, return error; } - if (device_property_read_bool(dev, "wakeup-source")) + if (device_property_read_bool(dev, "wakeup-source")) { device_init_wakeup(dev, true); + ts->is_wakeup_source = true; + } else + ts->is_wakeup_source = false; error = cyttsp5_startup(ts); if (error) { @@ -884,6 +988,29 @@ static const struct i2c_device_id cyttsp5_i2c_id[] = { }; MODULE_DEVICE_TABLE(i2c, cyttsp5_i2c_id); +static int __maybe_unused cyttsp5_suspend(struct device *dev) +{ + struct cyttsp5 *ts = dev_get_drvdata(dev); + + if (!ts->is_wakeup_source) + cyttsp5_enter_sleep(ts); + return 0; +} + +static int __maybe_unused cyttsp5_resume(struct device *dev) +{ + struct cyttsp5 *ts = dev_get_drvdata(dev); + struct i2c_client *client = to_i2c_client(dev); + int error; + + if (!ts->is_wakeup_source) + cyttsp5_wakeup(ts); + + return 0; +} + +static SIMPLE_DEV_PM_OPS(cyttsp5_pm, cyttsp5_suspend, cyttsp5_resume); + static struct i2c_driver cyttsp5_i2c_driver = { .driver = { .name = CYTTSP5_NAME, -- 2.39.2 ^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [PATCH 6/6] Input: cyttsp5: implement proper sleep and wakeup procedures 2023-03-23 13:52 ` [PATCH 6/6] Input: cyttsp5: implement proper sleep and wakeup procedures Maximilian Weigand @ 2023-03-27 18:11 ` kernel test robot 0 siblings, 0 replies; 14+ messages in thread From: kernel test robot @ 2023-03-27 18:11 UTC (permalink / raw) To: Maximilian Weigand, Linus Walleij, Dmitry Torokhov, linux-input, linux-kernel, devicetree Cc: llvm, oe-kbuild-all, Maximilian Weigand, Alistair Francis Hi Maximilian, Thank you for the patch! Perhaps something to improve: [auto build test WARNING on dtor-input/next] [also build test WARNING on dtor-input/for-linus linus/master v6.3-rc4 next-20230327] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Maximilian-Weigand/Input-cyttsp5-fix-array-length/20230323-215957 base: https://git.kernel.org/pub/scm/linux/kernel/git/dtor/input.git next patch link: https://lore.kernel.org/r/20230323135205.1160879-7-mweigand%40mweigand.net patch subject: [PATCH 6/6] Input: cyttsp5: implement proper sleep and wakeup procedures config: i386-randconfig-a011-20230327 (https://download.01.org/0day-ci/archive/20230328/202303280119.UlD7s4Rk-lkp@intel.com/config) compiler: clang version 14.0.6 (https://github.com/llvm/llvm-project f28c006a5895fc0e329fe15fead81e37457cb1d1) reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # https://github.com/intel-lab-lkp/linux/commit/9988f8132aa9a4e8c9f0eb3093b06a9f02d90ec9 git remote add linux-review https://github.com/intel-lab-lkp/linux git fetch --no-tags linux-review Maximilian-Weigand/Input-cyttsp5-fix-array-length/20230323-215957 git checkout 9988f8132aa9a4e8c9f0eb3093b06a9f02d90ec9 # save the config file mkdir build_dir && cp config build_dir/.config COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=i386 olddefconfig COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=i386 SHELL=/bin/bash drivers/input/touchscreen/ If you fix the issue, kindly add following tag where applicable | Reported-by: kernel test robot <lkp@intel.com> | Link: https://lore.kernel.org/oe-kbuild-all/202303280119.UlD7s4Rk-lkp@intel.com/ All warnings (new ones prefixed by >>): >> drivers/input/touchscreen/cyttsp5.c:581:6: warning: unused variable 'crc' [-Wunused-variable] u16 crc; ^ drivers/input/touchscreen/cyttsp5.c:620:6: warning: unused variable 'crc' [-Wunused-variable] u16 crc; ^ drivers/input/touchscreen/cyttsp5.c:700:5: warning: unused variable 'cmd' [-Wunused-variable] u8 cmd[2]; ^ >> drivers/input/touchscreen/cyttsp5.c:1004:6: warning: unused variable 'error' [-Wunused-variable] int error; ^ >> drivers/input/touchscreen/cyttsp5.c:1003:21: warning: unused variable 'client' [-Wunused-variable] struct i2c_client *client = to_i2c_client(dev); ^ 5 warnings generated. vim +/crc +581 drivers/input/touchscreen/cyttsp5.c 576 577 static int cyttsp5_enter_sleep(struct cyttsp5 *ts) 578 { 579 int rc; 580 u8 cmd[2]; > 581 u16 crc; 582 583 memset(cmd, 0, sizeof(cmd)); 584 585 SET_CMD_REPORT_TYPE(cmd[0], 0); 586 SET_CMD_REPORT_ID(cmd[0], HID_POWER_SLEEP); 587 SET_CMD_OPCODE(cmd[1], HID_CMD_SET_POWER); 588 589 rc = cyttsp5_write(ts, HID_COMMAND_REG, cmd, 2); 590 if (rc) { 591 dev_err(ts->dev, "Failed to write command %d", rc); 592 return rc; 593 } 594 595 rc = wait_for_completion_interruptible_timeout(&ts->cmd_command_done, 596 msecs_to_jiffies(CY_HID_SET_POWER_TIMEOUT)); 597 if (rc <= 0) { 598 dev_err(ts->dev, "HID output cmd execution timed out\n"); 599 rc = -ETIMEDOUT; 600 return rc; 601 } 602 603 /* validate */ 604 if ((ts->response_buf[2] != HID_RESPONSE_REPORT_ID) 605 || ((ts->response_buf[3] & 0x3) != HID_POWER_SLEEP) 606 || ((ts->response_buf[4] & 0xF) != HID_CMD_SET_POWER)) { 607 rc = -EINVAL; 608 dev_err(ts->dev, "Validation of the sleep response failed\n"); 609 return rc; 610 } 611 612 return 0; 613 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests ^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2023-03-29 8:44 UTC | newest] Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2023-03-23 13:51 [PATCH 0/6] Small fixes to the cyttsp5 touchscreen driver Maximilian Weigand 2023-03-23 13:52 ` [PATCH 1/6] Input: cyttsp5: fix array length Maximilian Weigand 2023-03-23 13:52 ` [PATCH 2/6] Input: cyttsp5: remove unused code Maximilian Weigand 2023-03-23 15:18 ` kernel test robot 2023-03-27 15:17 ` kernel test robot 2023-03-23 13:52 ` [PATCH 3/6] devicetree: input: cypress,tt21000: fix interrupt type in dts example Maximilian Weigand 2023-03-24 9:41 ` Krzysztof Kozlowski 2023-03-29 8:43 ` Linus Walleij 2023-03-23 13:52 ` [PATCH 4/6] Input: cyttsp5: properly initialize the device as a pm wakeup device Maximilian Weigand 2023-03-23 13:52 ` [PATCH 5/6] devicetree: input: cypress,tt21000: add wakeup-source entry to documentation Maximilian Weigand 2023-03-24 9:42 ` Krzysztof Kozlowski 2023-03-29 8:43 ` Linus Walleij 2023-03-23 13:52 ` [PATCH 6/6] Input: cyttsp5: implement proper sleep and wakeup procedures Maximilian Weigand 2023-03-27 18:11 ` kernel test robot
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).