LKML Archive mirror
 help / color / mirror / Atom feed
* [PATCH v1 1/1] Input: gpio-keys - expose wakeup keys in sysfs
       [not found] <cover.1715255980.git.agx@sigxcpu.org>
@ 2024-05-09 12:00 ` Guido Günther
  2024-05-13 12:35   ` Geert Uytterhoeven
  2024-05-13 22:13   ` Dmitry Torokhov
  0 siblings, 2 replies; 4+ messages in thread
From: Guido Günther @ 2024-05-09 12:00 UTC (permalink / raw
  To: Dmitry Torokhov, Geert Uytterhoeven, Hermes Zhang, Tony Lindgren,
	linux-input, linux-kernel, phone-devel

This helps user space to figure out which keys should be used to unidle a
device. E.g on phones the volume rocker should usually not unblank the
screen.

Signed-off-by: Guido Günther <agx@sigxcpu.org>
---
 drivers/input/keyboard/gpio_keys.c | 23 ++++++++++++++++-------
 1 file changed, 16 insertions(+), 7 deletions(-)

diff --git a/drivers/input/keyboard/gpio_keys.c b/drivers/input/keyboard/gpio_keys.c
index 9f3bcd41cf67..84f43d1d4375 100644
--- a/drivers/input/keyboard/gpio_keys.c
+++ b/drivers/input/keyboard/gpio_keys.c
@@ -198,7 +198,8 @@ static void gpio_keys_enable_button(struct gpio_button_data *bdata)
  */
 static ssize_t gpio_keys_attr_show_helper(struct gpio_keys_drvdata *ddata,
 					  char *buf, unsigned int type,
-					  bool only_disabled)
+					  bool only_disabled,
+					  bool only_wakeup)
 {
 	int n_events = get_n_events_by_type(type);
 	unsigned long *bits;
@@ -218,6 +219,9 @@ static ssize_t gpio_keys_attr_show_helper(struct gpio_keys_drvdata *ddata,
 		if (only_disabled && !bdata->disabled)
 			continue;
 
+		if (only_wakeup && !bdata->button->wakeup)
+			continue;
+
 		__set_bit(*bdata->code, bits);
 	}
 
@@ -297,7 +301,7 @@ static ssize_t gpio_keys_attr_store_helper(struct gpio_keys_drvdata *ddata,
 	return error;
 }
 
-#define ATTR_SHOW_FN(name, type, only_disabled)				\
+#define ATTR_SHOW_FN(name, type, only_disabled, only_wakeup)		\
 static ssize_t gpio_keys_show_##name(struct device *dev,		\
 				     struct device_attribute *attr,	\
 				     char *buf)				\
@@ -306,22 +310,26 @@ static ssize_t gpio_keys_show_##name(struct device *dev,		\
 	struct gpio_keys_drvdata *ddata = platform_get_drvdata(pdev);	\
 									\
 	return gpio_keys_attr_show_helper(ddata, buf,			\
-					  type, only_disabled);		\
+					  type, only_disabled,		\
+					  only_wakeup);			\
 }
 
-ATTR_SHOW_FN(keys, EV_KEY, false);
-ATTR_SHOW_FN(switches, EV_SW, false);
-ATTR_SHOW_FN(disabled_keys, EV_KEY, true);
-ATTR_SHOW_FN(disabled_switches, EV_SW, true);
+ATTR_SHOW_FN(keys, EV_KEY, false, false);
+ATTR_SHOW_FN(switches, EV_SW, false, false);
+ATTR_SHOW_FN(disabled_keys, EV_KEY, true, false);
+ATTR_SHOW_FN(disabled_switches, EV_SW, true, false);
+ATTR_SHOW_FN(wakeup_keys, EV_KEY, false, true);
 
 /*
  * ATTRIBUTES:
  *
  * /sys/devices/platform/gpio-keys/keys [ro]
  * /sys/devices/platform/gpio-keys/switches [ro]
+ * /sys/devices/platform/gpio-keys/wakeup_keys [ro]
  */
 static DEVICE_ATTR(keys, S_IRUGO, gpio_keys_show_keys, NULL);
 static DEVICE_ATTR(switches, S_IRUGO, gpio_keys_show_switches, NULL);
+static DEVICE_ATTR(wakeup_keys, S_IRUGO, gpio_keys_show_wakeup_keys, NULL);
 
 #define ATTR_STORE_FN(name, type)					\
 static ssize_t gpio_keys_store_##name(struct device *dev,		\
@@ -361,6 +369,7 @@ static struct attribute *gpio_keys_attrs[] = {
 	&dev_attr_switches.attr,
 	&dev_attr_disabled_keys.attr,
 	&dev_attr_disabled_switches.attr,
+	&dev_attr_wakeup_keys.attr,
 	NULL,
 };
 ATTRIBUTE_GROUPS(gpio_keys);
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH v1 1/1] Input: gpio-keys - expose wakeup keys in sysfs
  2024-05-09 12:00 ` [PATCH v1 1/1] Input: gpio-keys - expose wakeup keys in sysfs Guido Günther
