All of lore.kernel.org
 help / color / mirror / Atom feed
From: Len Brown <len.brown@intel.com>
To: linux-acpi@vger.kernel.org
Cc: Henrique de Moraes Holschuh <hmh@hmh.eng.br>,
	Len Brown <len.brown@intel.com>
Subject: [PATCH 57/77] ACPI: thinkpad-acpi: store ThinkPad model information
Date: Sun, 22 Jul 2007 05:14:42 -0400	[thread overview]
Message-ID: <11850957621605-git-send-email-len.brown@intel.com> (raw)
Message-ID: <d5a2f2f1d68e2da538ac28540cddd9ccc733b001.1185095456.git.len.brown@intel.com> (raw)
In-Reply-To: <1185095761326-git-send-email-len.brown@intel.com>
In-Reply-To: <a1f0eff21edac1bd87e397f56c4258b9611b5a50.1185095456.git.len.brown@intel.com>

From: Henrique de Moraes Holschuh <hmh@hmh.eng.br>

Keep note of ThinkPad model, BIOS and EC firmware information, and log it
on startup.  Makes for far more readable code in places, too.

This patch also adds Lenovo's PCI ID to the pci ids table.

Signed-off-by: Henrique de Moraes Holschuh <hmh@hmh.eng.br>
Signed-off-by: Len Brown <len.brown@intel.com>
---
 drivers/misc/thinkpad_acpi.c |   98 ++++++++++++++++++++++++++++++------------
 drivers/misc/thinkpad_acpi.h |   17 ++++++-
 include/linux/pci_ids.h      |    2 +
 3 files changed, 87 insertions(+), 30 deletions(-)

diff --git a/drivers/misc/thinkpad_acpi.c b/drivers/misc/thinkpad_acpi.c
index 44aa8c9..99500af 100644
--- a/drivers/misc/thinkpad_acpi.c
+++ b/drivers/misc/thinkpad_acpi.c
@@ -717,9 +717,19 @@ static int __init thinkpad_acpi_driver_init(struct ibm_init_struct *iibm)
 	printk(IBM_INFO "%s v%s\n", IBM_DESC, IBM_VERSION);
 	printk(IBM_INFO "%s\n", IBM_URL);
 
-	if (ibm_thinkpad_ec_found)
-		printk(IBM_INFO "ThinkPad EC firmware %s\n",
-		       ibm_thinkpad_ec_found);
+	printk(IBM_INFO "ThinkPad BIOS %s, EC %s\n",
+		(thinkpad_id.bios_version_str) ?
+			thinkpad_id.bios_version_str : "unknown",
+		(thinkpad_id.ec_version_str) ?
+			thinkpad_id.ec_version_str : "unknown");
+
+	if (thinkpad_id.vendor && thinkpad_id.model_str)
+		printk(IBM_INFO "%s %s\n",
+			(thinkpad_id.vendor == PCI_VENDOR_ID_IBM) ?
+				"IBM" : ((thinkpad_id.vendor ==
+						PCI_VENDOR_ID_LENOVO) ?
+					"Lenovo" : "Unknown vendor"),
+			thinkpad_id.model_str);
 
 	return 0;
 }
@@ -2648,7 +2658,7 @@ static int __init thermal_init(struct ibm_init_struct *iibm)
 
 	acpi_tmp7 = acpi_evalf(ec_handle, NULL, "TMP7", "qv");
 
