Re: [PATCH 1/2] platform/x86: dell-privacy: Fix SW_CAMERA_LENS_COVER reporting

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

On 12/21/22 23:07, Hans de Goede wrote:
> Use KE_VSW instead of KE_SW for the SW_CAMERA_LENS_COVER key_entry
> and get the value of the switch from the status field when handling
> SW_CAMERA_LENS_COVER events, instead of always reporting 0.
> 
> Also correctly set the initial SW_CAMERA_LENS_COVER value.
> 
> Fixes: 8af9fa37b8a3 ("platform/x86: dell-privacy: Add support for Dell hardware privacy")
> Signed-off-by: Hans de Goede <hdegoede@xxxxxxxxxx>

I've added this series to my review-hans (soon to be fixes) branch now.

Regards,

Hans

> ---
>  drivers/platform/x86/dell/dell-wmi-privacy.c | 22 ++++++++++++++------
>  1 file changed, 16 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/platform/x86/dell/dell-wmi-privacy.c b/drivers/platform/x86/dell/dell-wmi-privacy.c
> index c82b3d6867c5..915d5deeb971 100644
> --- a/drivers/platform/x86/dell/dell-wmi-privacy.c
> +++ b/drivers/platform/x86/dell/dell-wmi-privacy.c
> @@ -61,7 +61,7 @@ static const struct key_entry dell_wmi_keymap_type_0012[] = {
>  	/* privacy mic mute */
>  	{ KE_KEY, 0x0001, { KEY_MICMUTE } },
>  	/* privacy camera mute */
> -	{ KE_SW,  0x0002, { SW_CAMERA_LENS_COVER } },
> +	{ KE_VSW, 0x0002, { SW_CAMERA_LENS_COVER } },
>  	{ KE_END, 0},
>  };
>  
> @@ -115,11 +115,15 @@ bool dell_privacy_process_event(int type, int code, int status)
>  
>  	switch (code) {
>  	case DELL_PRIVACY_AUDIO_EVENT: /* Mic mute */
> -	case DELL_PRIVACY_CAMERA_EVENT: /* Camera mute */
>  		priv->last_status = status;
>  		sparse_keymap_report_entry(priv->input_dev, key, 1, true);
>  		ret = true;
>  		break;
> +	case DELL_PRIVACY_CAMERA_EVENT: /* Camera mute */
> +		priv->last_status = status;
> +		sparse_keymap_report_entry(priv->input_dev, key, !(status & CAMERA_STATUS), false);
> +		ret = true;
> +		break;
>  	default:
>  		dev_dbg(&priv->wdev->dev, "unknown event type 0x%04x 0x%04x\n", type, code);
>  	}
> @@ -304,6 +308,11 @@ static int dell_privacy_wmi_probe(struct wmi_device *wdev, const void *context)
>  
>  	dev_set_drvdata(&wdev->dev, priv);
>  	priv->wdev = wdev;
> +
> +	ret = get_current_status(priv->wdev);
> +	if (ret)
> +		return ret;
> +
>  	/* create evdev passing interface */
>  	priv->input_dev = devm_input_allocate_device(&wdev->dev);
>  	if (!priv->input_dev)
> @@ -331,11 +340,12 @@ static int dell_privacy_wmi_probe(struct wmi_device *wdev, const void *context)
>  	priv->input_dev->name = "Dell Privacy Driver";
>  	priv->input_dev->id.bustype = BUS_HOST;
>  
> -	ret = input_register_device(priv->input_dev);
> -	if (ret)
> -		return ret;
> +	/* Report initial camera-cover status */
> +	if (priv->features_present & BIT(DELL_PRIVACY_TYPE_CAMERA))
> +		input_report_switch(priv->input_dev, SW_CAMERA_LENS_COVER,
> +				    !(priv->last_status & CAMERA_STATUS));
>  
> -	ret = get_current_status(priv->wdev);
> +	ret = input_register_device(priv->input_dev);
>  	if (ret)
>  		return ret;
>  




[Index of Archives]     [Linux Kernel Development]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux