pinctrl: qcom: x1e80100: Bypass PDC wakeup parent for now
authorStephan Gerhold <stephan.gerhold@linaro.org>
Fri, 30 Aug 2024 09:09:07 +0000 (11:09 +0200)
committerLinus Walleij <linus.walleij@linaro.org>
Mon, 2 Sep 2024 09:07:48 +0000 (11:07 +0200)
On X1E80100, GPIO interrupts for wakeup-capable pins have been broken since
the introduction of the pinctrl driver. This prevents keyboard and touchpad
from working on most of the X1E laptops. So far we have worked around this
by manually building a kernel with the "wakeup-parent" removed from the
pinctrl node in the device tree, but we cannot expect all users to do that.

Implement a similar workaround in the driver by clearing the wakeirq_map
for X1E80100. This avoids using the PDC wakeup parent for all GPIOs
and handles the interrupts directly in the pinctrl driver instead.

The PDC driver needs additional changes to support X1E80100 properly.
Adding a workaround separately first allows to land the necessary PDC
changes through the normal release cycle, while still solving the more
critical problem with keyboard and touchpad on the current stable kernel
versions. Bypassing the PDC is enough for now, because we have not yet
enabled the deep idle states where using the PDC becomes necessary.

Cc: stable@vger.kernel.org
Fixes: 05e4941d97ef ("pinctrl: qcom: Add X1E80100 pinctrl driver")
Signed-off-by: Stephan Gerhold <stephan.gerhold@linaro.org>
Reviewed-by: Johan Hovold <johan+linaro@kernel.org>
Tested-by: Johan Hovold <johan+linaro@kernel.org>
Reviewed-by: Konrad Dybcio <konradybcio@kernel.org>
Reviewed-by: Abel Vesa <abel.vesa@linaro.org>
Link: https://lore.kernel.org/20240830-x1e80100-bypass-pdc-v1-1-d4c00be0c3e3@linaro.org
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
drivers/pinctrl/qcom/pinctrl-x1e80100.c

index 65ed933f05ce1790f8a55a40ed57a68fc76f78cb..abfcdd3da9e823a182fc946d19039ad36103da96 100644 (file)
@@ -1839,7 +1839,9 @@ static const struct msm_pinctrl_soc_data x1e80100_pinctrl = {
        .ngroups = ARRAY_SIZE(x1e80100_groups),
        .ngpios = 239,
        .wakeirq_map = x1e80100_pdc_map,
-       .nwakeirq_map = ARRAY_SIZE(x1e80100_pdc_map),
+       /* TODO: Enabling PDC currently breaks GPIO interrupts */
+       .nwakeirq_map = 0,
+       /* .nwakeirq_map = ARRAY_SIZE(x1e80100_pdc_map), */
        .egpio_func = 9,
 };