@ 2024-05-13 12:35   ` Geert Uytterhoeven
  2024-05-13 22:13   ` Dmitry Torokhov
  1 sibling, 0 replies; 4+ messages in thread
From: Geert Uytterhoeven @ 2024-05-13 12:35 UTC (permalink / raw
  To: Guido Günther
  Cc: Dmitry Torokhov, Hermes Zhang, Tony Lindgren, linux-input,
	linux-kernel, phone-devel

Hi Guido,

On Thu, May 9, 2024 at 2:00 PM Guido Günther <agx@sigxcpu.org> wrote:
> This helps user space to figure out which keys should be used to unidle a
> device. E.g on phones the volume rocker should usually not unblank the
> screen.
>
> Signed-off-by: Guido Günther <agx@sigxcpu.org>

Thanks for your patch!
This is indeed a useful feature.

Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Tested-by: Geert Uytterhoeven <geert+renesas@glider.be>

Gr{oetje,eeting}s,

                        Geert

-- 
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH v1 1/1] Input: gpio-keys - expose wakeup keys in sysfs
  2024-05-09 12:00 ` [PATCH v1 1/1] Input: gpio-keys - expose wakeup keys in sysfs Guido Günther
  2024-05-13 12:35   ` Geert Uytterhoeven
@ 2024-05-13 22:13   ` Dmitry Torokhov
  2024-05-14 16:05     ` Guido Günther
  1 sibling, 1 reply; 4+ messages in thread
From: Dmitry Torokhov @ 2024-05-13 22:13 UTC (permalink / raw
  To: Guido Günther
  Cc: Geert Uytterhoeven, Hermes Zhang, Tony Lindgren, linux-input,
	linux-kernel, phone-devel

Hi Guido,

On Thu, May 09, 2024 at 02:00:28PM +0200, Guido Günther wrote:
> This helps user space to figure out which keys should be used to unidle a
> device. E.g on phones the volume rocker should usually not unblank the
> screen.

How exactly this is supposed to be used? We have "disabled" keys and
switches attribute because this function can be controlled at runtime
from userspace while wakeup control is a static device setting.

Kernel also does not really know if the screen should be unblanked or
not, if a button or switch is configured for wake up the kernel will go
through wakeup process all the same and then userspace can decide if it
should stay woken up or not.

Thanks.

-- 
Dmitry

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH v1 1/1] Input: gpio-keys - expose wakeup keys in sysfs
  2024-05-13 22:13   ` Dmitry Torokhov
@ 2024-05-14 16:05     ` Guido Günther
  0 siblings, 0 replies; 4+ messages in thread
From: Guido Günther @ 2024-05-14 16:05 UTC (permalink / raw
  To: Dmitry Torokhov
  Cc: Geert Uytterhoeven, Hermes Zhang, Tony Lindgren, linux-input,
	linux-kernel, phone-devel

Hi,
On Mon, May 13, 2024 at 03:13:53PM -0700, Dmitry Torokhov wrote:
> Hi Guido,
> 
> On Thu, May 09, 2024 at 02:00:28PM +0200, Guido Günther wrote:
> > This helps user space to figure out which keys should be used to unidle a
> > device. E.g on phones the volume rocker should usually not unblank the
> > screen.
> 
> How exactly this is supposed to be used? We have "disabled" keys and
> switches attribute because this function can be controlled at runtime
> from userspace while wakeup control is a static device setting.

Current Linux userspace usually unblanks/unidles a device on every
keypress. That is usually not the expected result on phones where often
only the power button and e.g. some home buttons should do this.

These keys usually match the keys that are used as wakeup sources to
bring a device out of suspend. So if we export the wakeup keys to
userspace we can pick some sensible defaults (overridable via hwdb¹).

> Kernel also does not really know if the screen should be unblanked or
> not, if a button or switch is configured for wake up the kernel will go
> through wakeup process all the same and then userspace can decide if it
> should stay woken up or not.

Yes, we merely want that as a hint to figure out sensible defaults in
userspace (which might be a subset of the wakeup keys).

Cherrs,
 -- Guido

¹) See https://gitlab.gnome.org/World/Phosh/gmobile/-/blob/main/data/61-gmobile-wakeup.hwdb?ref_type=heads#L57-L59

> 
> Thanks.
> 
> -- 
> Dmitry
> 

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2024-05-14 16:05 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <cover.1715255980.git.agx@sigxcpu.org>
2024-05-09 12:00 ` [PATCH v1 1/1] Input: gpio-keys - expose wakeup keys in sysfs Guido Günther
2024-05-13 12:35   ` Geert Uytterhoeven
2024-05-13 22:13   ` Dmitry Torokhov
2024-05-14 16:05     ` Guido Günther

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).