All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mark Pearson <markpearson-6jq1YtArVR3QT0dZR+AlfA@public.gmane.org>
To: markpearson-6jq1YtArVR3QT0dZR+AlfA@public.gmane.org
Cc: Sugumaran <slacshiminar-6jq1YtArVR3QT0dZR+AlfA@public.gmane.org>,
	ibm-acpi-N3TV7GIv+o9fyO9Q7EP/yw@public.gmane.org,
	platform-driver-x86-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	ibm-acpi-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org,
	Nitin Joshi <njoshi1-6jq1YtArVR3QT0dZR+AlfA@public.gmane.org>,
	bnocera-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org
Subject: [PATCH v4] platform/x86: thinkpad_acpi: lap or desk mode interface
Date: Mon, 29 Jun 2020 15:17:48 -0400	[thread overview]
Message-ID: <20200629191748.3859-1-markpearson@lenovo.com> (raw)
In-Reply-To: <markpearson-6jq1YtArVR3QT0dZR+AlfA@public.gmane.org>

  Newer Lenovo Thinkpad platforms have support to identify whether the
  system is on-lap or not using an ACPI DYTC event from the firmware.

  This patch provides the ability to retrieve the current mode via sysfs
  entrypoints and will be used by userspace for thermal mode and WWAN
  functionality

Co-developed-by: Nitin Joshi <njoshi1-6jq1YtArVR3QT0dZR+AlfA@public.gmane.org>
Signed-off-by: Nitin Joshi <njoshi1-6jq1YtArVR3QT0dZR+AlfA@public.gmane.org>
Reviewed-by: Sugumaran <slacshiminar-6jq1YtArVR3QT0dZR+AlfA@public.gmane.org>
Signed-off-by: Mark Pearson <markpearson-6jq1YtArVR3QT0dZR+AlfA@public.gmane.org>
---
Changes in v4:
 - Correct hotkey event comment as we're handling event
 - Remove unnecessary check in dytc_lapmode_refresh
Changes in v3:
- Fixed inaccurate comments
- Used BIT macro to check lapmode bit setting as recommended and update
  define name
- Check for new_state == dytc_lapmode in dytc_lapmode_refresh

Changes in v2:
- cleaned up initialisation sequence to be cleaner and avoid spamming
  platforms that don't have DYTC with warning message. Tested on P52
- Adding platform-driver-x86 mailing list for review as requested

 drivers/platform/x86/thinkpad_acpi.c | 111 ++++++++++++++++++++++++++-
 1 file changed, 109 insertions(+), 2 deletions(-)

diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c
index 0f704484ae1d..859b40c7113e 100644
--- a/drivers/platform/x86/thinkpad_acpi.c
+++ b/drivers/platform/x86/thinkpad_acpi.c
@@ -4047,8 +4047,8 @@ static bool hotkey_notify_6xxx(const u32 hkey,
 		return true;
 	case TP_HKEY_EV_THM_CSM_COMPLETED:
 		pr_debug("EC reports: Thermal Control Command set completed (DYTC)\n");
-		/* recommended action: do nothing, we don't have
-		 * Lenovo ATM information */
+		/* Thermal event - pass on to event handler */
+		tpacpi_driver_event(hkey);
 		return true;
 	case TP_HKEY_EV_THM_TRANSFM_CHANGED:
 		pr_debug("EC reports: Thermal Transformation changed (GMTS)\n");
@@ -9811,6 +9811,105 @@ static struct ibm_struct lcdshadow_driver_data = {
 	.write = lcdshadow_write,
 };
 
+/*************************************************************************
+ * DYTC subdriver, for the Lenovo lapmode feature
+ */
+
+#define DYTC_CMD_GET          2 /* To get current IC function and mode */
+#define DYTC_GET_LAPMODE_BIT 17 /* Set when in lapmode */
+
+static int  dytc_lapmode;
+static void dytc_lapmode_notify_change(void)
+{
+	sysfs_notify(&tpacpi_pdev->dev.kobj, NULL,
+			"dytc_lapmode");
+}
+
+static int dytc_command(int command)
+{
+	acpi_handle dytc_handle;
+	int output;
+
+	if (ACPI_FAILURE(acpi_get_handle(hkey_handle, "DYTC", &dytc_handle))) {
+		/* Platform doesn't support DYTC */
+		return -ENODEV;
+	}
+	if (!acpi_evalf(dytc_handle, &output, NULL, "dd", command))
+		return -EIO;
+	return output;
+}
+
+static int dytc_lapmode_get(void)
+{
+	int output;
+
+	output = dytc_command(DYTC_CMD_GET);
+	if ((output == -ENODEV) || (output == -EIO))
+		return output;
+
+	return (output & BIT(DYTC_GET_LAPMODE_BIT) ? 1 : 0);
+}
+
+static void dytc_lapmode_refresh(void)
+{
+	int new_state;
+
+	new_state = dytc_lapmode_get();
+	if ((new_state == -ENODEV) || (new_state == -EIO) || (new_state == dytc_lapmode))
+		return;
+
+	dytc_lapmode = new_state;
+	dytc_lapmode_notify_change();
+}
+
+/* sysfs lapmode entry */
+static ssize_t dytc_lapmode_show(struct device *dev,
+					struct device_attribute *attr,
+					char *buf)
+{
+	if (dytc_lapmode < 0)
+		return dytc_lapmode;
+
+	return snprintf(buf, PAGE_SIZE, "%d\n", dytc_lapmode);
+}
+
+static DEVICE_ATTR_RO(dytc_lapmode);
+
+static struct attribute *dytc_attributes[] = {
+	&dev_attr_dytc_lapmode.attr,
+	NULL
+};
+
+static const struct attribute_group dytc_attr_group = {
+	.attrs = dytc_attributes,
+};
+
+static int tpacpi_dytc_init(struct ibm_init_struct *iibm)
+{
+	int res;
+
+	dytc_lapmode = dytc_lapmode_get();
+
+	if (dytc_lapmode < 0 && dytc_lapmode != -ENODEV)
+		return dytc_lapmode;
+
+	res = sysfs_create_group(&tpacpi_pdev->dev.kobj,
+				&dytc_attr_group);
+
+	return res;
+}
+
+static void dytc_exit(void)
+{
+	sysfs_remove_group(&tpacpi_pdev->dev.kobj,
+			&dytc_attr_group);
+}
+
+static struct ibm_struct dytc_driver_data = {
+	.name = "dytc",
+	.exit = dytc_exit
+};
+
 /****************************************************************************
  ****************************************************************************
  *
@@ -9858,6 +9957,10 @@ static void tpacpi_driver_event(const unsigned int hkey_event)
 
 		mutex_unlock(&kbdlight_mutex);
 	}
+
+	if (hkey_event == TP_HKEY_EV_THM_CSM_COMPLETED)
+		dytc_lapmode_refresh();
+
 }
 
 static void hotkey_driver_event(const unsigned int scancode)
@@ -10296,6 +10399,10 @@ static struct ibm_init_struct ibms_init[] __initdata = {
 		.init = tpacpi_lcdshadow_init,
 		.data = &lcdshadow_driver_data,
 	},
+	{
+		.init = tpacpi_dytc_init,
+		.data = &dytc_driver_data,
+	},
 };
 
 static int __init set_ibm_param(const char *val, const struct kernel_param *kp)
-- 
2.26.2

  parent reply	other threads:[~2020-06-29 19:17 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <markpearson@lenovo.com>
2020-06-02 22:56 ` [PATCH v2] platform/x86: thinkpad_acpi: lap or desk mode interface Mark Pearson
2020-06-17 18:09 ` [RESEND PATCH " Mark Pearson
     [not found]   ` <1905013469.24563660.1592574774373.JavaMail.zimbra@redhat.com>
     [not found]     ` <1905013469.24563660.1592574774373.JavaMail.zimbra-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2020-06-19 15:02       ` [External] " Mark Pearson
2020-06-24  2:08 ` [PATCH v3] " Mark Pearson
2020-06-29 19:17 ` Mark Pearson [this message]
     [not found]   ` <20200629191748.3859-1-markpearson-6jq1YtArVR3QT0dZR+AlfA@public.gmane.org>
2020-07-01  9:45     ` [PATCH v4] " Bastien Nocera
     [not found]       ` <732277929.1313334.1593596757447.JavaMail.zimbra-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2020-07-27  2:51         ` [External] " Nitin Joshi1
     [not found]           ` <SG2PR03MB2718DFC08C4ECF7816D1B4E48C720-ePYYJTVkT3RfCKvAoM4nXq82SN/2zMuYvxpqHgZTriW3zl9H0oFU5g@public.gmane.org>
2020-07-27 11:03             ` Bastien Nocera
     [not found]               ` <321690127.4797880.1595847834329.JavaMail.zimbra-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2020-07-27 12:49                 ` Nitin Joshi1
2020-07-02  9:29     ` Andy Shevchenko
     [not found]       ` <CAHp75VeO5SzYs=kRh+BV_vydO7PTPLkmu8aiYXvSJFTewSTYwA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2020-07-02 10:44         ` [External] " Mark Pearson
     [not found]           ` <7d0e1dcc-7285-71e1-7125-604cb2630595-6jq1YtArVR3QT0dZR+AlfA@public.gmane.org>
2020-07-02 10:56             ` Andy Shevchenko
2020-07-03  1:23 ` [PATCH v5] " Mark Pearson
     [not found]   ` <20200703012353.26413-1-markpearson-6jq1YtArVR3QT0dZR+AlfA@public.gmane.org>
2020-07-09 18:02     ` Andy Shevchenko
     [not found]       ` <CAHp75Vcs15wGCzwW8Pq7AXyqQnvnopNdFP1nDE0nf+ZTz=9zFw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2020-07-10  8:00         ` Hans de Goede
     [not found]           ` <7c1698a6-ebd6-553d-a686-d9bd4e5a5e99-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2020-07-10 12:20             ` Andy Shevchenko
     [not found]               ` <CAHp75Ve-qOs8VosoxEaHH1EnK-r16Sx0ki3uj14yZJWyuwC88w-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2020-07-10 12:28                 ` [External] " Mark Pearson
2020-07-10 20:39     ` Andy Shevchenko
2020-07-15 23:52 ` [PATCH] platform/x86: thinkpad_acpi: psensor interface Mark Pearson
     [not found]   ` <20200715235242.4934-1-markpearson-6jq1YtArVR3QT0dZR+AlfA@public.gmane.org>
2020-07-27 10:34     ` Andy Shevchenko
2020-07-28  3:51       ` [External] " Nitin Joshi1
     [not found]         ` <PU1PR03MB2716FE7EF1BF12E5B9EC25188C730-PIfHAIETUCsWqO6DXxnA3a82SN/2zMuYvxpqHgZTriW3zl9H0oFU5g@public.gmane.org>
2020-08-07 20:40           ` Mark Pearson
2020-07-22 17:11 ` [PATCH] platform/x86: thinkpad_acpi: performance mode interface Mark Pearson
     [not found]   ` <20200722171108.65185-1-markpearson-6jq1YtArVR3QT0dZR+AlfA@public.gmane.org>
2020-07-22 18:46     ` Limonciello, Mario
     [not found]       ` <DM6PR19MB263650F7DC4B6680A5EFC5DAFA790-JELcaX3dgTY1BKDJOnGuQNvXXbHMiUzJvxpqHgZTriW3zl9H0oFU5g@public.gmane.org>
2020-07-22 19:29         ` [External] " Mark Pearson
     [not found]           ` <b79e0359-536d-f496-a01e-fe4c4b7796cc-6jq1YtArVR3QT0dZR+AlfA@public.gmane.org>
2020-07-22 19:46             ` Limonciello, Mario
     [not found]               ` <DM6PR19MB26360DE8FCA56BC132644F98FA790-JELcaX3dgTY1BKDJOnGuQNvXXbHMiUzJvxpqHgZTriW3zl9H0oFU5g@public.gmane.org>
2020-07-23  0:34                 ` Mark Pearson
     [not found]                   ` <e14aa227-493b-4206-eaef-81874512166f-6jq1YtArVR3QT0dZR+AlfA@public.gmane.org>
2020-07-23  1:36                     ` Limonciello, Mario
2020-08-12 18:53 ` [PATCH v2] platform/x86: thinkpad_acpi: psensor interface Mark Pearson
2020-08-18 19:15 ` [PATCH v3] " Mark Pearson
2020-08-21 17:53 ` [PATCH v2] platform/x86: thinkpad_acpi: performance mode interface Mark Pearson
     [not found]   ` <20200821175310.335873-1-markpearson-6jq1YtArVR3QT0dZR+AlfA@public.gmane.org>
2020-08-21 19:15     ` Limonciello, Mario
     [not found]       ` <DM6PR19MB2636F1CFCE1E386D6E793E25FA5B0-JELcaX3dgTY1BKDJOnGuQNvXXbHMiUzJvxpqHgZTriW3zl9H0oFU5g@public.gmane.org>
2020-08-21 19:35         ` [External] " Mark Pearson
     [not found]           ` <1806c4ec-6788-bcc7-7e09-8e5274d2b9d5-6jq1YtArVR3QT0dZR+AlfA@public.gmane.org>
2020-08-21 20:00             ` Limonciello, Mario
     [not found]               ` <DM6PR19MB26369308415B8235B3C9997EFA5B0-JELcaX3dgTY1BKDJOnGuQNvXXbHMiUzJvxpqHgZTriW3zl9H0oFU5g@public.gmane.org>
2020-08-21 20:06                 ` Mark Pearson
     [not found]                   ` <9e0c14a9-3b24-4b64-6d9e-b312d28dfd44-6jq1YtArVR3QT0dZR+AlfA@public.gmane.org>
2020-08-21 20:43                     ` Limonciello, Mario
     [not found]                       ` <DM6PR19MB263621A07F59D91C8E2F7205FA5B0-JELcaX3dgTY1BKDJOnGuQNvXXbHMiUzJvxpqHgZTriW3zl9H0oFU5g@public.gmane.org>
2020-08-22  1:31                         ` Mark Pearson
     [not found]                           ` <52fc84b9-f87d-c91d-4d24-1db768c5c812-6jq1YtArVR3QT0dZR+AlfA@public.gmane.org>
2020-08-24 15:20                             ` Limonciello, Mario
2020-09-16  9:31     ` Benjamin Berg
     [not found]       ` <11594528cfb96e2eed8fe0f27a4ecc1d60803432.camel-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2020-09-16 11:15         ` [External] " Mark Pearson
2020-09-17 11:39   ` Hans de Goede
2020-09-17 13:48     ` [External] " Mark Pearson

Reply instructions:

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

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

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

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

  git send-email \
    --in-reply-to=20200629191748.3859-1-markpearson@lenovo.com \
    --to=markpearson-6jq1ytarvr3qt0dzr+alfa@public.gmane.org \
    --cc=bnocera-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
    --cc=ibm-acpi-N3TV7GIv+o9fyO9Q7EP/yw@public.gmane.org \
    --cc=ibm-acpi-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org \
    --cc=njoshi1-6jq1YtArVR3QT0dZR+AlfA@public.gmane.org \
    --cc=platform-driver-x86-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=slacshiminar-6jq1YtArVR3QT0dZR+AlfA@public.gmane.org \
    /path/to/YOUR_REPLY

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

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