Message ID | 20240129-x13s-touchscreen-v3-2-c4a933034145@quicinc.com (mailing list archive) |
---|---|
State | Superseded |
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 >
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"; 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>; }; };