diff mbox series

Input: cros_ec_keyb: Add support for a front proximity switch

Message ID 20201205004709.3126266-1-swboyd@chromium.org (mailing list archive)
State New, archived
Headers show
Series Input: cros_ec_keyb: Add support for a front proximity switch | expand

Commit Message

Stephen Boyd Dec. 5, 2020, 12:47 a.m. UTC
Some cros ECs support a front proximity MKBP event via
'EC_MKBP_FRONT_PROXIMITY'. Map this to the 'SW_FRONT_PROXIMITY' input
event code so it can be reported up to userspace.

Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Cc: Benson Leung <bleung@chromium.org>
Cc: Guenter Roeck <groeck@chromium.org>
Signed-off-by: Stephen Boyd <swboyd@chromium.org>
---
 drivers/input/keyboard/cros_ec_keyb.c          | 5 +++++
 include/linux/platform_data/cros_ec_commands.h | 1 +
 2 files changed, 6 insertions(+)


base-commit: b65054597872ce3aefbc6a666385eabdf9e288da

Comments

Doug Anderson Jan. 7, 2021, 1:16 a.m. UTC | #1
Hi,

On Fri, Dec 4, 2020 at 4:48 PM Stephen Boyd <swboyd@chromium.org> wrote:
>
> Some cros ECs support a front proximity MKBP event via
> 'EC_MKBP_FRONT_PROXIMITY'. Map this to the 'SW_FRONT_PROXIMITY' input
> event code so it can be reported up to userspace.
>
> Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>
> Cc: Benson Leung <bleung@chromium.org>
> Cc: Guenter Roeck <groeck@chromium.org>
> Signed-off-by: Stephen Boyd <swboyd@chromium.org>
> ---
>  drivers/input/keyboard/cros_ec_keyb.c          | 5 +++++
>  include/linux/platform_data/cros_ec_commands.h | 1 +
>  2 files changed, 6 insertions(+)

This seems really straightforward.

Reviewed-by: Douglas Anderson <dianders@chromium.org>

Given that it touches a header file owned by the Chrome OS maintainers
and a driver owned by input, how should it land?  One maintainer Acks
and the other lands?

-Doug
Dmitry Torokhov Jan. 7, 2021, 2:21 a.m. UTC | #2
Hi Doug, Stephen,

On Wed, Jan 06, 2021 at 05:16:10PM -0800, Doug Anderson wrote:
> Hi,
> 
> On Fri, Dec 4, 2020 at 4:48 PM Stephen Boyd <swboyd@chromium.org> wrote:
> >
> > Some cros ECs support a front proximity MKBP event via
> > 'EC_MKBP_FRONT_PROXIMITY'. Map this to the 'SW_FRONT_PROXIMITY' input
> > event code so it can be reported up to userspace.
> >
> > Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>
> > Cc: Benson Leung <bleung@chromium.org>
> > Cc: Guenter Roeck <groeck@chromium.org>
> > Signed-off-by: Stephen Boyd <swboyd@chromium.org>
> > ---
> >  drivers/input/keyboard/cros_ec_keyb.c          | 5 +++++
> >  include/linux/platform_data/cros_ec_commands.h | 1 +
> >  2 files changed, 6 insertions(+)
> 
> This seems really straightforward.
> 
> Reviewed-by: Douglas Anderson <dianders@chromium.org>
> 
> Given that it touches a header file owned by the Chrome OS maintainers
> and a driver owned by input, how should it land?  One maintainer Acks
> and the other lands?

Sorry about missing this one, however the "front proximity" switch has
been introduced for the benefit of phone devices, to be emitted when a
device is raised to user's ear, and I do not think we should be using
this here.

We have just recently had similar discussion with regard to palm- and
lap-mode sensors and whether they should be reported over input or IIO
as true proximity sensors:

https://lore.kernel.org/linux-iio/9f9b0ff6-3bf1-63c4-eb36-901cecd7c4d9@redhat.com/

Based on what we are doing for other Chrome OS devices that expose
proximity sensors (for example trogdor) we have decided that we all
should be using IIO as it will allow not only on/off, but true proximity
reporting with potential of implementing smarter policies by userspace.