-	if (ibm_thinkpad_ec_found && experimental) {
+	if (thinkpad_id.ec_model && experimental) {
 		/*
 		 * Direct EC access mode: sensors at registers
 		 * 0x78-0x7F, 0xC0-0xC7.  Registers return 0x00 for
@@ -3532,20 +3542,19 @@ static int __init fan_init(struct ibm_init_struct *iibm)
 			 * Enable for TP-1Y (T43), TP-78 (R51e),
 			 * TP-76 (R52), TP-70 (T43, R52), which are known
 			 * to be buggy. */
-			if (fan_control_initial_status == 0x07 &&
-			    ibm_thinkpad_ec_found &&
-			    ((ibm_thinkpad_ec_found[0] == '1' &&
-			      ibm_thinkpad_ec_found[1] == 'Y') ||
-			     (ibm_thinkpad_ec_found[0] == '7' &&
-			      (ibm_thinkpad_ec_found[1] == '6' ||
-			       ibm_thinkpad_ec_found[1] == '8' ||
-			       ibm_thinkpad_ec_found[1] == '0'))
-			    )) {
-				printk(IBM_NOTICE
-				       "fan_init: initial fan status is "
-				       "unknown, assuming it is in auto "
-				       "mode\n");
-				tp_features.fan_ctrl_status_undef = 1;
+			if (fan_control_initial_status == 0x07) {
+				switch (thinkpad_id.ec_model) {
+				case 0x5931: /* TP-1Y */
+				case 0x3837: /* TP-78 */
+				case 0x3637: /* TP-76 */
+				case 0x3037: /* TP-70 */
+					printk(IBM_NOTICE
+					       "fan_init: initial fan status is "
+					       "unknown, assuming it is in auto "
+					       "mode\n");
+					tp_features.fan_ctrl_status_undef = 1;
+					;;
+				}
 			}
 		} else {
 			printk(IBM_ERR
@@ -4279,13 +4288,30 @@ static void ibm_exit(struct ibm_struct *ibm)
 
 /* Probing */
 
-static char *ibm_thinkpad_ec_found;
-
-static char* __init check_dmi_for_ec(void)
+static void __init get_thinkpad_model_data(struct thinkpad_id_data *tp)
 {
 	struct dmi_device *dev = NULL;
 	char ec_fw_string[18];
 
+	if (!tp)
+		return;
+
+	memset(tp, 0, sizeof(*tp));
+
+	if (dmi_name_in_vendors("IBM"))
+		tp->vendor = PCI_VENDOR_ID_IBM;
+	else if (dmi_name_in_vendors("LENOVO"))
+		tp->vendor = PCI_VENDOR_ID_LENOVO;
+	else
+		return;
+
+	tp->bios_version_str = kstrdup(dmi_get_system_info(DMI_BIOS_VERSION),
+					GFP_KERNEL);
+	if (!tp->bios_version_str)
+		return;
+	tp->bios_model = tp->bios_version_str[0]
+			 | (tp->bios_version_str[1] << 8);
+
 	/*
 	 * ThinkPad T23 or newer, A31 or newer, R50e or newer,
 	 * X32 or newer, all Z series;  Some models must have an
@@ -4299,10 +4325,20 @@ static char* __init check_dmi_for_ec(void)
 			   ec_fw_string) == 1) {
 			ec_fw_string[sizeof(ec_fw_string) - 1] = 0;
 			ec_fw_string[strcspn(ec_fw_string, " ]")] = 0;
-			return kstrdup(ec_fw_string, GFP_KERNEL);
+
+			tp->ec_version_str = kstrdup(ec_fw_string, GFP_KERNEL);
+			tp->ec_model = ec_fw_string[0]
+					| (ec_fw_string[1] << 8);
+			break;
 		}
 	}
-	return NULL;
+
+	tp->model_str = kstrdup(dmi_get_system_info(DMI_PRODUCT_VERSION),
+					GFP_KERNEL);
+	if (strnicmp(tp->model_str, "ThinkPad", 8) != 0) {
+		kfree(tp->model_str);
+		tp->model_str = NULL;
+	}
 }
 
 static int __init probe_for_thinkpad(void)
@@ -4316,7 +4352,7 @@ static int __init probe_for_thinkpad(void)
 	 * Non-ancient models have better DMI tagging, but very old models
 	 * don't.
 	 */
-	is_thinkpad = dmi_name_in_vendors("ThinkPad");
+	is_thinkpad = (thinkpad_id.model_str != NULL);
 
 	/* ec is required because many other handles are relative to it */
 	IBM_ACPIHANDLE_INIT(ec);
@@ -4332,7 +4368,7 @@ static int __init probe_for_thinkpad(void)
 	 * false positives a damn great deal
 	 */
 	if (!is_thinkpad)
-		is_thinkpad = dmi_name_in_vendors("IBM");
+		is_thinkpad = (thinkpad_id.vendor == PCI_VENDOR_ID_IBM);
 
 	if (!is_thinkpad && !force_load)
 		return -ENODEV;
@@ -4475,12 +4511,16 @@ static int __init thinkpad_acpi_module_init(void)
 	int ret, i;
 
 	/* Driver-level probe */
+
+	get_thinkpad_model_data(&thinkpad_id);
 	ret = probe_for_thinkpad();
-	if (ret)
+	if (ret) {
+		thinkpad_acpi_module_exit();
 		return ret;
+	}
 
 	/* Driver initialization */
-	ibm_thinkpad_ec_found = check_dmi_for_ec();
+
 	IBM_ACPIHANDLE_INIT(ecrd);
 	IBM_ACPIHANDLE_INIT(ecwr);
 
@@ -4590,7 +4630,9 @@ static void thinkpad_acpi_module_exit(void)
 	if (proc_dir)
 		remove_proc_entry(IBM_PROC_DIR, acpi_root_dir);
 
-	kfree(ibm_thinkpad_ec_found);
+	kfree(thinkpad_id.bios_version_str);
+	kfree(thinkpad_id.ec_version_str);
+	kfree(thinkpad_id.model_str);
 }
 
 module_init(thinkpad_acpi_module_init);
diff --git a/drivers/misc/thinkpad_acpi.h b/drivers/misc/thinkpad_acpi.h
index fee0421..09b2282 100644
--- a/drivers/misc/thinkpad_acpi.h
+++ b/drivers/misc/thinkpad_acpi.h
@@ -175,9 +175,7 @@ static void tpacpi_remove_driver_attributes(struct device_driver *drv);
 static int experimental;
 static u32 dbg_level;
 static int force_load;
-static char *ibm_thinkpad_ec_found;
 
-static char* check_dmi_for_ec(void);
 static int thinkpad_acpi_module_init(void);
 static void thinkpad_acpi_module_exit(void);
 
@@ -244,6 +242,21 @@ static struct {
 	u16 input_device_registered:1;
 } tp_features;
 
+struct thinkpad_id_data {
+	unsigned int vendor;	/* ThinkPad vendor:
+				 * PCI_VENDOR_ID_IBM/PCI_VENDOR_ID_LENOVO */
+
+	char *bios_version_str;	/* Something like 1ZET51WW (1.03z) */
+	char *ec_version_str;	/* Something like 1ZHT51WW-1.04a */
+
+	u16 bios_model;		/* Big Endian, TP-1Y = 0x5931, 0 = unknown */
+	u16 ec_model;
+
+	char *model_str;
+};
+
+static struct thinkpad_id_data thinkpad_id;
+
 static struct list_head tpacpi_all_drivers;
 
 static struct ibm_init_struct ibms_init[];
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h
index b15c649..ced4d3f 100644
--- a/include/linux/pci_ids.h
+++ b/include/linux/pci_ids.h
@@ -2040,6 +2040,8 @@
 #define PCI_DEVICE_ID_ALTIMA_AC9100	0x03ea
 #define PCI_DEVICE_ID_ALTIMA_AC1003	0x03eb
 
+#define PCI_VENDOR_ID_LENOVO		0x17aa
+
 #define PCI_VENDOR_ID_ARECA		0x17d3
 #define PCI_DEVICE_ID_ARECA_1110	0x1110
 #define PCI_DEVICE_ID_ARECA_1120	0x1120
-- 
1.5.3.rc2.22.g69a9b

  parent reply	other threads:[~2007-07-22  9:16 UTC|newest]

Thread overview: 77+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-07-22  9:13 ACPI patches for 2.6.23 Len Brown
2007-07-22  9:13 ` [PATCH 01/77] ACPI: battery: make internal names consistent with battery "state" Len Brown
2007-07-22  9:13   ` Len Brown
2007-07-22  9:13   ` [PATCH 02/77] ACPI: Cache battery status instead of re-evaluating AML Len Brown
2007-07-22  9:13     ` Len Brown
2007-07-22  9:13   ` [PATCH 03/77] ACPI: battery: Lindent Len Brown
2007-07-22  9:13     ` Len Brown
2007-07-22  9:13   ` [PATCH 04/77] process reading battery status hangs Len Brown
2007-07-22  9:13     ` Len Brown
2007-07-22  9:13   ` [PATCH 05/77] ACPI: video: output switch sysfs support Len Brown
2007-07-22  9:13     ` Len Brown
2007-07-22  9:13   ` [PATCH 06/77] ACPI: dock: cleanup the uid patch Len Brown
2007-07-22  9:13     ` Len Brown
2007-07-22  9:13   ` [PATCH 07/77] ACPI: dock: fix opps after dock driver fails to initialize Len Brown
2007-07-22  9:13     ` Len Brown
2007-07-22  9:13   ` [PATCH 08/77] ACPI: dock: use dynamically allocated platform device Len Brown
2007-07-22  9:13     ` Len Brown
2007-07-22  9:13   ` [PATCH 09/77] ACPI: dock: add immediate_undock option Len Brown
2007-07-22  9:13     ` Len Brown
2007-07-22  9:13   ` [PATCH 10/77] ACPI: dock: unsuppress uevents Len Brown
2007-07-22  9:13     ` Len Brown
2007-07-22  9:13   ` [PATCH 11/77] ACPI: dock: send envp with uevent Len Brown
2007-07-22  9:13     ` Len Brown
2007-07-22  9:13   ` [PATCH 12/77] ACPI: bay: unsuppress uevents Len Brown
2007-07-22  9:13     ` Len Brown
2007-07-22  9:13   ` [PATCH 13/77] ACPI: battery: syntax cleanup Len Brown
2007-07-22  9:13     ` Len Brown
2007-07-22  9:13   ` [PATCH 14/77] ACPI: add ACPI 3.0 _TPC _TSS _PTC throttling support Len Brown
2007-07-22  9:13     ` Len Brown
2007-07-22  9:14   ` [PATCH 15/77] ACPI: Lindent processor throttling code Len Brown
2007-07-22  9:14     ` Len Brown
2007-07-22  9:14   ` [PATCH 16/77] ACPI: bay: send envp with uevent Len Brown
2007-07-22  9:14     ` Len Brown
2007-07-22  9:14   ` [PATCH 17/77] ACPI: Remove Dell Optiplex GX240 from the ACPI blacklist Len Brown
2007-07-22  9:14     ` Len Brown
2007-07-22  9:14   ` [PATCH 18/77] ACPI: disable _OSI(Linux) by default Len Brown
2007-07-22  9:14     ` Len Brown
2007-07-22  9:14   ` [PATCH 19/77] ACPI: Discard invalid elements in _PSS package Len Brown
2007-07-22  9:14     ` Len Brown
2007-07-22  9:14   ` [PATCH 20/77] ACPI: asus_acpi: Do not load if no device has been found Len Brown
2007-07-22  9:14     ` Len Brown
2007-07-22  9:14   ` [PATCH 21/77] ACPI: update MAINTAINERS for EC and battery Len Brown
2007-07-22  9:14     ` Len Brown
2007-07-22  9:14   ` [PATCH 22/77] ACPI EC: Re-factor EC space handler to avoid using label/goto for cycle Len Brown
2007-07-22  9:14     ` Len Brown
2007-07-22  9:14   ` [PATCH 23/77] ACPI EC: drop usage of ACPI_DEBUG_PRINT as too heavy weight Len Brown
2007-07-22  9:14     ` Len Brown
2007-07-22  9:14   ` [PATCH 24/77] ACPI EC: Add support for non-AML EC query handlers Len Brown
2007-07-22  9:14     ` Len Brown
2007-07-22  9:14   ` [PATCH 25/77] ACPI: sbs: probe smart battery vis SMBus controller Len Brown
2007-07-22  9:14     ` Len Brown
2007-07-22  9:14   ` [PATCH 26/77] ACPI: static Len Brown
2007-07-22  9:14     ` Len Brown
2007-07-22  9:14   ` [PATCH 27/77] " Len Brown
2007-07-22  9:14     ` Len Brown
2007-07-22  9:14   ` [PATCH 28/77] ACPI: delete cmdline documentation for deleted hotkey code Len Brown
2007-07-22  9:14     ` Len Brown
2007-07-22  9:14   ` [PATCH 29/77] ACPI video: Don't export sysfs backlight interface if query _BCL fail Len Brown
2007-07-22  9:14     ` Len Brown
2007-07-22  9:14   ` [PATCH 30/77] ACPI: Use menuconfig objects Len Brown
2007-07-22  9:14     ` Len Brown
2007-07-22  9:14   ` [PATCH 32/77] ACPICA: Update _OSI string list Len Brown
2007-07-22  9:14     ` Len Brown
2007-07-22  9:14   ` [PATCH 33/77] ACPICA: Changes for Cygwin compatibility Len Brown
2007-07-22  9:14     ` Len Brown
2007-07-22  9:14   ` [PATCH 34/77] ACPICA: Fixed possible corruption of global GPE list Len Brown
2007-07-22  9:14     ` Len Brown
2007-07-22  9:14   ` [PATCH 35/77] ACPICA: Clear reserved fields for incoming ACPI 1.0 FADTs Len Brown
2007-07-22  9:14     ` Len Brown
2007-07-22  9:14   ` [PATCH 36/77] ACPI: Export events via generic netlink Len Brown
2007-07-22  9:14     ` Len Brown
2007-07-22  9:14   ` [PATCH 37/77] ACPI: netlink: remove unnecessary EXPORT_SYMBOL Len Brown
2007-07-22  9:14     ` Len Brown
2007-07-22  9:14   ` [PATCH 38/77] ACPI: dock: fix oops when _DCK evaluation fails Len Brown
2007-07-22  9:14     ` Len Brown
2007-07-22  9:14   ` [PATCH 39/77] ACPICA: fix memory leak in acpi_ev_pci_config_region_setup() error path Len Brown
2007-07-22  9:14     ` Len Brown
2007-07-22  9:14   ` [PATCH 40/77] ACPI: Enable C3 even when PM2_control is zero Len Brown
2007-07-22  9:14     ` Len Brown
2007-07-22  9:14   ` [PATCH 41/77] ACPI: thinkpad-acpi: add DMI-based modalias Len Brown
2007-07-22  9:14     ` Len Brown
2007-07-22  9:14   ` [PATCH 42/77] ACPI: thinkpad-acpi: remove all uneeded initializers Len Brown
2007-07-22  9:14     ` Len Brown
2007-07-22  9:14   ` [PATCH 43/77] ACPI: thinkpad-acpi: update information on T43 thermal sensor 0xc1 Len Brown
2007-07-22  9:14     ` Len Brown
2007-07-22  9:14   ` [PATCH 44/77] ACPI: thinkpad-acpi: enable more hotkeys Len Brown
2007-07-22  9:14     ` Len Brown
2007-07-22  9:14   ` [PATCH 45/77] ACPI: thinkpad-acpi: export hotkey maximum masks Len Brown
2007-07-22  9:14     ` Len Brown
2007-07-22  9:14   ` [PATCH 46/77] ACPI: thinkpad-acpi: export to sysfs the state of the radio slider switch Len Brown
2007-07-22  9:14     ` Len Brown
2007-07-22  9:14   ` [PATCH 47/77] ACPI: thinkpad-acpi: checkpoint sysfs interface version due to hotkey Len Brown
2007-07-22  9:14     ` Len Brown
2007-07-22  9:14   ` [PATCH 48/77] ACPI: thinkpad-acpi: update CMOS commands documentation Len Brown
2007-07-22  9:14     ` Len Brown
2007-07-22  9:14   ` [PATCH 49/77] ACPI: thinkpad-acpi: register input device Len Brown
2007-07-22  9:14     ` Len Brown
2007-07-22  9:14   ` [PATCH 50/77] ACPI: thinkpad-acpi: add input device support to hotkey subdriver Len Brown
2007-07-22  9:14     ` Len Brown
2007-07-22  9:14   ` [PATCH 51/77] ACPI: thinkpad-acpi: make the input event mode the default Len Brown
2007-07-22  9:14     ` Len Brown
2007-07-22  9:14   ` [PATCH 52/77] ACPI: thinkpad-acpi: add power-management handler capability Len Brown
2007-07-22  9:14     ` Len Brown
2007-07-22  9:14   ` [PATCH 53/77] ACPI: thinkpad-acpi: export EV_SW SW_RADIO events Len Brown
2007-07-22  9:14     ` Len Brown
2007-07-22  9:14   ` [PATCH 54/77] ACPI: thinkpad-acpi: checkpoint sysfs interface version due to input layer Len Brown
2007-07-22  9:14     ` Len Brown
2007-07-22  9:14   ` [PATCH 55/77] ACPI: thinkpad-acpi: rename pci HID constant Len Brown
2007-07-22  9:14     ` Len Brown
2007-07-22  9:14   ` [PATCH 56/77] ACPI: thinkpad_acpi: use bool for boolean parameters Len Brown
2007-07-22  9:14     ` Len Brown
2007-07-22  9:14   ` Len Brown [this message]
2007-07-22  9:14     ` [PATCH 57/77] ACPI: thinkpad-acpi: store ThinkPad model information Len Brown
2007-07-22  9:14   ` [PATCH 58/77] ACPI: thinkpad-acpi: allow use of CMOS NVRAM for brightness control Len Brown
2007-07-22  9:14     ` Len Brown
2007-07-22  9:14   ` [PATCH 59/77] ACPI: thinkpad-acpi: react to Lenovo ThinkPad differences in hot key Len Brown
2007-07-22  9:14     ` Len Brown
2007-07-22  9:14   ` [PATCH 60/77] ACPI: thinkpad-acpi: make sure DSDT TMPx readings don't return +128 Len Brown
2007-07-22  9:14     ` Len Brown
2007-07-22  9:14   ` [PATCH 61/77] ACPI: thinkpad-acpi: make EC-based thermal readings non-experimental Len Brown
2007-07-22  9:14     ` Len Brown
2007-07-22  9:14   ` [PATCH 62/77] ACPI: thinkpad-acpi: bump up version to 0.15 Len Brown
2007-07-22  9:14     ` Len Brown
2007-07-22  9:14   ` [PATCH 63/77] ACPI: thinkpad-acpi: add locking to brightness subdriver Len Brown
2007-07-22  9:14     ` Len Brown
2007-07-22  9:14   ` [PATCH 64/77] sony-laptop: add new SNC handlers Len Brown
2007-07-22  9:14     ` Len Brown
2007-07-22  9:14   ` [PATCH 65/77] sony-laptop: map wireless switch events to KEY_WLAN Len Brown
2007-07-22  9:14     ` Len Brown
2007-07-22  9:14   ` [PATCH 66/77] sony-laptop: Add support for recent Vaios Fn keys (C series for now) Len Brown
2007-07-22  9:14     ` Len Brown
2007-07-22  9:14   ` [PATCH 67/77] sony-laptop: Invoke _INI for SNC devices that provide it Len Brown
2007-07-22  9:14     ` Len Brown
2007-07-22  9:14   ` [PATCH 68/77] sony-laptop: Make the driver use MSC_SCAN and a setkeycode and getkeycode key table Len Brown
2007-07-22  9:14     ` Len Brown
2007-07-22  9:14   ` [PATCH 69/77] sony-laptop: Add Vaio FE to the special init sequence Len Brown
2007-07-22  9:14     ` Len Brown
2007-07-22  9:14   ` [PATCH 70/77] sony-laptop: Fix event reading in sony-laptop Len Brown
2007-07-22  9:14     ` Len Brown
2007-07-22  9:14   ` [PATCH 71/77] ACPI: drivers/acpi/pci_link.c: lower printk severity Len Brown
2007-07-22  9:14     ` Len Brown
2007-07-22  9:14   ` [PATCH 72/77] ACPI: fix empty macros found by -Wextra Len Brown
2007-07-22  9:14     ` Len Brown
2007-07-22  9:14   ` [PATCH 73/77] ACPI: export ACPI events via acpi_mc_group multicast group Len Brown
2007-07-22  9:14     ` Len Brown
2007-07-22  9:14   ` [PATCH 74/77] ACPI: update feature-removal-schedule.txt, /sys/firmware/acpi/namespace is gone Len Brown
2007-07-22  9:14     ` Len Brown
2007-07-22  9:15   ` [PATCH 75/77] ACPI: update ACPI proc I/F removal schedule Len Brown
2007-07-22  9:15     ` Len Brown
2007-07-22  9:15   ` [PATCH 76/77] ACPI: create CONFIG_ACPI_DEBUG_FUNC_TRACE Len Brown
2007-07-22  9:15     ` Len Brown
2007-07-22  9:15   ` [PATCH 77/77] ACPI: Populate /sys/firmware/acpi/tables/ Len Brown
2007-07-22  9:15     ` Len Brown

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=11850957621605-git-send-email-len.brown@intel.com \
    --to=len.brown@intel.com \
    --cc=hmh@hmh.eng.br \
    --cc=linux-acpi@vger.kernel.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.