The tri-state-key is a sound profile switch found on the OnePlus 6, Android maps the states to "mute", "vibrate" and "ring". Expose them as ABS_SND_PROFILE events. The previous GPIO numbers were wrong. Update them to the correct ones. Co-developed-by: Caleb Connolly <caleb@xxxxxxxxxxxxx> Signed-off-by: Caleb Connolly <caleb@xxxxxxxxxxxxx> Signed-off-by: Gergo Koteles <soyer@xxxxxx> --- .../boot/dts/qcom/sdm845-oneplus-common.dtsi | 39 ++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/arch/arm64/boot/dts/qcom/sdm845-oneplus-common.dtsi b/arch/arm64/boot/dts/qcom/sdm845-oneplus-common.dtsi index 64638ea94db7..e45d4fdead82 100644 --- a/arch/arm64/boot/dts/qcom/sdm845-oneplus-common.dtsi +++ b/arch/arm64/boot/dts/qcom/sdm845-oneplus-common.dtsi @@ -52,6 +52,43 @@ key-vol-up { }; }; + tri-state-key { + compatible = "gpio-keys"; + label = "Tri-state key"; + pinctrl-names = "default"; + pinctrl-0 = <&tri_state_key_default>; + state-top { + label = "Tri-state key top"; + linux,input-type = <EV_ABS>; + linux,code = <ABS_SND_PROFILE>; + linux,input-value = <0>; + gpios = <&tlmm 126 GPIO_ACTIVE_LOW>; + debounce-interval = <50>; + linux,can-disable; + }; + + state-middle { + label = "Tri-state key middle"; + linux,input-type = <EV_ABS>; + linux,code = <ABS_SND_PROFILE>; + linux,input-value = <1>; + gpios = <&tlmm 52 GPIO_ACTIVE_LOW>; + debounce-interval = <50>; + linux,can-disable; + + }; + + state-bottom { + label = "Tri-state key bottom"; + linux,input-type = <EV_ABS>; + linux,code = <ABS_SND_PROFILE>; + linux,input-value = <2>; + gpios = <&tlmm 24 GPIO_ACTIVE_LOW>; + debounce-interval = <50>; + linux,can-disable; + }; + }; + reserved-memory { /* * The rmtfs_mem needs to be guarded due to "XPU limitations" @@ -754,7 +791,7 @@ &tlmm { gpio-reserved-ranges = <0 4>, <81 4>; tri_state_key_default: tri-state-key-default-state { - pins = "gpio40", "gpio42", "gpio26"; + pins = "gpio126", "gpio52", "gpio24"; function = "gpio"; drive-strength = <2>; bias-disable; -- 2.39.1