All of lore.kernel.org
 help / color / mirror / Atom feed
From: Elia Devito <eliadevito@gmail.com>
To: "Barnabás Pőcze" <pobrn@protonmail.com>
Cc: Alex Hung <alex.hung@canonical.com>,
	Hans de Goede <hdegoede@redhat.com>,
	Mark Gross <mgross@linux.intel.com>,
	"platform-driver-x86@vger.kernel.org" 
	<platform-driver-x86@vger.kernel.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v2 2/2] intel-hid: add alternative method to enable switches
Date: Fri, 04 Dec 2020 16:22:18 +0100	[thread overview]
Message-ID: <2204197.ElGaqSPkdT@pce> (raw)
In-Reply-To: <u_tIRoW7nG4DQc7H_wcr9yn8oIc5rO9SsWKfOoJz4c9KKDJtUsYore_4tyNYxn3r0OpEOI5rsyrE__1Y2hbIc8lnS5cJKeeFmqyPdRjDVyU=@protonmail.com>

Hi Barnabás

In data venerdì 4 dicembre 2020 00:45:10 CET, Barnabás Pőcze ha scritto:
> Hi
> 
> 2020. december 3., csütörtök 22:21 keltezéssel, Elia Devito írta:
> > [...]
> > diff --git a/drivers/platform/x86/intel-hid.c
> > b/drivers/platform/x86/intel-hid.c index 86261970bd8f..fed24d4f28b8
> > 100644
> > --- a/drivers/platform/x86/intel-hid.c
> > +++ b/drivers/platform/x86/intel-hid.c
> > @@ -15,6 +15,9 @@
> > 
> >  #include <linux/platform_device.h>
> >  #include <linux/suspend.h>
> > 
> > +/* When NOT in tablet mode, VGBS returns with the flag 0x40 */
> > +#define TABLET_MODE_FLAG 0x40
> 
> I think `BIT(6)` would be better (linux/bits.h).
> 
Okay,  I will change it

> > +
> > 
> >  MODULE_LICENSE("GPL");
> >  MODULE_AUTHOR("Alex Hung");
> > 
> > @@ -89,9 +92,26 @@ static const struct dmi_system_id button_array_table[]
> > = {> 
> >  	{ }
> >  
> >  };
> > 
> > [...]
> > +static void detect_tablet_mode(struct platform_device *device)
> 
> I believe `report_tablet_mode_state()` or something similar would be a more
> apt name.
Sound good,  I will rename it.

