All of lore.kernel.org
 help / color / mirror / Atom feed
* [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 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

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.