Because of that we should do the same here and export this as IIO
proximity sensor as well.

Thanks.
Doug Anderson Jan. 7, 2021, 2:57 p.m. UTC | #3
Hi,

On Wed, Jan 6, 2021 at 6:22 PM Dmitry Torokhov
<dmitry.torokhov@gmail.com> wrote:
>
> Hi Doug, Stephen,
>
> On Wed, Jan 06, 2021 at 05:16:10PM -0800, Doug Anderson wrote:
> > Hi,
> >
> > On Fri, Dec 4, 2020 at 4:48 PM Stephen Boyd <swboyd@chromium.org> wrote:
> > >
> > > Some cros ECs support a front proximity MKBP event via
> > > 'EC_MKBP_FRONT_PROXIMITY'. Map this to the 'SW_FRONT_PROXIMITY' input
> > > event code so it can be reported up to userspace.
> > >
> > > Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>
> > > Cc: Benson Leung <bleung@chromium.org>
> > > Cc: Guenter Roeck <groeck@chromium.org>
> > > Signed-off-by: Stephen Boyd <swboyd@chromium.org>
> > > ---
> > >  drivers/input/keyboard/cros_ec_keyb.c          | 5 +++++
> > >  include/linux/platform_data/cros_ec_commands.h | 1 +
> > >  2 files changed, 6 insertions(+)
> >
> > This seems really straightforward.
> >
> > Reviewed-by: Douglas Anderson <dianders@chromium.org>
> >
> > Given that it touches a header file owned by the Chrome OS maintainers
> > and a driver owned by input, how should it land?  One maintainer Acks
> > and the other lands?
>
> Sorry about missing this one, however the "front proximity" switch has
> been introduced for the benefit of phone devices, to be emitted when a
> device is raised to user's ear, and I do not think we should be using
> this here.
>
> We have just recently had similar discussion with regard to palm- and
> lap-mode sensors and whether they should be reported over input or IIO
> as true proximity sensors:
>
> https://lore.kernel.org/linux-iio/9f9b0ff6-3bf1-63c4-eb36-901cecd7c4d9@redhat.com/
>
> Based on what we are doing for other Chrome OS devices that expose
> proximity sensors (for example trogdor) we have decided that we all
> should be using IIO as it will allow not only on/off, but true proximity
> reporting with potential of implementing smarter policies by userspace.
>
> Because of that we should do the same here and export this as IIO
> proximity sensor as well.

For devices with a true proximity sensor that's exactly what we're
doing.  I've only been involved in the periphery of the discussion,
but as I understand it there are some models of laptop for which we
don't have a true proximity sensor.  On these devices, the EC is in
charge of deciding about proximity based on a number of factors.
Unfortunately, it's not a public bug, but since you're at Google I
think you can look at b/168714440 to find the relevant discussion.
These are the models that Stephen is trying to add support for here...

