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, the patch updates them to the correct
ones.
Co-developed-by: Caleb Connolly <caleb@connolly.tech>
Signed-off-by: Caleb Connolly <caleb@connolly.tech>
Signed-off-by: Gergo Koteles <soyer@irl.hu>
---
.../boot/dts/qcom/sdm845-oneplus-common.dtsi | 43 ++++++++++++++++++-
1 file changed, 41 insertions(+), 2 deletions(-)
diff --git a/arch/arm64/boot/dts/qcom/sdm845-oneplus-common.dtsi b/arch/arm64/boot/dts/qcom/sdm845-oneplus-common.dtsi
index 42cf4dd5ea28..33215ad17513 100644
--- a/arch/arm64/boot/dts/qcom/sdm845-oneplus-common.dtsi
+++ b/arch/arm64/boot/dts/qcom/sdm845-oneplus-common.dtsi
@@ -49,6 +49,44 @@ 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"
@@ -588,9 +626,10 @@ &usb_1_hsphy {
&tlmm {
gpio-reserved-ranges = <0 4>, <81 4>;
- tri_state_key_default: tri_state_key_default {
+ // The GPIOs have a hardware pullup.
+ tri_state_key_default: tri-state-pins {
mux {
- pins = "gpio40", "gpio42", "gpio26";
+ pins = "gpio126", "gpio52", "gpio24";
function = "gpio";
drive-strength = <2>;
bias-disable;
--
2.39.0
On 19/01/2023 00:46, Gergo Koteles wrote: > 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, the patch updates them to the correct > ones. > > Co-developed-by: Caleb Connolly <caleb@connolly.tech> > Signed-off-by: Caleb Connolly <caleb@connolly.tech> > Signed-off-by: Gergo Koteles <soyer@irl.hu> > --- > .../boot/dts/qcom/sdm845-oneplus-common.dtsi | 43 ++++++++++++++++++- > 1 file changed, 41 insertions(+), 2 deletions(-) > > diff --git a/arch/arm64/boot/dts/qcom/sdm845-oneplus-common.dtsi b/arch/arm64/boot/dts/qcom/sdm845-oneplus-common.dtsi > index 42cf4dd5ea28..33215ad17513 100644 > --- a/arch/arm64/boot/dts/qcom/sdm845-oneplus-common.dtsi > +++ b/arch/arm64/boot/dts/qcom/sdm845-oneplus-common.dtsi > @@ -49,6 +49,44 @@ key-vol-up { > }; > }; > > + tri-state-key { > + compatible = "gpio-keys"; > + label = "Tri-state key"; > + > + pinctrl-names = "default"; > + pinctrl-0 = <&tri_state_key_default>; > + > + state-top { Does not look like you tested the DTS against bindings. Please run `make dtbs_check` (see Documentation/devicetree/bindings/writing-schema.rst for instructions). > + 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" > @@ -588,9 +626,10 @@ &usb_1_hsphy { > &tlmm { > gpio-reserved-ranges = <0 4>, <81 4>; > > - tri_state_key_default: tri_state_key_default { > + // The GPIOs have a hardware pullup. > + tri_state_key_default: tri-state-pins { > mux { You need to rebase. Best regards, Krzysztof
© 2016 - 2025 Red Hat, Inc.