Message ID | 20240129-x13s-touchscreen-v3-0-c4a933034145@quicinc.com |
---|---|
Headers | show |
Series | arm64: dts: qcom: sc8280xp-x13s: Enable touchscreen | expand |
On Mon, Jan 29, 2024 at 08:47:48AM -0800, Bjorn Andersson wrote: > The touchscreen present on some SKUs of Lenovo Thinkpad X13s is never > detected by Linux. Power is applied and the device is brought out of > reset using the pinconfig in DeviceTree, but the read-test in > __i2c_hid_core_probe() fails to access the device, which result in probe > being aborted. > > Some users have reported success after rebinding the device. > > Looking to the ACPI tables, there's a 5ms after-power and a 200ms > after-reset delay. The power-supply is shared with other components, so > this is active all the way through boot. The reset GPIO, on the other > hand, is low (reset asserted) at boot, so this is first deasserted by > the implicit application of the pinconf state. > > This means the time between reset deassert and __i2c_hid_core_probe() is > significantly below the value documented in the ACPI tables. > > As the I2C HID binding and driver support specifying a reset gpio, > replace the pinconf-based scheme to pull the device out of reset. Then > specify the after-reset time. > > The shared power rail is currently always on, but in case this ever > change, the after-power delay is added as well, to not violate the > power-on to reset-deassert timing requirement. > > Fixes: 32c231385ed4 ("arm64: dts: qcom: sc8280xp: add Lenovo Thinkpad X13s devicetree") > Tested-by: Daniel Thompson <daniel.thompson@linaro.org> For the sake of completeness (and to make sure I don't forget if anyone asks me in the future) I also (successfully) tested with the output high removed from the touchscreen pinctrl. Daniel. PS Strictly speaking I tested v2 and am replying to v3... but the DT should be the same for both versions ;-).
On Mon, Jan 29, 2024 at 08:47:48AM -0800, Bjorn Andersson wrote: > The touchscreen present on some SKUs of Lenovo Thinkpad X13s is never > detected by Linux. Power is applied and the device is brought out of > reset using the pinconfig in DeviceTree, but the read-test in > __i2c_hid_core_probe() fails to access the device, which result in probe > being aborted. > > Some users have reported success after rebinding the device. > > Looking to the ACPI tables, there's a 5ms after-power and a 200ms > after-reset delay. The power-supply is shared with other components, so > this is active all the way through boot. The reset GPIO, on the other > hand, is low (reset asserted) at boot, so this is first deasserted by > the implicit application of the pinconf state. > > This means the time between reset deassert and __i2c_hid_core_probe() is > significantly below the value documented in the ACPI tables. > > As the I2C HID binding and driver support specifying a reset gpio, > replace the pinconf-based scheme to pull the device out of reset. Then > specify the after-reset time. > > The shared power rail is currently always on, but in case this ever > change, the after-power delay is added as well, to not violate the > power-on to reset-deassert timing requirement. > > Fixes: 32c231385ed4 ("arm64: dts: qcom: sc8280xp: add Lenovo Thinkpad X13s devicetree") > Tested-by: Daniel Thompson <daniel.thompson@linaro.org> > Signed-off-by: Bjorn Andersson <quic_bjorande@quicinc.com> Thanks for the update. Reviewed-by: Johan Hovold <johan+linaro@kernel.org>
On Mon, Jan 29, 2024 at 08:47:48AM -0800, Bjorn Andersson wrote: > The touchscreen present on some SKUs of Lenovo Thinkpad X13s is never > detected by Linux. Power is applied and the device is brought out of > reset using the pinconfig in DeviceTree, but the read-test in > __i2c_hid_core_probe() fails to access the device, which result in probe > being aborted. > > Some users have reported success after rebinding the device. > > Looking to the ACPI tables, there's a 5ms after-power and a 200ms > after-reset delay. The power-supply is shared with other components, so > this is active all the way through boot. The reset GPIO, on the other > hand, is low (reset asserted) at boot, so this is first deasserted by > the implicit application of the pinconf state. > > This means the time between reset deassert and __i2c_hid_core_probe() is > significantly below the value documented in the ACPI tables. > > As the I2C HID binding and driver support specifying a reset gpio, > replace the pinconf-based scheme to pull the device out of reset. Then > specify the after-reset time. > > The shared power rail is currently always on, but in case this ever > change, the after-power delay is added as well, to not violate the > power-on to reset-deassert timing requirement. > > Fixes: 32c231385ed4 ("arm64: dts: qcom: sc8280xp: add Lenovo Thinkpad X13s devicetree") > Tested-by: Daniel Thompson <daniel.thompson@linaro.org> > Signed-off-by: Bjorn Andersson <quic_bjorande@quicinc.com> > --- > arch/arm64/boot/dts/qcom/sc8280xp-lenovo-thinkpad-x13s.dts | 7 +++++-- > 1 file changed, 5 insertions(+), 2 deletions(-) > > diff --git a/arch/arm64/boot/dts/qcom/sc8280xp-lenovo-thinkpad-x13s.dts b/arch/arm64/boot/dts/qcom/sc8280xp-lenovo-thinkpad-x13s.dts > index def3976bd5bb..33731b95ad51 100644 > --- a/arch/arm64/boot/dts/qcom/sc8280xp-lenovo-thinkpad-x13s.dts > +++ b/arch/arm64/boot/dts/qcom/sc8280xp-lenovo-thinkpad-x13s.dts > @@ -620,7 +620,6 @@ &i2c4 { > > status = "okay"; > > - /* FIXME: verify */ > touchscreen@10 { > compatible = "hid-over-i2c"; Please add a real device compatible before you need the next power sequencing property I'll reject. > reg = <0x10>; > @@ -630,6 +629,11 @@ touchscreen@10 { > vdd-supply = <&vreg_misc_3p3>; > vddl-supply = <&vreg_s10b>; > > + reset-gpios = <&tlmm 99 GPIO_ACTIVE_LOW>; > + > + post-power-on-delay-ms = <5>; > + post-reset-deassert-delay-ms = <200>; > + > pinctrl-names = "default"; > pinctrl-0 = <&ts0_default>; > }; > @@ -1450,7 +1454,6 @@ int-n-pins { > reset-n-pins { > pins = "gpio99"; > function = "gpio"; > - output-high; > drive-strength = <16>; > }; > }; > > -- > 2.25.1 >
This documents and defines the necessary properties for the I2C HID-based touchscreen found in some SKUs of the Lenovo Thinkpad X13s to work. Signed-off-by: Bjorn Andersson <quic_bjorande@quicinc.com> --- Changes in v3: - Rewrote the commit message, to properly describe the problem being resolved. - Link to v2: https://lore.kernel.org/r/20240126-x13s-touchscreen-v2-0-5374ccc9e10d@quicinc.com Changes in v2: - Dropped output-high from &ts0_default, to avoid bouncing the reset line unnecessarily - Link to v1: https://lore.kernel.org/r/20240125-x13s-touchscreen-v1-0-ab8c882def9c@quicinc.com --- Bjorn Andersson (2): dt-bindings: HID: i2c-hid: Document reset-related properties arm64: dts: qcom: sc8280xp-x13s: Fix/enable touchscreen Documentation/devicetree/bindings/input/hid-over-i2c.yaml | 6 ++++++ arch/arm64/boot/dts/qcom/sc8280xp-lenovo-thinkpad-x13s.dts | 7 +++++-- 2 files changed, 11 insertions(+), 2 deletions(-) --- base-commit: 8bf1262c53f50fa91fe15d01e5ef5629db55313c change-id: 20240125-x13s-touchscreen-48012ff3c24e Best regards,