> > +{
> > +	struct intel_hid_priv *priv = dev_get_drvdata(&device->dev);
> > +	acpi_handle handle = ACPI_HANDLE(&device->dev);
> > +	unsigned long long vgbs;
> > +	int m;
> > +
> > +	if (!intel_hid_evaluate_method(handle, INTEL_HID_DSM_VGBS_FN, 
&vgbs))
> > +		return;
> > +
> > +	m = !(vgbs & TABLET_MODE_FLAG);
> > +	input_report_switch(priv->switches, SW_TABLET_MODE, m);
> > +	input_sync(priv->switches);
> > +}
> > +
> > 
> >  static void notify_handler(acpi_handle handle, u32 event, void *context)
> >  {
> >  
> >  	struct platform_device *device = context;
> > 
> > @@ -363,6 +415,13 @@ static void notify_handler(acpi_handle handle, u32
> > event, void *context)> 
> >  		if (event == 0xce)
> >  		
> >  			goto wakeup;
> > 
> > +		/*
> > +		 * Switch events will wake the device and report the 
new switch
> > +		 * position to the input subsystem.
> > +		 */
> > +		if (priv->switches && (event == 0xcc || event == 0xcd))
> > +			goto wakeup;
> > +
> > 
> >  		/* Wake up on 5-button array events only. */
> >  		if (event == 0xc0 || !priv->array)
> >  		
> >  			return;
> > 
> > @@ -374,6 +433,21 @@ static void notify_handler(acpi_handle handle, u32
> > event, void *context)> 
> >  wakeup:
> >  		pm_wakeup_hard_event(&device->dev);
> > 
> > +
> > +		if (priv->switches) {
> > +			if (event == 0xcc) {
> > +				input_report_switch(priv-
>switches, SW_TABLET_MODE, 1);
> > +				input_sync(priv->switches);
> > +				return;
> > +			}
> > +
> > +			if (event == 0xcd) {
> > +				input_report_switch(priv-
>switches, SW_TABLET_MODE, 0);
> > +				input_sync(priv->switches);
> > +				return;
> > +			}
> > +		}
> > +
> > 
> >  		return;
> >  	
> >  	}
> > 
> > @@ -398,6 +472,20 @@ static void notify_handler(acpi_handle handle, u32
> > event, void *context)> 
> >  		}
> >  	
> >  	}
> > 
> > +	if (priv->switches) {
> > +		if (event == 0xcc) {
> > +			input_report_switch(priv->switches, 
SW_TABLET_MODE, 1);
> > +			input_sync(priv->switches);
> > +			return;
> > +		}
> > +
> > +		if (event == 0xcd) {
> > +			input_report_switch(priv->switches, 
SW_TABLET_MODE, 0);
> > +			input_sync(priv->switches);
> > +			return;
> > +		}
> > +	}
> 
> Wouldn't be better to create a new function `bool
> report_tablet_mode_event()` which would basically contain the above `if` or
> better, a `switch`, and then you could use it here and in the wake-up path
> like the following:
> 
> ```
> if (report_tablet_mode_event(priv->switches, event))
>   return;
> ```
> (or similarly)
> 
Looks more clean, I will do.

> > +
> > 
> >  	/* 0xC0 is for HID events, other values are for 5 button array */
> >  	if (event != 0xc0) {
> >  	
> >  		if (!priv->array ||
> > 
> > @@ -485,6 +573,16 @@ static int intel_hid_probe(struct platform_device
> > *device)> 
> >  			pr_err("Failed to setup Intel 5 button array 
hotkeys\n");
> >  	
> >  	}
> > 
> > +	/* Setup switches for devices that we know VGBS return correctly 
*/
> > +	if (dmi_check_system(dmi_vgbs_allow_list)) {
> > +		dev_info(&device->dev, "platform supports switches\n");
> > +		err = intel_hid_switches_setup(device);
> > +		if (err)
> > +			pr_err("Failed to setup Intel HID 
switches\n");
> > +		else
> > +			detect_tablet_mode(device);
> > +	}
> > +
> > 
> >  	status = acpi_install_notify_handler(handle,
> >  	
> >  					     
ACPI_DEVICE_NOTIFY,
> >  					     notify_handler,
> > 
> > --
> > 2.28.0
> 
> Regards,
> Barnabás Pőcze

Thank you for the review

Regards
Elia




      parent reply	other threads:[~2020-12-04 15:23 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-12-01 19:55 [PATCH 1/3] intel-hid: add support for SW_TABLET_MODE Elia Devito
2020-12-01 21:23 ` Hans de Goede
2020-12-03 21:20   ` [PATCH v2 1/2] " Elia Devito
2020-12-04 16:01     ` [PATCH v3 " Elia Devito
2020-12-07 16:49       ` Hans de Goede
2020-12-04 16:02     ` [PATCH v3 2/2] intel-hid: add alternative method to enable switches Elia Devito
2020-12-03 21:21   ` [PATCH v2 " Elia Devito
2020-12-03 23:45     ` Barnabás Pőcze
2020-12-03 23:52       ` Barnabás Pőcze
2020-12-04 15:22       ` Elia Devito [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=2204197.ElGaqSPkdT@pce \
    --to=eliadevito@gmail.com \
    --cc=alex.hung@canonical.com \
    --cc=hdegoede@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mgross@linux.intel.com \
    --cc=platform-driver-x86@vger.kernel.org \
    --cc=pobrn@protonmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.