-Doug
Dmitry Torokhov Jan. 7, 2021, 7:46 p.m. UTC | #4
On Thu, Jan 07, 2021 at 06:57:10AM -0800, Doug Anderson wrote:
> Hi,
> 
> On Wed, Jan 6, 2021 at 6:22 PM Dmitry Torokhov
> <dmitry.torokhov@gmail.com> wrote:
> >
> > Hi Doug, Stephen,
> >
> > On Wed, Jan 06, 2021 at 05:16:10PM -0800, Doug Anderson wrote:
> > > Hi,
> > >
> > > On Fri, Dec 4, 2020 at 4:48 PM Stephen Boyd <swboyd@chromium.org> wrote:
> > > >
> > > > Some cros ECs support a front proximity MKBP event via
> > > > 'EC_MKBP_FRONT_PROXIMITY'. Map this to the 'SW_FRONT_PROXIMITY' input
> > > > event code so it can be reported up to userspace.
> > > >
> > > > Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>
> > > > Cc: Benson Leung <bleung@chromium.org>
> > > > Cc: Guenter Roeck <groeck@chromium.org>
> > > > Signed-off-by: Stephen Boyd <swboyd@chromium.org>
> > > > ---
> > > >  drivers/input/keyboard/cros_ec_keyb.c          | 5 +++++
> > > >  include/linux/platform_data/cros_ec_commands.h | 1 +
> > > >  2 files changed, 6 insertions(+)
> > >
> > > This seems really straightforward.
> > >
> > > Reviewed-by: Douglas Anderson <dianders@chromium.org>
> > >
> > > Given that it touches a header file owned by the Chrome OS maintainers
> > > and a driver owned by input, how should it land?  One maintainer Acks
> > > and the other lands?
> >
> > Sorry about missing this one, however the "front proximity" switch has
> > been introduced for the benefit of phone devices, to be emitted when a
> > device is raised to user's ear, and I do not think we should be using
> > this here.
> >
> > We have just recently had similar discussion with regard to palm- and
> > lap-mode sensors and whether they should be reported over input or IIO
> > as true proximity sensors:
> >
> > https://lore.kernel.org/linux-iio/9f9b0ff6-3bf1-63c4-eb36-901cecd7c4d9@redhat.com/
> >
> > Based on what we are doing for other Chrome OS devices that expose
> > proximity sensors (for example trogdor) we have decided that we all
> > should be using IIO as it will allow not only on/off, but true proximity
> > reporting with potential of implementing smarter policies by userspace.
> >
> > Because of that we should do the same here and export this as IIO
> > proximity sensor as well.
> 
> For devices with a true proximity sensor that's exactly what we're
> doing.  I've only been involved in the periphery of the discussion,
> but as I understand it there are some models of laptop for which we
> don't have a true proximity sensor.  On these devices, the EC is in
> charge of deciding about proximity based on a number of factors.

Yes, I understand that on some devices the proximity sensors are not
true sensors but rather on/off signals, potentially derived from a
multitude of sources. However there is still a benefit in exposing them
as IIO proximity devices with limited reporting representing
[near, infinity] range/values. This will mean that userspace needs to
monitor only one set of devices (IIO) instead of both IIO and input, and
will not require constantly expanding EV_SW set to account for
ever-growing number of proximity sensors (lap, palm, general presence,
etc).

Thanks.
Stephen Boyd Jan. 15, 2021, 10:43 p.m. UTC | #5
Quoting Guenter Roeck (2021-01-06 18:30:20)
> On Wed, Jan 6, 2021 at 5:16 PM Doug Anderson <dianders@chromium.org> wrote:
> 
>     Hi,
> 
>     On Fri, Dec 4, 2020 at 4:48 PM Stephen Boyd <swboyd@chromium.org> wrote:
>     >
>     > Some cros ECs support a front proximity MKBP event via
>     > 'EC_MKBP_FRONT_PROXIMITY'. Map this to the 'SW_FRONT_PROXIMITY' input
>     > event code so it can be reported up to userspace.
>     >
>     > Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>
>     > Cc: Benson Leung <bleung@chromium.org>
>     > Cc: Guenter Roeck <groeck@chromium.org>
>     > Signed-off-by: Stephen Boyd <swboyd@chromium.org>
>     > ---
>     >  drivers/input/keyboard/cros_ec_keyb.c          | 5 +++++
>     >  include/linux/platform_data/cros_ec_commands.h | 1 +
> 
> 
> For a year or two people kept changes to cros_ec_commands.h separate from
> functional changes. Unfortunately, we are now reverting to the old
> "change cros_ec_commands.h together with some functional change" approach which
> caused an endless amount of trouble and pain for Chrome OS rebases a couple of
> years ago.
> 
> I won't NACK this patch, but it is close.

I'm fine to split it into two, or keep it together. Just let me know
what is preferred. Thanks!
Stephen Boyd Jan. 15, 2021, 10:45 p.m. UTC | #6
Quoting Dmitry Torokhov (2021-01-07 11:46:48)
> 
> Yes, I understand that on some devices the proximity sensors are not
> true sensors but rather on/off signals, potentially derived from a
> multitude of sources. However there is still a benefit in exposing them
> as IIO proximity devices with limited reporting representing
> [near, infinity] range/values. This will mean that userspace needs to
> monitor only one set of devices (IIO) instead of both IIO and input, and
> will not require constantly expanding EV_SW set to account for
> ever-growing number of proximity sensors (lap, palm, general presence,
> etc).

