2023-04-25 21:01:12

by Jonathan Singer

[permalink] [raw]
Subject: [PATCH 1/2] platform/x86: hp-wmi: Add camera toggle switch to HP WMI

Previously, when the camera toggle switch was hit, the hp-wmi driver
would report an invalid event code. By adding a case for that in the
event handling switch statement we can eliminate that error code and
enable a framework for potential further kernel handling of that key.
This change was tested on my HP Envy x360 15-ey0023dx laptop, but it
would likely work for any HP laptop with a camera toggle button.

Signed-off-by: Jonathan Singer <[email protected]>
---
drivers/platform/x86/hp/hp-wmi.c | 3 +++
1 file changed, 3 insertions(+)

diff --git a/drivers/platform/x86/hp/hp-wmi.c b/drivers/platform/x86/hp/hp-wmi.c
index 873f59c3e280..b27362209b04 100644
--- a/drivers/platform/x86/hp/hp-wmi.c
+++ b/drivers/platform/x86/hp/hp-wmi.c
@@ -90,6 +90,7 @@ enum hp_wmi_event_ids {
HPWMI_PEAKSHIFT_PERIOD = 0x0F,
HPWMI_BATTERY_CHARGE_PERIOD = 0x10,
HPWMI_SANITIZATION_MODE = 0x17,
+ HPWMI_CAMERA_TOGGLE = 0x1A,
HPWMI_OMEN_KEY = 0x1D,
HPWMI_SMART_EXPERIENCE_APP = 0x21,
};
@@ -866,6 +867,8 @@ static void hp_wmi_notify(u32 value, void *context)
break;
case HPWMI_SANITIZATION_MODE:
break;
+ case HPWMI_CAMERA_TOGGLE:
+ break;
case HPWMI_SMART_EXPERIENCE_APP:
break;
default:
--
2.40.0


2023-04-25 21:02:07

by Mario Limonciello

[permalink] [raw]
Subject: RE: [PATCH 1/2] platform/x86: hp-wmi: Add camera toggle switch to HP WMI

[Public]



> -----Original Message-----
> From: Jonathan Singer <[email protected]>
> Sent: Tuesday, April 25, 2023 15:47
> To: [email protected]
> Cc: Jonathan Singer <[email protected]>; Hans de Goede
> <[email protected]>; Mark Gross <[email protected]>; Jorge
> Lopez <[email protected]>; Kai-Heng Feng
> <[email protected]>; Rishit Bansal <[email protected]>;
> Limonciello, Mario <[email protected]>; Barnab?s P?cze
> <[email protected]>; [email protected]
> Subject: [PATCH 1/2] platform/x86: hp-wmi: Add camera toggle switch to HP
> WMI
>
> Previously, when the camera toggle switch was hit, the hp-wmi driver
> would report an invalid event code. By adding a case for that in the
> event handling switch statement we can eliminate that error code and
> enable a framework for potential further kernel handling of that key.
> This change was tested on my HP Envy x360 15-ey0023dx laptop, but it
> would likely work for any HP laptop with a camera toggle button.
>

Any idea what does the key actually do on Windows? Is it just for software
to show a message? Or some software respond to it?

The reason I'm asking is I wonder if you want this to be emitting KEY_CAMERA
instead perhaps.

Then desktop environments that support it can respond to KEY_CAMERA.

> Signed-off-by: Jonathan Singer <[email protected]>
> ---
> drivers/platform/x86/hp/hp-wmi.c | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/drivers/platform/x86/hp/hp-wmi.c
> b/drivers/platform/x86/hp/hp-wmi.c
> index 873f59c3e280..b27362209b04 100644
> --- a/drivers/platform/x86/hp/hp-wmi.c
> +++ b/drivers/platform/x86/hp/hp-wmi.c
> @@ -90,6 +90,7 @@ enum hp_wmi_event_ids {
> HPWMI_PEAKSHIFT_PERIOD = 0x0F,
> HPWMI_BATTERY_CHARGE_PERIOD = 0x10,
> HPWMI_SANITIZATION_MODE = 0x17,
> + HPWMI_CAMERA_TOGGLE = 0x1A,
> HPWMI_OMEN_KEY = 0x1D,
> HPWMI_SMART_EXPERIENCE_APP = 0x21,
> };
> @@ -866,6 +867,8 @@ static void hp_wmi_notify(u32 value, void *context)
> break;
> case HPWMI_SANITIZATION_MODE:
> break;
> + case HPWMI_CAMERA_TOGGLE:
> + break;
> case HPWMI_SMART_EXPERIENCE_APP:
> break;
> default:
> --
> 2.40.0

2023-04-25 22:12:18

by Jonathan Singer

[permalink] [raw]
Subject: Re: Function of the camera key on windows

The key itself triggers a hardware response both on windows and linux.
It disconnects power from the camera USB module and raises a cover in front
of the camera aperature. The keycode is as far as I know only to notify the
operating system in case it wanted to show a message.

Is that the kind of use case that would benefit from emitting a KEY_CAMERA?

2023-04-25 22:37:32

by Mario Limonciello

[permalink] [raw]
Subject: RE: Function of the camera key on windows

[Public]

> The key itself triggers a hardware response both on windows and linux.
> It disconnects power from the camera USB module and raises a cover in front
> of the camera aperature. The keycode is as far as I know only to notify the
> operating system in case it wanted to show a message.
>
> Is that the kind of use case that would benefit from emitting a KEY_CAMERA?

In my opinion it is something that for example GNOME could pick up and display
an image with a camera with a line through it. If it comes again it could toggle.

This is pretty similar to how mic mute works for example. The way you describe it
I think of it as "Camera mute".

2023-04-26 09:13:07

by Hans de Goede

[permalink] [raw]
Subject: Re: Function of the camera key on windows

Hi,

On 4/25/23 23:09, Jonathan Singer wrote:
> The key itself triggers a hardware response both on windows and linux.
> It disconnects power from the camera USB module and raises a cover in front
> of the camera aperature. The keycode is as far as I know only to notify the
> operating system in case it wanted to show a message.
>
> Is that the kind of use case that would benefit from emitting a KEY_CAMERA?

Actually we have SW_CAMERA_LENS_COVER for this and this is what
new Dell laptops with a similar feature use.

The problem with using a SW for this though is that we should then either:

a) Figure out a way to identify models which will report this; or
b) register a separate input_dev just for reporting the SW
on the first event.

This is necessary because unlike keys where only press + release
events really matter and if those never happens no harm is done,
switches can be acted upon by userspace in both there open and closed
state, so the mere presence of an input_device with a SW_CAMERA_LENS_COVER
may be acted upon by userspace. E.g. if we by default report
SW_CAMERA_LENS_COVER=1 (so lenscover closed) then apps who want to access
the camera may ask the user something like: "Your camera is currently
unavailable, please press the keyboard combination to enable your camera"
which makes no sense to ask on devices without such feature.

Note that simply registering a separate input_dev for just reporting
SW_CAMERA_LENS_COVER on the first event is a good workaround for
this though. We already do the same in other drivers for SW_TABLET_MODE
for similar reasons.

A second problem is that we would need to be able to tell if we
get the 0x1A event because of the camera being enabled or disabled,
but perhaps this info is already present in the event_data ?

Regards,

Hans