* [PATCH 0/3] Add support for X1 Yoga (2016) Tablet Mode + refactors
@ 2016-10-31 22:55 Lyude
2016-10-31 22:55 ` Lyude
` (3 more replies)
0 siblings, 4 replies; 25+ messages in thread
From: Lyude @ 2016-10-31 22:55 UTC (permalink / raw)
To: ibm-acpi-devel
Cc: Lyude, Daniel Martin, Henrique de Moraes Holschuh, Darren Hart,
platform-driver-x86, linux-kernel
Updated patchset for adding support for detecting tablet mode on the X1 Yoga
2016 model, along with some refactoring suggested by Daniel.
Important: I realized I never actually tried testing this on any of the older
Thinkpad tablets. If someone has one who is willing to test let me know,
otherwise I'll test it out when I get to the office on Thursday.
Signed-off-by: Lyude <lyude@redhat.com>
Cc: Daniel Martin <consume.noise@gmail.com>
Lyude (3):
thinkpad_acpi: Move tablet detection into separate function
thinkpad_acpi: Don't repeat ourselves in hotkey_init_tablet_mode()
thinkpad_acpi: Add support for X1 Yoga (2016) Tablet Mode
drivers/platform/x86/thinkpad_acpi.c | 88 ++++++++++++++++++++++++++++++------
1 file changed, 73 insertions(+), 15 deletions(-)
--
2.7.4
^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH 1/3] thinkpad_acpi: Move tablet detection into separate function
@ 2016-10-31 22:55 ` Lyude
0 siblings, 0 replies; 25+ messages in thread
From: Lyude @ 2016-10-31 22:55 UTC (permalink / raw)
To: ibm-acpi-devel
Cc: Lyude, Daniel Martin, Henrique de Moraes Holschuh, Darren Hart,
platform-driver-x86, linux-kernel
Suggested by Daniel Martin <consume.noise@gmail.com>
Lenovo's having a bit of fun randomly changing what hotkey events and
acpi handles they use for reporting tablet mode, so unfortunately this
means we're definitely going to need to probe for multiple types of
tablet mode support. Since the hotkey_init() is already a lot larger
then it should be, let's split up this detection into it's own function
to make things a little easier to read.
As well, since we're going to have multiple types of tablet modes, make
hotkey_tablet into an enum so we can also use it to indicate the type of
tablet mode reporting the machine supports.
Signed-off-by: Lyude <lyude@redhat.com>
Cc: Daniel Martin <consume.noise@gmail.com>
---
drivers/platform/x86/thinkpad_acpi.c | 50 +++++++++++++++++++++++++++---------
1 file changed, 38 insertions(+), 12 deletions(-)
diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c
index b65ce75..369b483 100644
--- a/drivers/platform/x86/thinkpad_acpi.c
+++ b/drivers/platform/x86/thinkpad_acpi.c
@@ -302,7 +302,10 @@ static struct {
u32 hotkey:1;
u32 hotkey_mask:1;
u32 hotkey_wlsw:1;
- u32 hotkey_tablet:1;
+ enum {
+ TP_HOTKEY_TABLET_NONE = 0,
+ TP_HOTKEY_TABLET_USES_MHKG = 1,
+ } hotkey_tablet;
u32 kbdlight:1;
u32 light:1;
u32 light_status:1;
@@ -3117,6 +3120,34 @@ static const struct tpacpi_quirk tpacpi_hotkey_qtable[] __initconst = {
typedef u16 tpacpi_keymap_entry_t;
typedef tpacpi_keymap_entry_t tpacpi_keymap_t[TPACPI_HOTKEY_MAP_LEN];
+static int
+hotkey_init_tablet_mode(void)
+{
+ int res;
+ char *type;
+ bool in_tablet_mode;
+
+ /* For X41t, X60t, X61t Tablets... */
+ if (acpi_evalf(hkey_handle, &res, "MHKG", "qd")) {
+ tp_features.hotkey_tablet = TP_HOTKEY_TABLET_USES_MHKG;
+ in_tablet_mode = !!(res & TP_HOTKEY_TABLET_MASK);
+ type = "MHKG";
+ }
+
+ if (!tp_features.hotkey_tablet)
+ return 0;
+
+ pr_info("Tablet mode switch found (type: %s), currently in %s mode\n",
+ type, in_tablet_mode ? "tablet" : "laptop");
+
+ res = add_to_attr_set(hotkey_dev_attributes,
+ &dev_attr_hotkey_tablet_mode.attr);
+ if (res)
+ return -1;
+
+ return in_tablet_mode;
+}
+
static int __init hotkey_init(struct ibm_init_struct *iibm)
{
/* Requirements for changing the default keymaps:
@@ -3464,17 +3495,6 @@ static int __init hotkey_init(struct ibm_init_struct *iibm)
res = add_to_attr_set(hotkey_dev_attributes,
&dev_attr_hotkey_radio_sw.attr);
- /* For X41t, X60t, X61t Tablets... */
- if (!res && acpi_evalf(hkey_handle, &status, "MHKG", "qd")) {
- tp_features.hotkey_tablet = 1;
- tabletsw_state = !!(status & TP_HOTKEY_TABLET_MASK);
- pr_info("possible tablet mode switch found; "
- "ThinkPad in %s mode\n",
- (tabletsw_state) ? "tablet" : "laptop");
- res = add_to_attr_set(hotkey_dev_attributes,
- &dev_attr_hotkey_tablet_mode.attr);
- }
-
if (!res)
res = register_attr_set_with_sysfs(
hotkey_dev_attributes,
@@ -3482,6 +3502,12 @@ static int __init hotkey_init(struct ibm_init_struct *iibm)
if (res)
goto err_exit;
+ res = hotkey_init_tablet_mode();
+ if (res < 0)
+ goto err_exit;
+
+ tabletsw_state = res;
+
/* Set up key map */
hotkey_keycode_map = kmalloc(TPACPI_HOTKEY_MAP_SIZE,
GFP_KERNEL);
--
2.7.4
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH 1/3] thinkpad_acpi: Move tablet detection into separate function
@ 2016-10-31 22:55 ` Lyude
0 siblings, 0 replies; 25+ messages in thread
From: Lyude @ 2016-10-31 22:55 UTC (permalink / raw)
To: ibm-acpi-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f
Cc: Daniel Martin, Lyude, Henrique de Moraes Holschuh,
linux-kernel-u79uwXL29TY76Z2rM5mHXA,
platform-driver-x86-u79uwXL29TY76Z2rM5mHXA, Darren Hart
Suggested by Daniel Martin <consume.noise-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Lenovo's having a bit of fun randomly changing what hotkey events and
acpi handles they use for reporting tablet mode, so unfortunately this
means we're definitely going to need to probe for multiple types of
tablet mode support. Since the hotkey_init() is already a lot larger
then it should be, let's split up this detection into it's own function
to make things a little easier to read.
As well, since we're going to have multiple types of tablet modes, make
hotkey_tablet into an enum so we can also use it to indicate the type of
tablet mode reporting the machine supports.
Signed-off-by: Lyude <lyude-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
Cc: Daniel Martin <consume.noise-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
---
drivers/platform/x86/thinkpad_acpi.c | 50 +++++++++++++++++++++++++++---------
1 file changed, 38 insertions(+), 12 deletions(-)
diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c
index b65ce75..369b483 100644
--- a/drivers/platform/x86/thinkpad_acpi.c
+++ b/drivers/platform/x86/thinkpad_acpi.c
@@ -302,7 +302,10 @@ static struct {
u32 hotkey:1;
u32 hotkey_mask:1;
u32 hotkey_wlsw:1;
- u32 hotkey_tablet:1;
+ enum {
+ TP_HOTKEY_TABLET_NONE = 0,
+ TP_HOTKEY_TABLET_USES_MHKG = 1,
+ } hotkey_tablet;
u32 kbdlight:1;
u32 light:1;
u32 light_status:1;
@@ -3117,6 +3120,34 @@ static const struct tpacpi_quirk tpacpi_hotkey_qtable[] __initconst = {
typedef u16 tpacpi_keymap_entry_t;
typedef tpacpi_keymap_entry_t tpacpi_keymap_t[TPACPI_HOTKEY_MAP_LEN];
+static int
+hotkey_init_tablet_mode(void)
+{
+ int res;
+ char *type;
+ bool in_tablet_mode;
+
+ /* For X41t, X60t, X61t Tablets... */
+ if (acpi_evalf(hkey_handle, &res, "MHKG", "qd")) {
+ tp_features.hotkey_tablet = TP_HOTKEY_TABLET_USES_MHKG;
+ in_tablet_mode = !!(res & TP_HOTKEY_TABLET_MASK);
+ type = "MHKG";
+ }
+
+ if (!tp_features.hotkey_tablet)
+ return 0;
+
+ pr_info("Tablet mode switch found (type: %s), currently in %s mode\n",
+ type, in_tablet_mode ? "tablet" : "laptop");
+
+ res = add_to_attr_set(hotkey_dev_attributes,
+ &dev_attr_hotkey_tablet_mode.attr);
+ if (res)
+ return -1;
+
+ return in_tablet_mode;
+}
+
static int __init hotkey_init(struct ibm_init_struct *iibm)
{
/* Requirements for changing the default keymaps:
@@ -3464,17 +3495,6 @@ static int __init hotkey_init(struct ibm_init_struct *iibm)
res = add_to_attr_set(hotkey_dev_attributes,
&dev_attr_hotkey_radio_sw.attr);
- /* For X41t, X60t, X61t Tablets... */
- if (!res && acpi_evalf(hkey_handle, &status, "MHKG", "qd")) {
- tp_features.hotkey_tablet = 1;
- tabletsw_state = !!(status & TP_HOTKEY_TABLET_MASK);
- pr_info("possible tablet mode switch found; "
- "ThinkPad in %s mode\n",
- (tabletsw_state) ? "tablet" : "laptop");
- res = add_to_attr_set(hotkey_dev_attributes,
- &dev_attr_hotkey_tablet_mode.attr);
- }
-
if (!res)
res = register_attr_set_with_sysfs(
hotkey_dev_attributes,
@@ -3482,6 +3502,12 @@ static int __init hotkey_init(struct ibm_init_struct *iibm)
if (res)
goto err_exit;
+ res = hotkey_init_tablet_mode();
+ if (res < 0)
+ goto err_exit;
+
+ tabletsw_state = res;
+
/* Set up key map */
hotkey_keycode_map = kmalloc(TPACPI_HOTKEY_MAP_SIZE,
GFP_KERNEL);
--
2.7.4
------------------------------------------------------------------------------
Developer Access Program for Intel Xeon Phi Processors
Access to Intel Xeon Phi processor-based developer platforms.
With one year of Intel Parallel Studio XE.
Training and support from Colfax.
Order your platform today. http://sdm.link/xeonphi
^ permalink raw reply related [flat|nested] 25+ messages in thread
* Re: [PATCH 1/3] thinkpad_acpi: Move tablet detection into separate function
@ 2016-11-05 19:17 ` Darren Hart
0 siblings, 0 replies; 25+ messages in thread
From: Darren Hart @ 2016-11-05 19:17 UTC (permalink / raw)
To: Lyude
Cc: ibm-acpi-devel, Daniel Martin, Henrique de Moraes Holschuh,
platform-driver-x86, linux-kernel
On Mon, Oct 31, 2016 at 06:55:32PM -0400, Lyude wrote:
> Suggested by Daniel Martin <consume.noise@gmail.com>
Down below with the other -by: tags please.
>
> Lenovo's having a bit of fun randomly changing what hotkey events and
Please avoid contractions in documentation in general.
> acpi handles they use for reporting tablet mode, so unfortunately this
> means we're definitely going to need to probe for multiple types of
> tablet mode support. Since the hotkey_init() is already a lot larger
> then it should be, let's split up this detection into it's own function
s/then/than/ (nit, but since I'm commenting anyway...)
s/it's/its/
> to make things a little easier to read.
>
> As well, since we're going to have multiple types of tablet modes, make
> hotkey_tablet into an enum so we can also use it to indicate the type of
> tablet mode reporting the machine supports.
>
> Signed-off-by: Lyude <lyude@redhat.com>
> Cc: Daniel Martin <consume.noise@gmail.com>
> ---
> drivers/platform/x86/thinkpad_acpi.c | 50 +++++++++++++++++++++++++++---------
> 1 file changed, 38 insertions(+), 12 deletions(-)
>
> diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c
> index b65ce75..369b483 100644
> --- a/drivers/platform/x86/thinkpad_acpi.c
> +++ b/drivers/platform/x86/thinkpad_acpi.c
> @@ -302,7 +302,10 @@ static struct {
> u32 hotkey:1;
> u32 hotkey_mask:1;
> u32 hotkey_wlsw:1;
> - u32 hotkey_tablet:1;
> + enum {
> + TP_HOTKEY_TABLET_NONE = 0,
> + TP_HOTKEY_TABLET_USES_MHKG = 1,
1 will follow automatically, no need to specify explicitly.
enum usage in this driver is not very consistent, but I don't particularly care
to have it defined within the struct, but I'll leave that for Henrique to
decide.
> + } hotkey_tablet;
> u32 kbdlight:1;
> u32 light:1;
> u32 light_status:1;
> @@ -3117,6 +3120,34 @@ static const struct tpacpi_quirk tpacpi_hotkey_qtable[] __initconst = {
> typedef u16 tpacpi_keymap_entry_t;
> typedef tpacpi_keymap_entry_t tpacpi_keymap_t[TPACPI_HOTKEY_MAP_LEN];
>
> +static int
> +hotkey_init_tablet_mode(void)
> +{
> + int res;
> + char *type;
> + bool in_tablet_mode;
Declare variables in reverse line length order please:
bool in_tablet_mode;
char *type;
int res;
> +
> + /* For X41t, X60t, X61t Tablets... */
> + if (acpi_evalf(hkey_handle, &res, "MHKG", "qd")) {
> + tp_features.hotkey_tablet = TP_HOTKEY_TABLET_USES_MHKG;
> + in_tablet_mode = !!(res & TP_HOTKEY_TABLET_MASK);
> + type = "MHKG";
> + }
> +
> + if (!tp_features.hotkey_tablet)
> + return 0;
> +
> + pr_info("Tablet mode switch found (type: %s), currently in %s mode\n",
> + type, in_tablet_mode ? "tablet" : "laptop");
> +
> + res = add_to_attr_set(hotkey_dev_attributes,
> + &dev_attr_hotkey_tablet_mode.attr);
> + if (res)
> + return -1;
> +
> + return in_tablet_mode;
> +}
> +
> static int __init hotkey_init(struct ibm_init_struct *iibm)
> {
> /* Requirements for changing the default keymaps:
> @@ -3464,17 +3495,6 @@ static int __init hotkey_init(struct ibm_init_struct *iibm)
> res = add_to_attr_set(hotkey_dev_attributes,
> &dev_attr_hotkey_radio_sw.attr);
>
> - /* For X41t, X60t, X61t Tablets... */
> - if (!res && acpi_evalf(hkey_handle, &status, "MHKG", "qd")) {
> - tp_features.hotkey_tablet = 1;
> - tabletsw_state = !!(status & TP_HOTKEY_TABLET_MASK);
> - pr_info("possible tablet mode switch found; "
> - "ThinkPad in %s mode\n",
> - (tabletsw_state) ? "tablet" : "laptop");
> - res = add_to_attr_set(hotkey_dev_attributes,
> - &dev_attr_hotkey_tablet_mode.attr);
> - }
> -
> if (!res)
> res = register_attr_set_with_sysfs(
> hotkey_dev_attributes,
> @@ -3482,6 +3502,12 @@ static int __init hotkey_init(struct ibm_init_struct *iibm)
> if (res)
> goto err_exit;
>
> + res = hotkey_init_tablet_mode();
> + if (res < 0)
> + goto err_exit;
> +
> + tabletsw_state = res;
> +
> /* Set up key map */
> hotkey_keycode_map = kmalloc(TPACPI_HOTKEY_MAP_SIZE,
> GFP_KERNEL);
> --
> 2.7.4
>
>
--
Darren Hart
Intel Open Source Technology Center
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 1/3] thinkpad_acpi: Move tablet detection into separate function
@ 2016-11-05 19:17 ` Darren Hart
0 siblings, 0 replies; 25+ messages in thread
From: Darren Hart @ 2016-11-05 19:17 UTC (permalink / raw)
To: Lyude
Cc: ibm-acpi-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f, Daniel Martin,
Henrique de Moraes Holschuh, linux-kernel-u79uwXL29TY76Z2rM5mHXA,
platform-driver-x86-u79uwXL29TY76Z2rM5mHXA
On Mon, Oct 31, 2016 at 06:55:32PM -0400, Lyude wrote:
> Suggested by Daniel Martin <consume.noise-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Down below with the other -by: tags please.
>
> Lenovo's having a bit of fun randomly changing what hotkey events and
Please avoid contractions in documentation in general.
> acpi handles they use for reporting tablet mode, so unfortunately this
> means we're definitely going to need to probe for multiple types of
> tablet mode support. Since the hotkey_init() is already a lot larger
> then it should be, let's split up this detection into it's own function
s/then/than/ (nit, but since I'm commenting anyway...)
s/it's/its/
> to make things a little easier to read.
>
> As well, since we're going to have multiple types of tablet modes, make
> hotkey_tablet into an enum so we can also use it to indicate the type of
> tablet mode reporting the machine supports.
>
> Signed-off-by: Lyude <lyude-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
> Cc: Daniel Martin <consume.noise-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
> ---
> drivers/platform/x86/thinkpad_acpi.c | 50 +++++++++++++++++++++++++++---------
> 1 file changed, 38 insertions(+), 12 deletions(-)
>
> diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c
> index b65ce75..369b483 100644
> --- a/drivers/platform/x86/thinkpad_acpi.c
> +++ b/drivers/platform/x86/thinkpad_acpi.c
> @@ -302,7 +302,10 @@ static struct {
> u32 hotkey:1;
> u32 hotkey_mask:1;
> u32 hotkey_wlsw:1;
> - u32 hotkey_tablet:1;
> + enum {
> + TP_HOTKEY_TABLET_NONE = 0,
> + TP_HOTKEY_TABLET_USES_MHKG = 1,
1 will follow automatically, no need to specify explicitly.
enum usage in this driver is not very consistent, but I don't particularly care
to have it defined within the struct, but I'll leave that for Henrique to
decide.
> + } hotkey_tablet;
> u32 kbdlight:1;
> u32 light:1;
> u32 light_status:1;
> @@ -3117,6 +3120,34 @@ static const struct tpacpi_quirk tpacpi_hotkey_qtable[] __initconst = {
> typedef u16 tpacpi_keymap_entry_t;
> typedef tpacpi_keymap_entry_t tpacpi_keymap_t[TPACPI_HOTKEY_MAP_LEN];
>
> +static int
> +hotkey_init_tablet_mode(void)
> +{
> + int res;
> + char *type;
> + bool in_tablet_mode;
Declare variables in reverse line length order please:
bool in_tablet_mode;
char *type;
int res;
> +
> + /* For X41t, X60t, X61t Tablets... */
> + if (acpi_evalf(hkey_handle, &res, "MHKG", "qd")) {
> + tp_features.hotkey_tablet = TP_HOTKEY_TABLET_USES_MHKG;
> + in_tablet_mode = !!(res & TP_HOTKEY_TABLET_MASK);
> + type = "MHKG";
> + }
> +
> + if (!tp_features.hotkey_tablet)
> + return 0;
> +
> + pr_info("Tablet mode switch found (type: %s), currently in %s mode\n",
> + type, in_tablet_mode ? "tablet" : "laptop");
> +
> + res = add_to_attr_set(hotkey_dev_attributes,
> + &dev_attr_hotkey_tablet_mode.attr);
> + if (res)
> + return -1;
> +
> + return in_tablet_mode;
> +}
> +
> static int __init hotkey_init(struct ibm_init_struct *iibm)
> {
> /* Requirements for changing the default keymaps:
> @@ -3464,17 +3495,6 @@ static int __init hotkey_init(struct ibm_init_struct *iibm)
> res = add_to_attr_set(hotkey_dev_attributes,
> &dev_attr_hotkey_radio_sw.attr);
>
> - /* For X41t, X60t, X61t Tablets... */
> - if (!res && acpi_evalf(hkey_handle, &status, "MHKG", "qd")) {
> - tp_features.hotkey_tablet = 1;
> - tabletsw_state = !!(status & TP_HOTKEY_TABLET_MASK);
> - pr_info("possible tablet mode switch found; "
> - "ThinkPad in %s mode\n",
> - (tabletsw_state) ? "tablet" : "laptop");
> - res = add_to_attr_set(hotkey_dev_attributes,
> - &dev_attr_hotkey_tablet_mode.attr);
> - }
> -
> if (!res)
> res = register_attr_set_with_sysfs(
> hotkey_dev_attributes,
> @@ -3482,6 +3502,12 @@ static int __init hotkey_init(struct ibm_init_struct *iibm)
> if (res)
> goto err_exit;
>
> + res = hotkey_init_tablet_mode();
> + if (res < 0)
> + goto err_exit;
> +
> + tabletsw_state = res;
> +
> /* Set up key map */
> hotkey_keycode_map = kmalloc(TPACPI_HOTKEY_MAP_SIZE,
> GFP_KERNEL);
> --
> 2.7.4
>
>
--
Darren Hart
Intel Open Source Technology Center
------------------------------------------------------------------------------
Developer Access Program for Intel Xeon Phi Processors
Access to Intel Xeon Phi processor-based developer platforms.
With one year of Intel Parallel Studio XE.
Training and support from Colfax.
Order your platform today. http://sdm.link/xeonphi
^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH 2/3] thinkpad_acpi: Don't repeat ourselves in hotkey_init_tablet_mode()
@ 2016-10-31 22:55 ` Lyude
0 siblings, 0 replies; 25+ messages in thread
From: Lyude @ 2016-10-31 22:55 UTC (permalink / raw)
To: ibm-acpi-devel
Cc: Lyude, Daniel Martin, Henrique de Moraes Holschuh, Darren Hart,
platform-driver-x86, linux-kernel
There's no need to have multiple copies of the logic we use for checking
whether or not we're in tablet mode, so just use
hotkey_get_tablet_mode() when checking the initial state in
hotkey_init_tablet_mode().
Cc: Daniel Martin <consume.noise@gmail.com>
Signed-off-by: Lyude <lyude@redhat.com>
---
drivers/platform/x86/thinkpad_acpi.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c
index 369b483..92e8986 100644
--- a/drivers/platform/x86/thinkpad_acpi.c
+++ b/drivers/platform/x86/thinkpad_acpi.c
@@ -3130,13 +3130,16 @@ hotkey_init_tablet_mode(void)
/* For X41t, X60t, X61t Tablets... */
if (acpi_evalf(hkey_handle, &res, "MHKG", "qd")) {
tp_features.hotkey_tablet = TP_HOTKEY_TABLET_USES_MHKG;
- in_tablet_mode = !!(res & TP_HOTKEY_TABLET_MASK);
type = "MHKG";
}
if (!tp_features.hotkey_tablet)
return 0;
+ res = hotkey_get_tablet_mode(&in_tablet_mode);
+ if (res)
+ return res;
+
pr_info("Tablet mode switch found (type: %s), currently in %s mode\n",
type, in_tablet_mode ? "tablet" : "laptop");
--
2.7.4
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH 2/3] thinkpad_acpi: Don't repeat ourselves in hotkey_init_tablet_mode()
@ 2016-10-31 22:55 ` Lyude
0 siblings, 0 replies; 25+ messages in thread
From: Lyude @ 2016-10-31 22:55 UTC (permalink / raw)
To: ibm-acpi-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f
Cc: Daniel Martin, Lyude, Henrique de Moraes Holschuh,
linux-kernel-u79uwXL29TY76Z2rM5mHXA,
platform-driver-x86-u79uwXL29TY76Z2rM5mHXA, Darren Hart
There's no need to have multiple copies of the logic we use for checking
whether or not we're in tablet mode, so just use
hotkey_get_tablet_mode() when checking the initial state in
hotkey_init_tablet_mode().
Cc: Daniel Martin <consume.noise-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Signed-off-by: Lyude <lyude-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
---
drivers/platform/x86/thinkpad_acpi.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c
index 369b483..92e8986 100644
--- a/drivers/platform/x86/thinkpad_acpi.c
+++ b/drivers/platform/x86/thinkpad_acpi.c
@@ -3130,13 +3130,16 @@ hotkey_init_tablet_mode(void)
/* For X41t, X60t, X61t Tablets... */
if (acpi_evalf(hkey_handle, &res, "MHKG", "qd")) {
tp_features.hotkey_tablet = TP_HOTKEY_TABLET_USES_MHKG;
- in_tablet_mode = !!(res & TP_HOTKEY_TABLET_MASK);
type = "MHKG";
}
if (!tp_features.hotkey_tablet)
return 0;
+ res = hotkey_get_tablet_mode(&in_tablet_mode);
+ if (res)
+ return res;
+
pr_info("Tablet mode switch found (type: %s), currently in %s mode\n",
type, in_tablet_mode ? "tablet" : "laptop");
--
2.7.4
------------------------------------------------------------------------------
Developer Access Program for Intel Xeon Phi Processors
Access to Intel Xeon Phi processor-based developer platforms.
With one year of Intel Parallel Studio XE.
Training and support from Colfax.
Order your platform today. http://sdm.link/xeonphi
^ permalink raw reply related [flat|nested] 25+ messages in thread
* Re: [PATCH 2/3] thinkpad_acpi: Don't repeat ourselves in hotkey_init_tablet_mode()
2016-10-31 22:55 ` Lyude
@ 2016-10-31 23:20 ` kbuild test robot
-1 siblings, 0 replies; 25+ messages in thread
From: kbuild test robot @ 2016-10-31 23:20 UTC (permalink / raw)
To: Lyude
Cc: kbuild-all, ibm-acpi-devel, Lyude, Daniel Martin,
Henrique de Moraes Holschuh, Darren Hart, platform-driver-x86,
linux-kernel
[-- Attachment #1: Type: text/plain, Size: 1941 bytes --]
Hi Lyude,
[auto build test ERROR on platform-drivers-x86/for-next]
[also build test ERROR on v4.9-rc3 next-20161028]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
[Suggest to use git(>=2.9.0) format-patch --base=<commit> (or --base=auto for convenience) to record what (public, well-known) commit your patch series was built on]
[Check https://git-scm.com/docs/git-format-patch for more information]
url: https://github.com/0day-ci/linux/commits/Lyude/Add-support-for-X1-Yoga-2016-Tablet-Mode-refactors/20161101-070155
base: git://git.infradead.org/users/dvhart/linux-platform-drivers-x86.git for-next
config: x86_64-randconfig-x014-201644 (attached as .config)
compiler: gcc-6 (Debian 6.2.0-3) 6.2.0 20160901
reproduce:
# save the attached .config to linux build tree
make ARCH=x86_64
All errors (new ones prefixed by >>):
drivers/platform/x86/thinkpad_acpi.c: In function 'hotkey_init_tablet_mode':
>> drivers/platform/x86/thinkpad_acpi.c:3139:31: error: passing argument 1 of 'hotkey_get_tablet_mode' from incompatible pointer type [-Werror=incompatible-pointer-types]
res = hotkey_get_tablet_mode(&in_tablet_mode);
^
drivers/platform/x86/thinkpad_acpi.c:2085:12: note: expected 'int *' but argument is of type 'bool * {aka _Bool *}'
static int hotkey_get_tablet_mode(int *status)
^~~~~~~~~~~~~~~~~~~~~~
cc1: some warnings being treated as errors
vim +/hotkey_get_tablet_mode +3139 drivers/platform/x86/thinkpad_acpi.c
3133 type = "MHKG";
3134 }
3135
3136 if (!tp_features.hotkey_tablet)
3137 return 0;
3138
> 3139 res = hotkey_get_tablet_mode(&in_tablet_mode);
3140 if (res)
3141 return res;
3142
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 33953 bytes --]
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 2/3] thinkpad_acpi: Don't repeat ourselves in hotkey_init_tablet_mode()
@ 2016-10-31 23:20 ` kbuild test robot
0 siblings, 0 replies; 25+ messages in thread
From: kbuild test robot @ 2016-10-31 23:20 UTC (permalink / raw)
Cc: kbuild-all, ibm-acpi-devel, Lyude, Daniel Martin,
Henrique de Moraes Holschuh, Darren Hart, platform-driver-x86,
linux-kernel
[-- Attachment #1: Type: text/plain, Size: 1941 bytes --]
Hi Lyude,
[auto build test ERROR on platform-drivers-x86/for-next]
[also build test ERROR on v4.9-rc3 next-20161028]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
[Suggest to use git(>=2.9.0) format-patch --base=<commit> (or --base=auto for convenience) to record what (public, well-known) commit your patch series was built on]
[Check https://git-scm.com/docs/git-format-patch for more information]
url: https://github.com/0day-ci/linux/commits/Lyude/Add-support-for-X1-Yoga-2016-Tablet-Mode-refactors/20161101-070155
base: git://git.infradead.org/users/dvhart/linux-platform-drivers-x86.git for-next
config: x86_64-randconfig-x014-201644 (attached as .config)
compiler: gcc-6 (Debian 6.2.0-3) 6.2.0 20160901
reproduce:
# save the attached .config to linux build tree
make ARCH=x86_64
All errors (new ones prefixed by >>):
drivers/platform/x86/thinkpad_acpi.c: In function 'hotkey_init_tablet_mode':
>> drivers/platform/x86/thinkpad_acpi.c:3139:31: error: passing argument 1 of 'hotkey_get_tablet_mode' from incompatible pointer type [-Werror=incompatible-pointer-types]
res = hotkey_get_tablet_mode(&in_tablet_mode);
^
drivers/platform/x86/thinkpad_acpi.c:2085:12: note: expected 'int *' but argument is of type 'bool * {aka _Bool *}'
static int hotkey_get_tablet_mode(int *status)
^~~~~~~~~~~~~~~~~~~~~~
cc1: some warnings being treated as errors
vim +/hotkey_get_tablet_mode +3139 drivers/platform/x86/thinkpad_acpi.c
3133 type = "MHKG";
3134 }
3135
3136 if (!tp_features.hotkey_tablet)
3137 return 0;
3138
> 3139 res = hotkey_get_tablet_mode(&in_tablet_mode);
3140 if (res)
3141 return res;
3142
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 33953 bytes --]
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 2/3] thinkpad_acpi: Don't repeat ourselves in hotkey_init_tablet_mode()
2016-10-31 22:55 ` Lyude
@ 2016-10-31 23:49 ` kbuild test robot
-1 siblings, 0 replies; 25+ messages in thread
From: kbuild test robot @ 2016-10-31 23:49 UTC (permalink / raw)
To: Lyude
Cc: kbuild-all, ibm-acpi-devel, Lyude, Daniel Martin,
Henrique de Moraes Holschuh, Darren Hart, platform-driver-x86,
linux-kernel
[-- Attachment #1: Type: text/plain, Size: 2374 bytes --]
Hi Lyude,
[auto build test WARNING on platform-drivers-x86/for-next]
[also build test WARNING on v4.9-rc3 next-20161028]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
[Suggest to use git(>=2.9.0) format-patch --base=<commit> (or --base=auto for convenience) to record what (public, well-known) commit your patch series was built on]
[Check https://git-scm.com/docs/git-format-patch for more information]
url: https://github.com/0day-ci/linux/commits/Lyude/Add-support-for-X1-Yoga-2016-Tablet-Mode-refactors/20161101-070155
base: git://git.infradead.org/users/dvhart/linux-platform-drivers-x86.git for-next
config: i386-randconfig-c0-11010241 (attached as .config)
compiler: gcc-4.9 (Debian 4.9.4-2) 4.9.4
reproduce:
# save the attached .config to linux build tree
make ARCH=i386
All warnings (new ones prefixed by >>):
drivers/platform/x86/thinkpad_acpi.c: In function 'hotkey_init_tablet_mode':
>> drivers/platform/x86/thinkpad_acpi.c:3139:31: warning: passing argument 1 of 'hotkey_get_tablet_mode' from incompatible pointer type
res = hotkey_get_tablet_mode(&in_tablet_mode);
^
drivers/platform/x86/thinkpad_acpi.c:2085:12: note: expected 'int *' but argument is of type 'bool *'
static int hotkey_get_tablet_mode(int *status)
^
vim +/hotkey_get_tablet_mode +3139 drivers/platform/x86/thinkpad_acpi.c
3123 static int
3124 hotkey_init_tablet_mode(void)
3125 {
3126 int res;
3127 char *type;
3128 bool in_tablet_mode;
3129
3130 /* For X41t, X60t, X61t Tablets... */
3131 if (acpi_evalf(hkey_handle, &res, "MHKG", "qd")) {
3132 tp_features.hotkey_tablet = TP_HOTKEY_TABLET_USES_MHKG;
3133 type = "MHKG";
3134 }
3135
3136 if (!tp_features.hotkey_tablet)
3137 return 0;
3138
> 3139 res = hotkey_get_tablet_mode(&in_tablet_mode);
3140 if (res)
3141 return res;
3142
3143 pr_info("Tablet mode switch found (type: %s), currently in %s mode\n",
3144 type, in_tablet_mode ? "tablet" : "laptop");
3145
3146 res = add_to_attr_set(hotkey_dev_attributes,
3147 &dev_attr_hotkey_tablet_mode.attr);
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 26765 bytes --]
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 2/3] thinkpad_acpi: Don't repeat ourselves in hotkey_init_tablet_mode()
@ 2016-10-31 23:49 ` kbuild test robot
0 siblings, 0 replies; 25+ messages in thread
From: kbuild test robot @ 2016-10-31 23:49 UTC (permalink / raw)
Cc: kbuild-all, ibm-acpi-devel, Lyude, Daniel Martin,
Henrique de Moraes Holschuh, Darren Hart, platform-driver-x86,
linux-kernel
[-- Attachment #1: Type: text/plain, Size: 2374 bytes --]
Hi Lyude,
[auto build test WARNING on platform-drivers-x86/for-next]
[also build test WARNING on v4.9-rc3 next-20161028]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
[Suggest to use git(>=2.9.0) format-patch --base=<commit> (or --base=auto for convenience) to record what (public, well-known) commit your patch series was built on]
[Check https://git-scm.com/docs/git-format-patch for more information]
url: https://github.com/0day-ci/linux/commits/Lyude/Add-support-for-X1-Yoga-2016-Tablet-Mode-refactors/20161101-070155
base: git://git.infradead.org/users/dvhart/linux-platform-drivers-x86.git for-next
config: i386-randconfig-c0-11010241 (attached as .config)
compiler: gcc-4.9 (Debian 4.9.4-2) 4.9.4
reproduce:
# save the attached .config to linux build tree
make ARCH=i386
All warnings (new ones prefixed by >>):
drivers/platform/x86/thinkpad_acpi.c: In function 'hotkey_init_tablet_mode':
>> drivers/platform/x86/thinkpad_acpi.c:3139:31: warning: passing argument 1 of 'hotkey_get_tablet_mode' from incompatible pointer type
res = hotkey_get_tablet_mode(&in_tablet_mode);
^
drivers/platform/x86/thinkpad_acpi.c:2085:12: note: expected 'int *' but argument is of type 'bool *'
static int hotkey_get_tablet_mode(int *status)
^
vim +/hotkey_get_tablet_mode +3139 drivers/platform/x86/thinkpad_acpi.c
3123 static int
3124 hotkey_init_tablet_mode(void)
3125 {
3126 int res;
3127 char *type;
3128 bool in_tablet_mode;
3129
3130 /* For X41t, X60t, X61t Tablets... */
3131 if (acpi_evalf(hkey_handle, &res, "MHKG", "qd")) {
3132 tp_features.hotkey_tablet = TP_HOTKEY_TABLET_USES_MHKG;
3133 type = "MHKG";
3134 }
3135
3136 if (!tp_features.hotkey_tablet)
3137 return 0;
3138
> 3139 res = hotkey_get_tablet_mode(&in_tablet_mode);
3140 if (res)
3141 return res;
3142
3143 pr_info("Tablet mode switch found (type: %s), currently in %s mode\n",
3144 type, in_tablet_mode ? "tablet" : "laptop");
3145
3146 res = add_to_attr_set(hotkey_dev_attributes,
3147 &dev_attr_hotkey_tablet_mode.attr);
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 26765 bytes --]
^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH v2 1/3] thinkpad_acpi: Move tablet detection into separate function
@ 2016-10-31 23:56 ` Lyude
0 siblings, 0 replies; 25+ messages in thread
From: Lyude @ 2016-10-31 23:56 UTC (permalink / raw)
To: ibm-acpi-devel
Cc: Lyude, Daniel Martin, Henrique de Moraes Holschuh, Darren Hart,
ibm-acpi-devel, platform-driver-x86, linux-kernel
Suggested by Daniel Martin <consume.noise@gmail.com>
Lenovo's having a bit of fun randomly changing what hotkey events and
acpi handles they use for reporting tablet mode, so unfortunately this
means we're definitely going to need to probe for multiple types of
tablet mode support. Since the hotkey_init() is already a lot larger
then it should be, let's split up this detection into it's own function
to make things a little easier to read.
As well, since we're going to have multiple types of tablet modes, make
hotkey_tablet into an enum so we can also use it to indicate the type of
tablet mode reporting the machine supports.
Changes since v1:
- Don't use bool for in_tablet_mode (fixes complaints from kbuild test
robot)
Signed-off-by: Lyude <lyude@redhat.com>
Cc: Daniel Martin <consume.noise@gmail.com>
---
drivers/platform/x86/thinkpad_acpi.c | 50 +++++++++++++++++++++++++++---------
1 file changed, 38 insertions(+), 12 deletions(-)
diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c
index b65ce75..5209a1d 100644
--- a/drivers/platform/x86/thinkpad_acpi.c
+++ b/drivers/platform/x86/thinkpad_acpi.c
@@ -302,7 +302,10 @@ static struct {
u32 hotkey:1;
u32 hotkey_mask:1;
u32 hotkey_wlsw:1;
- u32 hotkey_tablet:1;
+ enum {
+ TP_HOTKEY_TABLET_NONE = 0,
+ TP_HOTKEY_TABLET_USES_MHKG = 1,
+ } hotkey_tablet;
u32 kbdlight:1;
u32 light:1;
u32 light_status:1;
@@ -3117,6 +3120,34 @@ static const struct tpacpi_quirk tpacpi_hotkey_qtable[] __initconst = {
typedef u16 tpacpi_keymap_entry_t;
typedef tpacpi_keymap_entry_t tpacpi_keymap_t[TPACPI_HOTKEY_MAP_LEN];
+static int
+hotkey_init_tablet_mode(void)
+{
+ int res;
+ char *type;
+ int in_tablet_mode;
+
+ /* For X41t, X60t, X61t Tablets... */
+ if (acpi_evalf(hkey_handle, &res, "MHKG", "qd")) {
+ tp_features.hotkey_tablet = TP_HOTKEY_TABLET_USES_MHKG;
+ in_tablet_mode = !!(res & TP_HOTKEY_TABLET_MASK);
+ type = "MHKG";
+ }
+
+ if (!tp_features.hotkey_tablet)
+ return 0;
+
+ pr_info("Tablet mode switch found (type: %s), currently in %s mode\n",
+ type, in_tablet_mode ? "tablet" : "laptop");
+
+ res = add_to_attr_set(hotkey_dev_attributes,
+ &dev_attr_hotkey_tablet_mode.attr);
+ if (res)
+ return -1;
+
+ return in_tablet_mode;
+}
+
static int __init hotkey_init(struct ibm_init_struct *iibm)
{
/* Requirements for changing the default keymaps:
@@ -3464,17 +3495,6 @@ static int __init hotkey_init(struct ibm_init_struct *iibm)
res = add_to_attr_set(hotkey_dev_attributes,
&dev_attr_hotkey_radio_sw.attr);
- /* For X41t, X60t, X61t Tablets... */
- if (!res && acpi_evalf(hkey_handle, &status, "MHKG", "qd")) {
- tp_features.hotkey_tablet = 1;
- tabletsw_state = !!(status & TP_HOTKEY_TABLET_MASK);
- pr_info("possible tablet mode switch found; "
- "ThinkPad in %s mode\n",
- (tabletsw_state) ? "tablet" : "laptop");
- res = add_to_attr_set(hotkey_dev_attributes,
- &dev_attr_hotkey_tablet_mode.attr);
- }
-
if (!res)
res = register_attr_set_with_sysfs(
hotkey_dev_attributes,
@@ -3482,6 +3502,12 @@ static int __init hotkey_init(struct ibm_init_struct *iibm)
if (res)
goto err_exit;
+ res = hotkey_init_tablet_mode();
+ if (res < 0)
+ goto err_exit;
+
+ tabletsw_state = res;
+
/* Set up key map */
hotkey_keycode_map = kmalloc(TPACPI_HOTKEY_MAP_SIZE,
GFP_KERNEL);
--
2.7.4
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH v2 1/3] thinkpad_acpi: Move tablet detection into separate function
@ 2016-10-31 23:56 ` Lyude
0 siblings, 0 replies; 25+ messages in thread
From: Lyude @ 2016-10-31 23:56 UTC (permalink / raw)
To: ibm-acpi-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW
Cc: Daniel Martin, Lyude, Henrique de Moraes Holschuh,
linux-kernel-u79uwXL29TY76Z2rM5mHXA,
platform-driver-x86-u79uwXL29TY76Z2rM5mHXA,
ibm-acpi-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f, Darren Hart
Suggested by Daniel Martin <consume.noise-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Lenovo's having a bit of fun randomly changing what hotkey events and
acpi handles they use for reporting tablet mode, so unfortunately this
means we're definitely going to need to probe for multiple types of
tablet mode support. Since the hotkey_init() is already a lot larger
then it should be, let's split up this detection into it's own function
to make things a little easier to read.
As well, since we're going to have multiple types of tablet modes, make
hotkey_tablet into an enum so we can also use it to indicate the type of
tablet mode reporting the machine supports.
Changes since v1:
- Don't use bool for in_tablet_mode (fixes complaints from kbuild test
robot)
Signed-off-by: Lyude <lyude-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
Cc: Daniel Martin <consume.noise-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
---
drivers/platform/x86/thinkpad_acpi.c | 50 +++++++++++++++++++++++++++---------
1 file changed, 38 insertions(+), 12 deletions(-)
diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c
index b65ce75..5209a1d 100644
--- a/drivers/platform/x86/thinkpad_acpi.c
+++ b/drivers/platform/x86/thinkpad_acpi.c
@@ -302,7 +302,10 @@ static struct {
u32 hotkey:1;
u32 hotkey_mask:1;
u32 hotkey_wlsw:1;
- u32 hotkey_tablet:1;
+ enum {
+ TP_HOTKEY_TABLET_NONE = 0,
+ TP_HOTKEY_TABLET_USES_MHKG = 1,
+ } hotkey_tablet;
u32 kbdlight:1;
u32 light:1;
u32 light_status:1;
@@ -3117,6 +3120,34 @@ static const struct tpacpi_quirk tpacpi_hotkey_qtable[] __initconst = {
typedef u16 tpacpi_keymap_entry_t;
typedef tpacpi_keymap_entry_t tpacpi_keymap_t[TPACPI_HOTKEY_MAP_LEN];
+static int
+hotkey_init_tablet_mode(void)
+{
+ int res;
+ char *type;
+ int in_tablet_mode;
+
+ /* For X41t, X60t, X61t Tablets... */
+ if (acpi_evalf(hkey_handle, &res, "MHKG", "qd")) {
+ tp_features.hotkey_tablet = TP_HOTKEY_TABLET_USES_MHKG;
+ in_tablet_mode = !!(res & TP_HOTKEY_TABLET_MASK);
+ type = "MHKG";
+ }
+
+ if (!tp_features.hotkey_tablet)
+ return 0;
+
+ pr_info("Tablet mode switch found (type: %s), currently in %s mode\n",
+ type, in_tablet_mode ? "tablet" : "laptop");
+
+ res = add_to_attr_set(hotkey_dev_attributes,
+ &dev_attr_hotkey_tablet_mode.attr);
+ if (res)
+ return -1;
+
+ return in_tablet_mode;
+}
+
static int __init hotkey_init(struct ibm_init_struct *iibm)
{
/* Requirements for changing the default keymaps:
@@ -3464,17 +3495,6 @@ static int __init hotkey_init(struct ibm_init_struct *iibm)
res = add_to_attr_set(hotkey_dev_attributes,
&dev_attr_hotkey_radio_sw.attr);
- /* For X41t, X60t, X61t Tablets... */
- if (!res && acpi_evalf(hkey_handle, &status, "MHKG", "qd")) {
- tp_features.hotkey_tablet = 1;
- tabletsw_state = !!(status & TP_HOTKEY_TABLET_MASK);
- pr_info("possible tablet mode switch found; "
- "ThinkPad in %s mode\n",
- (tabletsw_state) ? "tablet" : "laptop");
- res = add_to_attr_set(hotkey_dev_attributes,
- &dev_attr_hotkey_tablet_mode.attr);
- }
-
if (!res)
res = register_attr_set_with_sysfs(
hotkey_dev_attributes,
@@ -3482,6 +3502,12 @@ static int __init hotkey_init(struct ibm_init_struct *iibm)
if (res)
goto err_exit;
+ res = hotkey_init_tablet_mode();
+ if (res < 0)
+ goto err_exit;
+
+ tabletsw_state = res;
+
/* Set up key map */
hotkey_keycode_map = kmalloc(TPACPI_HOTKEY_MAP_SIZE,
GFP_KERNEL);
--
2.7.4
------------------------------------------------------------------------------
Developer Access Program for Intel Xeon Phi Processors
Access to Intel Xeon Phi processor-based developer platforms.
With one year of Intel Parallel Studio XE.
Training and support from Colfax.
Order your platform today. http://sdm.link/xeonphi
^ permalink raw reply related [flat|nested] 25+ messages in thread
* Re: [PATCH v2 1/3] thinkpad_acpi: Move tablet detection into separate function
@ 2016-11-05 19:30 ` Darren Hart
0 siblings, 0 replies; 25+ messages in thread
From: Darren Hart @ 2016-11-05 19:30 UTC (permalink / raw)
To: Lyude
Cc: ibm-acpi-devel, Daniel Martin, Henrique de Moraes Holschuh,
ibm-acpi-devel, platform-driver-x86, linux-kernel
On Mon, Oct 31, 2016 at 07:56:40PM -0400, Lyude wrote:
> Suggested by Daniel Martin <consume.noise@gmail.com>
>
> Lenovo's having a bit of fun randomly changing what hotkey events and
> acpi handles they use for reporting tablet mode, so unfortunately this
> means we're definitely going to need to probe for multiple types of
> tablet mode support. Since the hotkey_init() is already a lot larger
> then it should be, let's split up this detection into it's own function
> to make things a little easier to read.
>
> As well, since we're going to have multiple types of tablet modes, make
> hotkey_tablet into an enum so we can also use it to indicate the type of
> tablet mode reporting the machine supports.
>
> Changes since v1:
> - Don't use bool for in_tablet_mode (fixes complaints from kbuild test
> robot)
>
This series doesn't apply cleanly now (simple fuzz).
Once we hear back from Henrique on his enum preference and thoughts on the
refactoring (which looks reasonable to me), please resubmit this series and
review Documentation/SubmittingPatches for the changelog (below ---) and please
be consistent in your placement of "v2" in the subject [PATCH vX N/M] prefix.
Most all of my feedback here is minor, but there were enough little things that
added up and I'd like to see this resubmitted as a series with those addressed
that applies cleanly - largely to make sure I haven't missed context and somehow
merged the wrong bits.
Thanks Lyude,
--
Darren Hart
Intel Open Source Technology Center
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH v2 1/3] thinkpad_acpi: Move tablet detection into separate function
@ 2016-11-05 19:30 ` Darren Hart
0 siblings, 0 replies; 25+ messages in thread
From: Darren Hart @ 2016-11-05 19:30 UTC (permalink / raw)
To: Lyude
Cc: Daniel Martin, ibm-acpi-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW,
Henrique de Moraes Holschuh, linux-kernel-u79uwXL29TY76Z2rM5mHXA,
platform-driver-x86-u79uwXL29TY76Z2rM5mHXA,
ibm-acpi-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f
On Mon, Oct 31, 2016 at 07:56:40PM -0400, Lyude wrote:
> Suggested by Daniel Martin <consume.noise-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
>
> Lenovo's having a bit of fun randomly changing what hotkey events and
> acpi handles they use for reporting tablet mode, so unfortunately this
> means we're definitely going to need to probe for multiple types of
> tablet mode support. Since the hotkey_init() is already a lot larger
> then it should be, let's split up this detection into it's own function
> to make things a little easier to read.
>
> As well, since we're going to have multiple types of tablet modes, make
> hotkey_tablet into an enum so we can also use it to indicate the type of
> tablet mode reporting the machine supports.
>
> Changes since v1:
> - Don't use bool for in_tablet_mode (fixes complaints from kbuild test
> robot)
>
This series doesn't apply cleanly now (simple fuzz).
Once we hear back from Henrique on his enum preference and thoughts on the
refactoring (which looks reasonable to me), please resubmit this series and
review Documentation/SubmittingPatches for the changelog (below ---) and please
be consistent in your placement of "v2" in the subject [PATCH vX N/M] prefix.
Most all of my feedback here is minor, but there were enough little things that
added up and I'd like to see this resubmitted as a series with those addressed
that applies cleanly - largely to make sure I haven't missed context and somehow
merged the wrong bits.
Thanks Lyude,
--
Darren Hart
Intel Open Source Technology Center
------------------------------------------------------------------------------
Developer Access Program for Intel Xeon Phi Processors
Access to Intel Xeon Phi processor-based developer platforms.
With one year of Intel Parallel Studio XE.
Training and support from Colfax.
Order your platform today. http://sdm.link/xeonphi
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH v2 1/3] thinkpad_acpi: Move tablet detection into separate function
2016-11-05 19:30 ` Darren Hart
(?)
@ 2016-11-06 3:19 ` Henrique de Moraes Holschuh
-1 siblings, 0 replies; 25+ messages in thread
From: Henrique de Moraes Holschuh @ 2016-11-06 3:19 UTC (permalink / raw)
To: Darren Hart
Cc: Lyude, ibm-acpi-devel, Daniel Martin, ibm-acpi-devel,
platform-driver-x86, linux-kernel
On Sat, 05 Nov 2016, Darren Hart wrote:
> On Mon, Oct 31, 2016 at 07:56:40PM -0400, Lyude wrote:
> > Suggested by Daniel Martin <consume.noise@gmail.com>
> >
> > Lenovo's having a bit of fun randomly changing what hotkey events and
> > acpi handles they use for reporting tablet mode, so unfortunately this
> > means we're definitely going to need to probe for multiple types of
> > tablet mode support. Since the hotkey_init() is already a lot larger
> > then it should be, let's split up this detection into it's own function
> > to make things a little easier to read.
> >
> > As well, since we're going to have multiple types of tablet modes, make
> > hotkey_tablet into an enum so we can also use it to indicate the type of
> > tablet mode reporting the machine supports.
> >
> > Changes since v1:
> > - Don't use bool for in_tablet_mode (fixes complaints from kbuild test
> > robot)
> >
>
> This series doesn't apply cleanly now (simple fuzz).
>
> Once we hear back from Henrique on his enum preference and thoughts on the
> refactoring (which looks reasonable to me), please resubmit this series and
I don't mind the enum usage, as long as it is correct. As you said, the
driver is not consistent there. I also don't mind the refactoring.
--
Henrique Holschuh
^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH 3/3 v3] thinkpad_acpi: Add support for X1 Yoga (2016) Tablet Mode
@ 2016-10-31 22:55 ` Lyude
0 siblings, 0 replies; 25+ messages in thread
From: Lyude @ 2016-10-31 22:55 UTC (permalink / raw)
To: ibm-acpi-devel
Cc: Lyude, Daniel Martin, Henrique de Moraes Holschuh, Darren Hart,
platform-driver-x86, linux-kernel
For whatever reason, the X1 Yoga doesn't support the normal method of
querying for tablet mode. Instead of providing the MHKG method under the
hotkey handle, we're instead given the CMMD method under the EC handle.
Values on this handle are either 0x1, laptop mode, or 0x6, tablet mode.
Changes since v1:
- Clarify kernel output when finding the tablet mode switch
Changes since v2:
- Rebase on top of previous patch
- Use an enum for hotkey_tablet. This does make a bit more sense then
just adding another flag.
- Call hotkey_tablet_mode_notify_change() when getting TABLET_CHANGED
event.
Cc: Daniel Martin <consume.noise@gmail.com>
Signed-off-by: Lyude <lyude@redhat.com>
---
drivers/platform/x86/thinkpad_acpi.c | 37 ++++++++++++++++++++++++++++++++----
1 file changed, 33 insertions(+), 4 deletions(-)
diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c
index 92e8986..4df4153 100644
--- a/drivers/platform/x86/thinkpad_acpi.c
+++ b/drivers/platform/x86/thinkpad_acpi.c
@@ -190,6 +190,9 @@ enum tpacpi_hkey_event_t {
TP_HKEY_EV_LID_OPEN = 0x5002, /* laptop lid opened */
TP_HKEY_EV_TABLET_TABLET = 0x5009, /* tablet swivel up */
TP_HKEY_EV_TABLET_NOTEBOOK = 0x500a, /* tablet swivel down */
+ TP_HKEY_EV_TABLET_CHANGED = 0x60c0, /* X1 Yoga (2016):
+ * enter/leave tablet mode
+ */
TP_HKEY_EV_PEN_INSERTED = 0x500b, /* tablet pen inserted */
TP_HKEY_EV_PEN_REMOVED = 0x500c, /* tablet pen removed */
TP_HKEY_EV_BRGHT_CHANGED = 0x5010, /* backlight control event */
@@ -305,6 +308,7 @@ static struct {
enum {
TP_HOTKEY_TABLET_NONE = 0,
TP_HOTKEY_TABLET_USES_MHKG = 1,
+ TP_HOTKEY_TABLET_USES_CMMD = 2,
} hotkey_tablet;
u32 kbdlight:1;
u32 light:1;
@@ -2062,6 +2066,8 @@ static void hotkey_poll_setup(const bool may_warn);
/* HKEY.MHKG() return bits */
#define TP_HOTKEY_TABLET_MASK (1 << 3)
+/* ThinkPad X1 Yoga (2016) */
+#define TP_EC_CMMD_TABLET_MODE 0x6
static int hotkey_get_wlsw(void)
{
@@ -2086,10 +2092,23 @@ static int hotkey_get_tablet_mode(int *status)
{
int s;
- if (!acpi_evalf(hkey_handle, &s, "MHKG", "d"))
- return -EIO;
+ switch (tp_features.hotkey_tablet) {
+ case TP_HOTKEY_TABLET_USES_MHKG:
+ if (!acpi_evalf(hkey_handle, &s, "MHKG", "d"))
+ return -EIO;
+
+ *status = ((s & TP_HOTKEY_TABLET_MASK) != 0);
+ break;
+ case TP_HOTKEY_TABLET_USES_CMMD:
+ if (!acpi_evalf(ec_handle, &s, "CMMD", "d"))
+ return -EIO;
+
+ *status = (s == TP_EC_CMMD_TABLET_MODE);
+ break;
+ default:
+ break;
+ }
- *status = ((s & TP_HOTKEY_TABLET_MASK) != 0);
return 0;
}
@@ -3127,10 +3146,14 @@ hotkey_init_tablet_mode(void)
char *type;
bool in_tablet_mode;
- /* For X41t, X60t, X61t Tablets... */
if (acpi_evalf(hkey_handle, &res, "MHKG", "qd")) {
+ /* For X41t, X60t, X61t Tablets... */
tp_features.hotkey_tablet = TP_HOTKEY_TABLET_USES_MHKG;
type = "MHKG";
+ } else if (acpi_evalf(ec_handle, &res, "CMMD", "qd")) {
+ /* For X1 Yoga (2016) */
+ tp_features.hotkey_tablet = TP_HOTKEY_TABLET_USES_CMMD;
+ type = "CMMD";
}
if (!tp_features.hotkey_tablet)
@@ -3928,6 +3951,12 @@ static bool hotkey_notify_6xxx(const u32 hkey,
*ignore_acpi_ev = true;
return true;
+ case TP_HKEY_EV_TABLET_CHANGED:
+ tpacpi_input_send_tabletsw();
+ hotkey_tablet_mode_notify_change();
+ *send_acpi_ev = false;
+ break;
+
default:
pr_warn("unknown possible thermal alarm or keyboard event received\n");
known = false;
--
2.7.4
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH 3/3 v3] thinkpad_acpi: Add support for X1 Yoga (2016) Tablet Mode
@ 2016-10-31 22:55 ` Lyude
0 siblings, 0 replies; 25+ messages in thread
From: Lyude @ 2016-10-31 22:55 UTC (permalink / raw)
To: ibm-acpi-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f
Cc: Daniel Martin, Lyude, Henrique de Moraes Holschuh,
linux-kernel-u79uwXL29TY76Z2rM5mHXA,
platform-driver-x86-u79uwXL29TY76Z2rM5mHXA, Darren Hart
For whatever reason, the X1 Yoga doesn't support the normal method of
querying for tablet mode. Instead of providing the MHKG method under the
hotkey handle, we're instead given the CMMD method under the EC handle.
Values on this handle are either 0x1, laptop mode, or 0x6, tablet mode.
Changes since v1:
- Clarify kernel output when finding the tablet mode switch
Changes since v2:
- Rebase on top of previous patch
- Use an enum for hotkey_tablet. This does make a bit more sense then
just adding another flag.
- Call hotkey_tablet_mode_notify_change() when getting TABLET_CHANGED
event.
Cc: Daniel Martin <consume.noise-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Signed-off-by: Lyude <lyude-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
---
drivers/platform/x86/thinkpad_acpi.c | 37 ++++++++++++++++++++++++++++++++----
1 file changed, 33 insertions(+), 4 deletions(-)
diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c
index 92e8986..4df4153 100644
--- a/drivers/platform/x86/thinkpad_acpi.c
+++ b/drivers/platform/x86/thinkpad_acpi.c
@@ -190,6 +190,9 @@ enum tpacpi_hkey_event_t {
TP_HKEY_EV_LID_OPEN = 0x5002, /* laptop lid opened */
TP_HKEY_EV_TABLET_TABLET = 0x5009, /* tablet swivel up */
TP_HKEY_EV_TABLET_NOTEBOOK = 0x500a, /* tablet swivel down */
+ TP_HKEY_EV_TABLET_CHANGED = 0x60c0, /* X1 Yoga (2016):
+ * enter/leave tablet mode
+ */
TP_HKEY_EV_PEN_INSERTED = 0x500b, /* tablet pen inserted */
TP_HKEY_EV_PEN_REMOVED = 0x500c, /* tablet pen removed */
TP_HKEY_EV_BRGHT_CHANGED = 0x5010, /* backlight control event */
@@ -305,6 +308,7 @@ static struct {
enum {
TP_HOTKEY_TABLET_NONE = 0,
TP_HOTKEY_TABLET_USES_MHKG = 1,
+ TP_HOTKEY_TABLET_USES_CMMD = 2,
} hotkey_tablet;
u32 kbdlight:1;
u32 light:1;
@@ -2062,6 +2066,8 @@ static void hotkey_poll_setup(const bool may_warn);
/* HKEY.MHKG() return bits */
#define TP_HOTKEY_TABLET_MASK (1 << 3)
+/* ThinkPad X1 Yoga (2016) */
+#define TP_EC_CMMD_TABLET_MODE 0x6
static int hotkey_get_wlsw(void)
{
@@ -2086,10 +2092,23 @@ static int hotkey_get_tablet_mode(int *status)
{
int s;
- if (!acpi_evalf(hkey_handle, &s, "MHKG", "d"))
- return -EIO;
+ switch (tp_features.hotkey_tablet) {
+ case TP_HOTKEY_TABLET_USES_MHKG:
+ if (!acpi_evalf(hkey_handle, &s, "MHKG", "d"))
+ return -EIO;
+
+ *status = ((s & TP_HOTKEY_TABLET_MASK) != 0);
+ break;
+ case TP_HOTKEY_TABLET_USES_CMMD:
+ if (!acpi_evalf(ec_handle, &s, "CMMD", "d"))
+ return -EIO;
+
+ *status = (s == TP_EC_CMMD_TABLET_MODE);
+ break;
+ default:
+ break;
+ }
- *status = ((s & TP_HOTKEY_TABLET_MASK) != 0);
return 0;
}
@@ -3127,10 +3146,14 @@ hotkey_init_tablet_mode(void)
char *type;
bool in_tablet_mode;
- /* For X41t, X60t, X61t Tablets... */
if (acpi_evalf(hkey_handle, &res, "MHKG", "qd")) {
+ /* For X41t, X60t, X61t Tablets... */
tp_features.hotkey_tablet = TP_HOTKEY_TABLET_USES_MHKG;
type = "MHKG";
+ } else if (acpi_evalf(ec_handle, &res, "CMMD", "qd")) {
+ /* For X1 Yoga (2016) */
+ tp_features.hotkey_tablet = TP_HOTKEY_TABLET_USES_CMMD;
+ type = "CMMD";
}
if (!tp_features.hotkey_tablet)
@@ -3928,6 +3951,12 @@ static bool hotkey_notify_6xxx(const u32 hkey,
*ignore_acpi_ev = true;
return true;
+ case TP_HKEY_EV_TABLET_CHANGED:
+ tpacpi_input_send_tabletsw();
+ hotkey_tablet_mode_notify_change();
+ *send_acpi_ev = false;
+ break;
+
default:
pr_warn("unknown possible thermal alarm or keyboard event received\n");
known = false;
--
2.7.4
------------------------------------------------------------------------------
Developer Access Program for Intel Xeon Phi Processors
Access to Intel Xeon Phi processor-based developer platforms.
With one year of Intel Parallel Studio XE.
Training and support from Colfax.
Order your platform today. http://sdm.link/xeonphi
^ permalink raw reply related [flat|nested] 25+ messages in thread
* Re: [PATCH 3/3 v3] thinkpad_acpi: Add support for X1 Yoga (2016) Tablet Mode
@ 2016-11-05 19:25 ` Darren Hart
0 siblings, 0 replies; 25+ messages in thread
From: Darren Hart @ 2016-11-05 19:25 UTC (permalink / raw)
To: Lyude
Cc: ibm-acpi-devel, Daniel Martin, Henrique de Moraes Holschuh,
platform-driver-x86, linux-kernel
On Mon, Oct 31, 2016 at 06:55:34PM -0400, Lyude wrote:
> For whatever reason, the X1 Yoga doesn't support the normal method of
> querying for tablet mode. Instead of providing the MHKG method under the
> hotkey handle, we're instead given the CMMD method under the EC handle.
> Values on this handle are either 0x1, laptop mode, or 0x6, tablet mode.
>
> Changes since v1:
> - Clarify kernel output when finding the tablet mode switch
> Changes since v2:
> - Rebase on top of previous patch
> - Use an enum for hotkey_tablet. This does make a bit more sense then
> just adding another flag.
> - Call hotkey_tablet_mode_notify_change() when getting TABLET_CHANGED
> event.
These go below the ---
>
> Cc: Daniel Martin <consume.noise@gmail.com>
> Signed-off-by: Lyude <lyude@redhat.com>
> ---
> drivers/platform/x86/thinkpad_acpi.c | 37 ++++++++++++++++++++++++++++++++----
> 1 file changed, 33 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c
> index 92e8986..4df4153 100644
> --- a/drivers/platform/x86/thinkpad_acpi.c
> +++ b/drivers/platform/x86/thinkpad_acpi.c
> @@ -190,6 +190,9 @@ enum tpacpi_hkey_event_t {
> TP_HKEY_EV_LID_OPEN = 0x5002, /* laptop lid opened */
> TP_HKEY_EV_TABLET_TABLET = 0x5009, /* tablet swivel up */
> TP_HKEY_EV_TABLET_NOTEBOOK = 0x500a, /* tablet swivel down */
> + TP_HKEY_EV_TABLET_CHANGED = 0x60c0, /* X1 Yoga (2016):
> + * enter/leave tablet mode
> + */
> TP_HKEY_EV_PEN_INSERTED = 0x500b, /* tablet pen inserted */
> TP_HKEY_EV_PEN_REMOVED = 0x500c, /* tablet pen removed */
> TP_HKEY_EV_BRGHT_CHANGED = 0x5010, /* backlight control event */
> @@ -305,6 +308,7 @@ static struct {
> enum {
> TP_HOTKEY_TABLET_NONE = 0,
> TP_HOTKEY_TABLET_USES_MHKG = 1,
> + TP_HOTKEY_TABLET_USES_CMMD = 2,
1 and 2 will follow automatically, no need to specify.
Pending Henrique's preference on inline enum or external definition.
> } hotkey_tablet;
> u32 kbdlight:1;
> u32 light:1;
> @@ -2062,6 +2066,8 @@ static void hotkey_poll_setup(const bool may_warn);
>
> /* HKEY.MHKG() return bits */
> #define TP_HOTKEY_TABLET_MASK (1 << 3)
> +/* ThinkPad X1 Yoga (2016) */
> +#define TP_EC_CMMD_TABLET_MODE 0x6
>
> static int hotkey_get_wlsw(void)
> {
> @@ -2086,10 +2092,23 @@ static int hotkey_get_tablet_mode(int *status)
> {
> int s;
>
> - if (!acpi_evalf(hkey_handle, &s, "MHKG", "d"))
> - return -EIO;
> + switch (tp_features.hotkey_tablet) {
> + case TP_HOTKEY_TABLET_USES_MHKG:
> + if (!acpi_evalf(hkey_handle, &s, "MHKG", "d"))
> + return -EIO;
> +
> + *status = ((s & TP_HOTKEY_TABLET_MASK) != 0);
> + break;
> + case TP_HOTKEY_TABLET_USES_CMMD:
> + if (!acpi_evalf(ec_handle, &s, "CMMD", "d"))
> + return -EIO;
> +
> + *status = (s == TP_EC_CMMD_TABLET_MODE);
> + break;
> + default:
> + break;
> + }
>
> - *status = ((s & TP_HOTKEY_TABLET_MASK) != 0);
> return 0;
> }
>
> @@ -3127,10 +3146,14 @@ hotkey_init_tablet_mode(void)
> char *type;
> bool in_tablet_mode;
>
> - /* For X41t, X60t, X61t Tablets... */
> if (acpi_evalf(hkey_handle, &res, "MHKG", "qd")) {
> + /* For X41t, X60t, X61t Tablets... */
> tp_features.hotkey_tablet = TP_HOTKEY_TABLET_USES_MHKG;
> type = "MHKG";
> + } else if (acpi_evalf(ec_handle, &res, "CMMD", "qd")) {
> + /* For X1 Yoga (2016) */
> + tp_features.hotkey_tablet = TP_HOTKEY_TABLET_USES_CMMD;
> + type = "CMMD";
> }
>
> if (!tp_features.hotkey_tablet)
> @@ -3928,6 +3951,12 @@ static bool hotkey_notify_6xxx(const u32 hkey,
> *ignore_acpi_ev = true;
> return true;
>
> + case TP_HKEY_EV_TABLET_CHANGED:
> + tpacpi_input_send_tabletsw();
> + hotkey_tablet_mode_notify_change();
> + *send_acpi_ev = false;
> + break;
> +
> default:
> pr_warn("unknown possible thermal alarm or keyboard event received\n");
> known = false;
> --
> 2.7.4
>
>
--
Darren Hart
Intel Open Source Technology Center
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 3/3 v3] thinkpad_acpi: Add support for X1 Yoga (2016) Tablet Mode
@ 2016-11-05 19:25 ` Darren Hart
0 siblings, 0 replies; 25+ messages in thread
From: Darren Hart @ 2016-11-05 19:25 UTC (permalink / raw)
To: Lyude
Cc: ibm-acpi-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f, Daniel Martin,
Henrique de Moraes Holschuh, linux-kernel-u79uwXL29TY76Z2rM5mHXA,
platform-driver-x86-u79uwXL29TY76Z2rM5mHXA
On Mon, Oct 31, 2016 at 06:55:34PM -0400, Lyude wrote:
> For whatever reason, the X1 Yoga doesn't support the normal method of
> querying for tablet mode. Instead of providing the MHKG method under the
> hotkey handle, we're instead given the CMMD method under the EC handle.
> Values on this handle are either 0x1, laptop mode, or 0x6, tablet mode.
>
> Changes since v1:
> - Clarify kernel output when finding the tablet mode switch
> Changes since v2:
> - Rebase on top of previous patch
> - Use an enum for hotkey_tablet. This does make a bit more sense then
> just adding another flag.
> - Call hotkey_tablet_mode_notify_change() when getting TABLET_CHANGED
> event.
These go below the ---
>
> Cc: Daniel Martin <consume.noise-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
> Signed-off-by: Lyude <lyude-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
> ---
> drivers/platform/x86/thinkpad_acpi.c | 37 ++++++++++++++++++++++++++++++++----
> 1 file changed, 33 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c
> index 92e8986..4df4153 100644
> --- a/drivers/platform/x86/thinkpad_acpi.c
> +++ b/drivers/platform/x86/thinkpad_acpi.c
> @@ -190,6 +190,9 @@ enum tpacpi_hkey_event_t {
> TP_HKEY_EV_LID_OPEN = 0x5002, /* laptop lid opened */
> TP_HKEY_EV_TABLET_TABLET = 0x5009, /* tablet swivel up */
> TP_HKEY_EV_TABLET_NOTEBOOK = 0x500a, /* tablet swivel down */
> + TP_HKEY_EV_TABLET_CHANGED = 0x60c0, /* X1 Yoga (2016):
> + * enter/leave tablet mode
> + */
> TP_HKEY_EV_PEN_INSERTED = 0x500b, /* tablet pen inserted */
> TP_HKEY_EV_PEN_REMOVED = 0x500c, /* tablet pen removed */
> TP_HKEY_EV_BRGHT_CHANGED = 0x5010, /* backlight control event */
> @@ -305,6 +308,7 @@ static struct {
> enum {
> TP_HOTKEY_TABLET_NONE = 0,
> TP_HOTKEY_TABLET_USES_MHKG = 1,
> + TP_HOTKEY_TABLET_USES_CMMD = 2,
1 and 2 will follow automatically, no need to specify.
Pending Henrique's preference on inline enum or external definition.
> } hotkey_tablet;
> u32 kbdlight:1;
> u32 light:1;
> @@ -2062,6 +2066,8 @@ static void hotkey_poll_setup(const bool may_warn);
>
> /* HKEY.MHKG() return bits */
> #define TP_HOTKEY_TABLET_MASK (1 << 3)
> +/* ThinkPad X1 Yoga (2016) */
> +#define TP_EC_CMMD_TABLET_MODE 0x6
>
> static int hotkey_get_wlsw(void)
> {
> @@ -2086,10 +2092,23 @@ static int hotkey_get_tablet_mode(int *status)
> {
> int s;
>
> - if (!acpi_evalf(hkey_handle, &s, "MHKG", "d"))
> - return -EIO;
> + switch (tp_features.hotkey_tablet) {
> + case TP_HOTKEY_TABLET_USES_MHKG:
> + if (!acpi_evalf(hkey_handle, &s, "MHKG", "d"))
> + return -EIO;
> +
> + *status = ((s & TP_HOTKEY_TABLET_MASK) != 0);
> + break;
> + case TP_HOTKEY_TABLET_USES_CMMD:
> + if (!acpi_evalf(ec_handle, &s, "CMMD", "d"))
> + return -EIO;
> +
> + *status = (s == TP_EC_CMMD_TABLET_MODE);
> + break;
> + default:
> + break;
> + }
>
> - *status = ((s & TP_HOTKEY_TABLET_MASK) != 0);
> return 0;
> }
>
> @@ -3127,10 +3146,14 @@ hotkey_init_tablet_mode(void)
> char *type;
> bool in_tablet_mode;
>
> - /* For X41t, X60t, X61t Tablets... */
> if (acpi_evalf(hkey_handle, &res, "MHKG", "qd")) {
> + /* For X41t, X60t, X61t Tablets... */
> tp_features.hotkey_tablet = TP_HOTKEY_TABLET_USES_MHKG;
> type = "MHKG";
> + } else if (acpi_evalf(ec_handle, &res, "CMMD", "qd")) {
> + /* For X1 Yoga (2016) */
> + tp_features.hotkey_tablet = TP_HOTKEY_TABLET_USES_CMMD;
> + type = "CMMD";
> }
>
> if (!tp_features.hotkey_tablet)
> @@ -3928,6 +3951,12 @@ static bool hotkey_notify_6xxx(const u32 hkey,
> *ignore_acpi_ev = true;
> return true;
>
> + case TP_HKEY_EV_TABLET_CHANGED:
> + tpacpi_input_send_tabletsw();
> + hotkey_tablet_mode_notify_change();
> + *send_acpi_ev = false;
> + break;
> +
> default:
> pr_warn("unknown possible thermal alarm or keyboard event received\n");
> known = false;
> --
> 2.7.4
>
>
--
Darren Hart
Intel Open Source Technology Center
------------------------------------------------------------------------------
Developer Access Program for Intel Xeon Phi Processors
Access to Intel Xeon Phi processor-based developer platforms.
With one year of Intel Parallel Studio XE.
Training and support from Colfax.
Order your platform today. http://sdm.link/xeonphi
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 0/3] Add support for X1 Yoga (2016) Tablet Mode + refactors
2016-10-31 22:55 [PATCH 0/3] Add support for X1 Yoga (2016) Tablet Mode + refactors Lyude
` (2 preceding siblings ...)
2016-10-31 22:55 ` Lyude
@ 2016-11-01 17:25 ` Lyude Paul
3 siblings, 0 replies; 25+ messages in thread
From: Lyude Paul @ 2016-11-01 17:25 UTC (permalink / raw)
To: ibm-acpi-devel
Cc: Daniel Martin, Henrique de Moraes Holschuh, Darren Hart,
platform-driver-x86, linux-kernel
Got in touch with a friend who happened to have a X201 and had them
test the patches, so I've confirmed this doesn't break anything with
older ThinkPad tablets.
On Mon, 2016-10-31 at 18:55 -0400, Lyude wrote:
> Updated patchset for adding support for detecting tablet mode on the
> X1 Yoga
> 2016 model, along with some refactoring suggested by Daniel.
>
> Important: I realized I never actually tried testing this on any of
> the older
> Thinkpad tablets. If someone has one who is willing to test let me
> know,
> otherwise I'll test it out when I get to the office on Thursday.
>
> Signed-off-by: Lyude <lyude@redhat.com>
> Cc: Daniel Martin <consume.noise@gmail.com>
>
> Lyude (3):
> thinkpad_acpi: Move tablet detection into separate function
> thinkpad_acpi: Don't repeat ourselves in hotkey_init_tablet_mode()
> thinkpad_acpi: Add support for X1 Yoga (2016) Tablet Mode
>
> drivers/platform/x86/thinkpad_acpi.c | 88
> ++++++++++++++++++++++++++++++------
> 1 file changed, 73 insertions(+), 15 deletions(-)
>
--
Cheers,
Lyude
^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH v3 1/3] thinkpad_acpi: Move tablet detection into separate function
@ 2016-11-07 17:10 Lyude
2016-11-07 17:10 ` Lyude
0 siblings, 1 reply; 25+ messages in thread
From: Lyude @ 2016-11-07 17:10 UTC (permalink / raw)
To: ibm-acpi-devel
Cc: Lyude, Daniel Martin, Henrique de Moraes Holschuh, Darren Hart,
platform-driver-x86, linux-kernel
The hotkey events and ACPI handles used for detecting tablet mode on a
few of the newer thinkpad models (Yoga X1 and the Yoga 260 specifically)
have been changed around, so unfortunately this means we're definitely
going to need to probe for multiple types of tablet mode support. Since
the hotkey_init() is already a lot larger than it should be, let's split
up this detection into its own function to make things a little easier
to read.
As well, since we're going to have multiple types of tablet modes, make
hotkey_tablet into an enum so we can also use it to indicate the type of
tablet mode reporting the machine supports.
Suggested by Daniel Martin <consume.noise@gmail.com>
Signed-off-by: Lyude <lyude@redhat.com>
Cc: Daniel Martin <consume.noise@gmail.com>
Signed-off-by: Lyude <lyude@redhat.com>
---
Changes since v1:
- Don't use bool for in_tablet_mode (fixes complaints from kbuild test
robot)
Changes since v2:
- Move changes out of git message
- Fix commit message
- Fix variable ordering
- Remove explicit value assignment in hotkey_tablet enum
drivers/platform/x86/thinkpad_acpi.c | 50 +++++++++++++++++++++++++++---------
1 file changed, 38 insertions(+), 12 deletions(-)
diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c
index b65ce75..dfa1af8 100644
--- a/drivers/platform/x86/thinkpad_acpi.c
+++ b/drivers/platform/x86/thinkpad_acpi.c
@@ -302,7 +302,10 @@ static struct {
u32 hotkey:1;
u32 hotkey_mask:1;
u32 hotkey_wlsw:1;
- u32 hotkey_tablet:1;
+ enum {
+ TP_HOTKEY_TABLET_NONE = 0,
+ TP_HOTKEY_TABLET_USES_MHKG,
+ } hotkey_tablet;
u32 kbdlight:1;
u32 light:1;
u32 light_status:1;
@@ -3117,6 +3120,34 @@ static const struct tpacpi_quirk tpacpi_hotkey_qtable[] __initconst = {
typedef u16 tpacpi_keymap_entry_t;
typedef tpacpi_keymap_entry_t tpacpi_keymap_t[TPACPI_HOTKEY_MAP_LEN];
+static int
+hotkey_init_tablet_mode(void)
+{
+ bool in_tablet_mode;
+ char *type;
+ int res;
+
+ /* For X41t, X60t, X61t Tablets... */
+ if (acpi_evalf(hkey_handle, &res, "MHKG", "qd")) {
+ tp_features.hotkey_tablet = TP_HOTKEY_TABLET_USES_MHKG;
+ in_tablet_mode = !!(res & TP_HOTKEY_TABLET_MASK);
+ type = "MHKG";
+ }
+
+ if (!tp_features.hotkey_tablet)
+ return 0;
+
+ pr_info("Tablet mode switch found (type: %s), currently in %s mode\n",
+ type, in_tablet_mode ? "tablet" : "laptop");
+
+ res = add_to_attr_set(hotkey_dev_attributes,
+ &dev_attr_hotkey_tablet_mode.attr);
+ if (res)
+ return -1;
+
+ return in_tablet_mode;
+}
+
static int __init hotkey_init(struct ibm_init_struct *iibm)
{
/* Requirements for changing the default keymaps:
@@ -3464,17 +3495,6 @@ static int __init hotkey_init(struct ibm_init_struct *iibm)
res = add_to_attr_set(hotkey_dev_attributes,
&dev_attr_hotkey_radio_sw.attr);
- /* For X41t, X60t, X61t Tablets... */
- if (!res && acpi_evalf(hkey_handle, &status, "MHKG", "qd")) {
- tp_features.hotkey_tablet = 1;
- tabletsw_state = !!(status & TP_HOTKEY_TABLET_MASK);
- pr_info("possible tablet mode switch found; "
- "ThinkPad in %s mode\n",
- (tabletsw_state) ? "tablet" : "laptop");
- res = add_to_attr_set(hotkey_dev_attributes,
- &dev_attr_hotkey_tablet_mode.attr);
- }
-
if (!res)
res = register_attr_set_with_sysfs(
hotkey_dev_attributes,
@@ -3482,6 +3502,12 @@ static int __init hotkey_init(struct ibm_init_struct *iibm)
if (res)
goto err_exit;
+ res = hotkey_init_tablet_mode();
+ if (res < 0)
+ goto err_exit;
+
+ tabletsw_state = res;
+
/* Set up key map */
hotkey_keycode_map = kmalloc(TPACPI_HOTKEY_MAP_SIZE,
GFP_KERNEL);
--
2.7.4
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH 2/3] thinkpad_acpi: Don't repeat ourselves in hotkey_init_tablet_mode()
@ 2016-11-07 17:10 ` Lyude
0 siblings, 0 replies; 25+ messages in thread
From: Lyude @ 2016-11-07 17:10 UTC (permalink / raw)
To: ibm-acpi-devel
Cc: Lyude, Daniel Martin, Henrique de Moraes Holschuh, Darren Hart,
platform-driver-x86, linux-kernel
There's no need to have multiple copies of the logic we use for checking
whether or not we're in tablet mode, so just use
hotkey_get_tablet_mode() when checking the initial state in
hotkey_init_tablet_mode().
Cc: Daniel Martin <consume.noise@gmail.com>
Signed-off-by: Lyude <lyude@redhat.com>
---
drivers/platform/x86/thinkpad_acpi.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c
index dfa1af8..ad93c41 100644
--- a/drivers/platform/x86/thinkpad_acpi.c
+++ b/drivers/platform/x86/thinkpad_acpi.c
@@ -3130,13 +3130,16 @@ hotkey_init_tablet_mode(void)
/* For X41t, X60t, X61t Tablets... */
if (acpi_evalf(hkey_handle, &res, "MHKG", "qd")) {
tp_features.hotkey_tablet = TP_HOTKEY_TABLET_USES_MHKG;
- in_tablet_mode = !!(res & TP_HOTKEY_TABLET_MASK);
type = "MHKG";
}
if (!tp_features.hotkey_tablet)
return 0;
+ res = hotkey_get_tablet_mode(&in_tablet_mode);
+ if (res)
+ return res;
+
pr_info("Tablet mode switch found (type: %s), currently in %s mode\n",
type, in_tablet_mode ? "tablet" : "laptop");
--
2.7.4
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH 2/3] thinkpad_acpi: Don't repeat ourselves in hotkey_init_tablet_mode()
@ 2016-11-07 17:10 ` Lyude
0 siblings, 0 replies; 25+ messages in thread
From: Lyude @ 2016-11-07 17:10 UTC (permalink / raw)
To: ibm-acpi-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f
Cc: Daniel Martin, Lyude, Henrique de Moraes Holschuh,
linux-kernel-u79uwXL29TY76Z2rM5mHXA,
platform-driver-x86-u79uwXL29TY76Z2rM5mHXA, Darren Hart
There's no need to have multiple copies of the logic we use for checking
whether or not we're in tablet mode, so just use
hotkey_get_tablet_mode() when checking the initial state in
hotkey_init_tablet_mode().
Cc: Daniel Martin <consume.noise-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Signed-off-by: Lyude <lyude-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
---
drivers/platform/x86/thinkpad_acpi.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c
index dfa1af8..ad93c41 100644
--- a/drivers/platform/x86/thinkpad_acpi.c
+++ b/drivers/platform/x86/thinkpad_acpi.c
@@ -3130,13 +3130,16 @@ hotkey_init_tablet_mode(void)
/* For X41t, X60t, X61t Tablets... */
if (acpi_evalf(hkey_handle, &res, "MHKG", "qd")) {
tp_features.hotkey_tablet = TP_HOTKEY_TABLET_USES_MHKG;
- in_tablet_mode = !!(res & TP_HOTKEY_TABLET_MASK);
type = "MHKG";
}
if (!tp_features.hotkey_tablet)
return 0;
+ res = hotkey_get_tablet_mode(&in_tablet_mode);
+ if (res)
+ return res;
+
pr_info("Tablet mode switch found (type: %s), currently in %s mode\n",
type, in_tablet_mode ? "tablet" : "laptop");
--
2.7.4
------------------------------------------------------------------------------
Developer Access Program for Intel Xeon Phi Processors
Access to Intel Xeon Phi processor-based developer platforms.
With one year of Intel Parallel Studio XE.
Training and support from Colfax.
Order your platform today. http://sdm.link/xeonphi
^ permalink raw reply related [flat|nested] 25+ messages in thread
* Re: [PATCH 2/3] thinkpad_acpi: Don't repeat ourselves in hotkey_init_tablet_mode()
@ 2016-11-08 11:08 ` Henrique de Moraes Holschuh
0 siblings, 0 replies; 25+ messages in thread
From: Henrique de Moraes Holschuh @ 2016-11-08 11:08 UTC (permalink / raw)
To: Lyude
Cc: ibm-acpi-devel, Daniel Martin, Darren Hart, platform-driver-x86,
linux-kernel
On Mon, 07 Nov 2016, Lyude wrote:
> There's no need to have multiple copies of the logic we use for checking
> whether or not we're in tablet mode, so just use
> hotkey_get_tablet_mode() when checking the initial state in
> hotkey_init_tablet_mode().
...
> @@ -3130,13 +3130,16 @@ hotkey_init_tablet_mode(void)
> /* For X41t, X60t, X61t Tablets... */
> if (acpi_evalf(hkey_handle, &res, "MHKG", "qd")) {
> tp_features.hotkey_tablet = TP_HOTKEY_TABLET_USES_MHKG;
> - in_tablet_mode = !!(res & TP_HOTKEY_TABLET_MASK);
> type = "MHKG";
> }
>
> if (!tp_features.hotkey_tablet)
> return 0;
>
> + res = hotkey_get_tablet_mode(&in_tablet_mode);
> + if (res)
> + return res;
> +
Won't this way of doing things cause the ACPI methods to be called
twice in a row?
The hotkey_init_tablet_mode() code does mode detection, and thus
hotkey_get_tablet_mode() must be kept in sync with it *anyway* (and not
the opposite), so it doesn't look like a very relevant maintenance
burden...
--
Henrique Holschuh
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 2/3] thinkpad_acpi: Don't repeat ourselves in hotkey_init_tablet_mode()
@ 2016-11-08 11:08 ` Henrique de Moraes Holschuh
0 siblings, 0 replies; 25+ messages in thread
From: Henrique de Moraes Holschuh @ 2016-11-08 11:08 UTC (permalink / raw)
To: Lyude
Cc: ibm-acpi-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f, Daniel Martin,
platform-driver-x86-u79uwXL29TY76Z2rM5mHXA,
linux-kernel-u79uwXL29TY76Z2rM5mHXA, Darren Hart
On Mon, 07 Nov 2016, Lyude wrote:
> There's no need to have multiple copies of the logic we use for checking
> whether or not we're in tablet mode, so just use
> hotkey_get_tablet_mode() when checking the initial state in
> hotkey_init_tablet_mode().
...
> @@ -3130,13 +3130,16 @@ hotkey_init_tablet_mode(void)
> /* For X41t, X60t, X61t Tablets... */
> if (acpi_evalf(hkey_handle, &res, "MHKG", "qd")) {
> tp_features.hotkey_tablet = TP_HOTKEY_TABLET_USES_MHKG;
> - in_tablet_mode = !!(res & TP_HOTKEY_TABLET_MASK);
> type = "MHKG";
> }
>
> if (!tp_features.hotkey_tablet)
> return 0;
>
> + res = hotkey_get_tablet_mode(&in_tablet_mode);
> + if (res)
> + return res;
> +
Won't this way of doing things cause the ACPI methods to be called
twice in a row?
The hotkey_init_tablet_mode() code does mode detection, and thus
hotkey_get_tablet_mode() must be kept in sync with it *anyway* (and not
the opposite), so it doesn't look like a very relevant maintenance
burden...
--
Henrique Holschuh
------------------------------------------------------------------------------
Developer Access Program for Intel Xeon Phi Processors
Access to Intel Xeon Phi processor-based developer platforms.
With one year of Intel Parallel Studio XE.
Training and support from Colfax.
Order your platform today. http://sdm.link/xeonphi
^ permalink raw reply [flat|nested] 25+ messages in thread
end of thread, other threads:[~2016-11-08 11:10 UTC | newest]
Thread overview: 25+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-10-31 22:55 [PATCH 0/3] Add support for X1 Yoga (2016) Tablet Mode + refactors Lyude
2016-10-31 22:55 ` [PATCH 1/3] thinkpad_acpi: Move tablet detection into separate function Lyude
2016-10-31 22:55 ` Lyude
2016-11-05 19:17 ` Darren Hart
2016-11-05 19:17 ` Darren Hart
2016-10-31 22:55 ` [PATCH 2/3] thinkpad_acpi: Don't repeat ourselves in hotkey_init_tablet_mode() Lyude
2016-10-31 22:55 ` Lyude
2016-10-31 23:20 ` kbuild test robot
2016-10-31 23:20 ` kbuild test robot
2016-10-31 23:49 ` kbuild test robot
2016-10-31 23:49 ` kbuild test robot
2016-10-31 23:56 ` [PATCH v2 1/3] thinkpad_acpi: Move tablet detection into separate function Lyude
2016-10-31 23:56 ` Lyude
2016-11-05 19:30 ` Darren Hart
2016-11-05 19:30 ` Darren Hart
2016-11-06 3:19 ` Henrique de Moraes Holschuh
2016-10-31 22:55 ` [PATCH 3/3 v3] thinkpad_acpi: Add support for X1 Yoga (2016) Tablet Mode Lyude
2016-10-31 22:55 ` Lyude
2016-11-05 19:25 ` Darren Hart
2016-11-05 19:25 ` Darren Hart
2016-11-01 17:25 ` [PATCH 0/3] Add support for X1 Yoga (2016) Tablet Mode + refactors Lyude Paul
2016-11-07 17:10 [PATCH v3 1/3] thinkpad_acpi: Move tablet detection into separate function Lyude
2016-11-07 17:10 ` [PATCH 2/3] thinkpad_acpi: Don't repeat ourselves in hotkey_init_tablet_mode() Lyude
2016-11-07 17:10 ` Lyude
2016-11-08 11:08 ` Henrique de Moraes Holschuh
2016-11-08 11:08 ` Henrique de Moraes Holschuh
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.