Ok, no problem. I think I'll have to spin up a small driver to handle
this as an IIO proximity device and then register the IIO child device
from the cros ec driver. Let me see how that goes.
Pavel Machek Feb. 2, 2021, 1:43 p.m. UTC | #7
Hi!

> > > > Reviewed-by: Douglas Anderson <dianders@chromium.org>
> > > >
> > > > Given that it touches a header file owned by the Chrome OS maintainers
> > > > and a driver owned by input, how should it land?  One maintainer Acks
> > > > and the other lands?
> > >
> > > Sorry about missing this one, however the "front proximity" switch has
> > > been introduced for the benefit of phone devices, to be emitted when a
> > > device is raised to user's ear, and I do not think we should be using
> > > this here.
> > >
> > > We have just recently had similar discussion with regard to palm- and
> > > lap-mode sensors and whether they should be reported over input or IIO
> > > as true proximity sensors:
> > >
> > > https://lore.kernel.org/linux-iio/9f9b0ff6-3bf1-63c4-eb36-901cecd7c4d9@redhat.com/
> > >
> > > Based on what we are doing for other Chrome OS devices that expose
> > > proximity sensors (for example trogdor) we have decided that we all
> > > should be using IIO as it will allow not only on/off, but true proximity
> > > reporting with potential of implementing smarter policies by userspace.
> > >
> > > Because of that we should do the same here and export this as IIO
> > > proximity sensor as well.
> > 
> > For devices with a true proximity sensor that's exactly what we're
> > doing.  I've only been involved in the periphery of the discussion,
> > but as I understand it there are some models of laptop for which we
> > don't have a true proximity sensor.  On these devices, the EC is in
> > charge of deciding about proximity based on a number of factors.
> 
> Yes, I understand that on some devices the proximity sensors are not
> true sensors but rather on/off signals, potentially derived from a
> multitude of sources. However there is still a benefit in exposing them
> as IIO proximity devices with limited reporting representing
> [near, infinity] range/values. This will mean that userspace needs to
> monitor only one set of devices (IIO) instead of both IIO and input, and
> will not require constantly expanding EV_SW set to account for
> ever-growing number of proximity sensors (lap, palm, general presence,
> etc).

While I believe one set of devices is good goal, I don't think IIO is
good solution here. It is being used for user input after
all... Routing on/off values to IIO is strange.

Best regards,
									Pavel
diff mbox series

Patch

diff --git a/drivers/input/keyboard/cros_ec_keyb.c b/drivers/input/keyboard/cros_ec_keyb.c
index 15d17c717081..9d05e9192a10 100644
--- a/drivers/input/keyboard/cros_ec_keyb.c
+++ b/drivers/input/keyboard/cros_ec_keyb.c
@@ -107,6 +107,11 @@  static const struct cros_ec_bs_map cros_ec_keyb_bs[] = {
 		.code		= SW_TABLET_MODE,
 		.bit		= EC_MKBP_TABLET_MODE,
 	},
+	{
+		.ev_type	= EV_SW,
+		.code		= SW_FRONT_PROXIMITY,
+		.bit		= EC_MKBP_FRONT_PROXIMITY,
+	},
 };
 
 /*
diff --git a/include/linux/platform_data/cros_ec_commands.h b/include/linux/platform_data/cros_ec_commands.h
index a3a9a878415f..d9dc5e30e59e 100644
--- a/include/linux/platform_data/cros_ec_commands.h
+++ b/include/linux/platform_data/cros_ec_commands.h
@@ -3455,6 +3455,7 @@  struct ec_response_get_next_event_v1 {
 #define EC_MKBP_LID_OPEN	0
 #define EC_MKBP_TABLET_MODE	1
 #define EC_MKBP_BASE_ATTACHED	2
+#define EC_MKBP_FRONT_PROXIMITY	3
 
 /* Run keyboard factory test scanning */
 #define EC_CMD_KEYBOARD_FACTORY_TEST 0x0068