Add alert-slider for OnePlus6
Subsystems (6)
v3 cover Add alert-slider for OnePlus6
V1 -> V2: rebase to qcom/for-next
V2 -> V3: rename tri-state-key to alert-slider, fix DTS warnings, add SND_PROFILE_* identifiers to input-event-codes.h
Gergo Koteles (3):
Input: gpio-keys - add support for linux,input-value DTS property
Input: add ABS_SND_PROFILE
arm64: dts: qcom: sdm845-oneplus: add alert-slider
Documentation/input/event-codes.rst | 6 +++ .../boot/dts/qcom/sdm845-oneplus-common.dtsi | 43 ++++++++++++++++++- drivers/hid/hid-debug.c | 1 + drivers/input/keyboard/gpio_keys.c | 3 ++ include/uapi/linux/input-event-codes.h | 9 ++++ 5 files changed, 60 insertions(+), 2 deletions(-)
base-commit: 02ac8d2a011b630481d959298a1cc76ca0717f3e
Signature · 1 line
2.39.2
PATCH v3 1/3 Input: gpio-keys - add support for linux,input-value DTS property
Allows setting the value of EV_ABS events from DTS.
This property is included in the gpio-keys.yaml scheme, but was only implemented for gpio-keys-polled.
--- drivers/input/keyboard/gpio_keys.c | 3 +++ 1 file changed, 3 insertions(+)
drivers/input/keyboard/gpio_keys.c +3 -0
@@ -770,6 +770,9 @@ gpio_keys_get_devtree_pdata(struct device *dev) &button->type)) button->type =EV_KEY ; +fwnode_property_read_u32 (child,"linux,input-value" , + (u32 *)&button->value); + button->wakeup = fwnode_property_read_bool(child, "wakeup-source") ||/* legacy name */
Signature · 1 line
2.39.2
PATCH v3 2/3 Input: add ABS_SND_PROFILE
In reply to Gergo KotelesABS_SND_PROFILE used to describe the state of a multi-value sound profile switch. This will be used for the alert-slider on OnePlus phones or other phones.
Profile values added as SND_PROFLE_(SILENT|VIBRATE|RING) identifiers to input-event-codes.h so they can be used from DTS.
--- Documentation/input/event-codes.rst | 6 ++++++ drivers/hid/hid-debug.c | 1 + include/uapi/linux/input-event-codes.h | 9 +++++++++ 3 files changed, 16 insertions(+)
Documentation/input/event-codes.rst +6 -0
@@ -241,6 +241,12 @@ A few EV_ABS codes have special meanings: emitted only when the selected profile changes, indicating the newly selected profile value. +* ABS_SND_PROFILE: + + - Used to describe the state of a multi-value sound profile switch. + An event is emitted only when the selected profile changes, + indicating the newly selected profile value. + * ABS_MT_<name>: - Used to describe multitouch input events. Please see
drivers/hid/hid-debug.c +1 -0
@@ -1018,6 +1018,7 @@ static const char *absolutes[ABS_CNT] = { [ABS_DISTANCE] = "Distance", [ABS_TILT_X] = "XTilt", [ABS_TILT_Y] = "YTilt", [ABS_TOOL_WIDTH] = "ToolWidth", [ABS_VOLUME] = "Volume", [ABS_PROFILE] = "Profile", + [ABS_SND_PROFILE] = "SoundProfile", [ABS_MISC] = "Misc", [ABS_MT_TOUCH_MAJOR] = "MTMajor", [ABS_MT_TOUCH_MINOR] = "MTMinor",
include/uapi/linux/input-event-codes.h +9 -0
@@ -866,6 +866,7 @@#define ABS_VOLUME 0x20#define ABS_PROFILE 0x21 +#define ABS_SND_PROFILE 0x22#define ABS_MISC 0x28
@@ -974,4 +975,12 @@#define SND_MAX 0x07#define SND_CNT (SND_MAX+1) +/* +* ABS_SND_PROFILE values +*/ + +#define SND_PROFILE_SILENT 0x00 +#define SND_PROFILE_VIBRATE 0x01 +#define SND_PROFILE_RING 0x02 +#endif
Signature · 1 line
2.39.2
PATCH v3 3/3 arm64: dts: qcom: sdm845-oneplus: add alert-slider
In reply to Gergo KotelesThe alert-slider is a tri-state sound profile switch found on the OnePlus 6, Android maps the states to "silent", "vibrate" and "ring". Expose them as ABS_SND_PROFILE events.
The previous GPIO numbers were wrong. Update them to the correct ones.
--- .../boot/dts/qcom/sdm845-oneplus-common.dtsi | 43 ++++++++++++++++++- 1 file changed, 41 insertions(+), 2 deletions(-)
arch/arm64/boot/dts/qcom/sdm845-oneplus-common.dtsi +41 -2
@@ -52,6 +52,45 @@ key-vol-up { }; }; + alert-slider { + compatible = "gpio-keys"; + label = "Alert slider"; + + pinctrl-0 = <&alert_slider_default>; + pinctrl-names = "default"; + + switch-top { + label = "Silent"; + linux,input-type = <EV_ABS>; + linux,code = <ABS_SND_PROFILE>; + linux,input-value = <SND_PROFILE_SILENT>; + gpios = <&tlmm 126 GPIO_ACTIVE_LOW>; + debounce-interval = <50>; + linux,can-disable; + }; + + switch-middle { + label = "Vibrate"; + linux,input-type = <EV_ABS>; + linux,code = <ABS_SND_PROFILE>; + linux,input-value = <SND_PROFILE_VIBRATE>; + gpios = <&tlmm 52 GPIO_ACTIVE_LOW>; + debounce-interval = <50>; + linux,can-disable; + + }; + + switch-bottom { + label = "Ring"; + linux,input-type = <EV_ABS>; + linux,code = <ABS_SND_PROFILE>; + linux,input-value = <SND_PROFILE_RING>; + 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"
@@ -753,8 +792,8 @@ &usb_1_hsphy { &tlmm { gpio-reserved-ranges = <0 4>, <81 4>; - tri_state_key_default: tri-state-key-default-state { - pins = "gpio40", "gpio42", "gpio26"; + alert_slider_default: alert-slider-default-state { + pins = "gpio126", "gpio52", "gpio24"; function = "gpio"; drive-strength = <2>; bias-disable;
Signature · 1 line
2.39.2
Re: [PATCH v3 3/3] arm64: dts: qcom: sdm845-oneplus: add alert-slider
Quoted 18 lines · Gergo Koteles
The alert-slider is a tri-state sound profile switch found on the OnePlus 6, Android maps the states to "silent", "vibrate" and "ring". Expose them as
ABS_SND_PROFILEevents.
The previous GPIO numbers were wrong. Update them to the correct ones.Co-developed-by Caleb Connolly <[email protected]>Signed-off-by Caleb Connolly <[email protected]>Signed-off-by Gergo Koteles <[email protected]>--- .../boot/dts/qcom/sdm845-oneplus-common.dtsi | 43 ++++++++++++++++++- 1 file changed, 41 insertions(+), 2 deletions(-)arch/arm64/boot/dts/qcom/sdm845-oneplus-common.dtsi +0
-0
arch/arm64/boot/dts/qcom/sdm845-oneplus-common.dtsi key-vol-up { · line 55
Quoted 4 lines
arch/arm64/boot/dts/qcom/sdm845-oneplus-common.dtsi +1
-0@@ -52,6 +52,45 @@ key-vol-up { }; }; + alert-slider {
This is out of order, alphabetically.
arch/arm64/boot/dts/qcom/sdm845-oneplus-common.dtsi key-vol-up { · line 68
Quoted 13 lines
arch/arm64/boot/dts/qcom/sdm845-oneplus-common.dtsi +13
-0+ compatible = "gpio-keys"; + label = "Alert slider"; + + pinctrl-0 = <&alert_slider_default>; + pinctrl-names = "default"; + + switch-top { + label = "Silent"; + linux,input-type = <EV_ABS>; + linux,code = <ABS_SND_PROFILE>; + linux,input-value = <SND_PROFILE_SILENT>; + gpios = <&tlmm 126 GPIO_ACTIVE_LOW>; + debounce-interval = <50>;
Is there a reason it can't be the default 5ms, since it should more or less be a simple input ping to the userspace?
Other than that:
Konrad
Quoted 39 lines
arch/arm64/boot/dts/qcom/sdm845-oneplus-common.dtsi +27
-2+ linux,can-disable; + }; + + switch-middle { + label = "Vibrate"; + linux,input-type = <EV_ABS>; + linux,code = <ABS_SND_PROFILE>; + linux,input-value = <SND_PROFILE_VIBRATE>; + gpios = <&tlmm 52 GPIO_ACTIVE_LOW>; + debounce-interval = <50>; + linux,can-disable; + + }; + + switch-bottom { + label = "Ring"; + linux,input-type = <EV_ABS>; + linux,code = <ABS_SND_PROFILE>; + linux,input-value = <SND_PROFILE_RING>; + 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"@@ -753,8 +792,8 @@ &usb_1_hsphy { &tlmm { gpio-reserved-ranges = <0 4>, <81 4>; - tri_state_key_default: tri-state-key-default-state { - pins = "gpio40", "gpio42", "gpio26"; + alert_slider_default: alert-slider-default-state { + pins = "gpio126", "gpio52", "gpio24"; function = "gpio"; drive-strength = <2>; bias-disable;
Re: [PATCH v3 3/3] arm64: dts: qcom: sdm845-oneplus: add alert-slider
Hi Konrad,
Quoted 27 lines · Konrad Dybcio
Quoted 18 lines · Gergo Koteles
The alert-slider is a tri-state sound profile switch found on the OnePlus 6, Android maps the states to "silent", "vibrate" and "ring". Expose them as
ABS_SND_PROFILEevents.
The previous GPIO numbers were wrong. Update them to the correct ones.Co-developed-by Caleb Connolly <[email protected]>Signed-off-by Caleb Connolly <[email protected]>Signed-off-by Gergo Koteles <[email protected]>--- .../boot/dts/qcom/sdm845-oneplus-common.dtsi | 43 ++++++++++++++++++- 1 file changed, 41 insertions(+), 2 deletions(-)arch/arm64/boot/dts/qcom/sdm845-oneplus-common.dtsi +0
-0arch/arm64/boot/dts/qcom/sdm845-oneplus-common.dtsi key-vol-up { · line 55
Quoted 4 lines
arch/arm64/boot/dts/qcom/sdm845-oneplus-common.dtsi +1
-0@@ -52,6 +52,45 @@ key-vol-up { }; }; + alert-slider {This is out of order, alphabetically.
Quoted 16 lines
arch/arm64/boot/dts/qcom/sdm845-oneplus-common.dtsi key-vol-up { · line 68
Quoted 13 lines
arch/arm64/boot/dts/qcom/sdm845-oneplus-common.dtsi +13
-0+ compatible = "gpio-keys"; + label = "Alert slider"; + + pinctrl-0 = <&alert_slider_default>; + pinctrl-names = "default"; + + switch-top { + label = "Silent"; + linux,input-type = <EV_ABS>; + linux,code = <ABS_SND_PROFILE>; + linux,input-value = <SND_PROFILE_SILENT>; + gpios = <&tlmm 126 GPIO_ACTIVE_LOW>; + debounce-interval = <50>;Is there a reason it can't be the default 5ms, since it should more or less be a simple input ping to the userspace?
Yes, it's a simple input ping to the userspace.
It works with the default 5ms also.
Thanks,
Gergo
Quoted 44 lines
Other than that:
Reviewed-by Konrad Dybcio <[email protected]>Konrad
Quoted 39 lines
arch/arm64/boot/dts/qcom/sdm845-oneplus-common.dtsi +27
-2+ linux,can-disable; + }; + + switch-middle { + label = "Vibrate"; + linux,input-type = <EV_ABS>; + linux,code = <ABS_SND_PROFILE>; + linux,input-value = <SND_PROFILE_VIBRATE>; + gpios = <&tlmm 52 GPIO_ACTIVE_LOW>; + debounce-interval = <50>; + linux,can-disable; + + }; + + switch-bottom { + label = "Ring"; + linux,input-type = <EV_ABS>; + linux,code = <ABS_SND_PROFILE>; + linux,input-value = <SND_PROFILE_RING>; + 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"@@ -753,8 +792,8 @@ &usb_1_hsphy { &tlmm { gpio-reserved-ranges = <0 4>, <81 4>; - tri_state_key_default: tri-state-key-default-state { - pins = "gpio40", "gpio42", "gpio26"; + alert_slider_default: alert-slider-default-state { + pins = "gpio126", "gpio52", "gpio24"; function = "gpio"; drive-strength = <2>; bias-disable;