public inbox for linux-acpi@vger.kernel.org
 help / color / mirror / Atom feed
From: Len Brown <lenb@kernel.org>
To: Matthew Garrett <mjg59@srcf.ucam.org>
Cc: "Brian S. Julin" <bri@abrij.org>,
	linux-acpi@vger.kernel.org,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	greg@kroah.com
Subject: (unknown)
Date: Fri, 09 Jan 2009 17:34:08 -0500 (EST)	[thread overview]
Message-ID: <alpine.LFD.2.00.0901091731540.20020@localhost.localdomain> (raw)
In-Reply-To: <alpine.LFD.2.00.0901090112190.4091@localhost.localdomain>

From: Matthew Garrett <mjg59@srcf.ucam.org>

Matthew,
Here is the version in my tree -- refreshed to live in 
drivers/platform/x86/.

cheers,
-Len

oqo-wmi provides a WMI-based interface to backlight and rfkill control on
model 2 OQO devices. It was originally written by Brian Julin
(<bri@abrij.org>) - I've ported it to the rfkill layer and tidied it up a
little.

Signed-off-by: Matthew Garrett <mjg@redhat.com>
Signed-off-by: Len Brown <len.brown@intel.com>
---
 MAINTAINERS                    |    5 +
 drivers/platform/x86/Kconfig   |   13 +
 drivers/platform/x86/Makefile  |    1 +
 drivers/platform/x86/oqo-wmi.c |  941 ++++++++++++++++++++++++++++++++++++++++
 4 files changed, 960 insertions(+), 0 deletions(-)
 create mode 100644 drivers/platform/x86/oqo-wmi.c

diff --git a/MAINTAINERS b/MAINTAINERS
index 57e0309..fef4adb 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -3239,6 +3239,11 @@ M:	robert.richter@amd.com
 L:	oprofile-list@lists.sf.net
 S:	Maintained
 
+OQO WMI EXTRAS DRIVER
+P:	Matthew Garrett
+M:	mjg59@srcf.ucam.org
+S:	Maintained
+
 ORACLE CLUSTER FILESYSTEM 2 (OCFS2)
 P:	Mark Fasheh
 M:	mfasheh@suse.com
diff --git a/drivers/platform/x86/Kconfig b/drivers/platform/x86/Kconfig
index 9e8f948..017fb81 100644
--- a/drivers/platform/x86/Kconfig
+++ b/drivers/platform/x86/Kconfig
@@ -132,6 +132,19 @@ config MSI_LAPTOP
 
 	  If you have an MSI S270 laptop, say Y or M here.
 
+config OQO_WMI
+       tristate "OQO WMI extras"
+       depends on ACPI_WMI
+       depends on INPUT
+       depends on RFKILL
+       depends on BACKLIGHT_CLASS_DEVICE
+       help
+         Say Y here if you want to support rfkill and backlight control on
+         series 2 OQO handheld devices.
+
+         To compile this driver as a module, choose M here: the module will
+         be called oqo-wmi.
+
 config PANASONIC_LAPTOP
 	tristate "Panasonic Laptop Extras"
 	depends on INPUT && ACPI
diff --git a/drivers/platform/x86/Makefile b/drivers/platform/x86/Makefile
index e290651..37ac07f 100644
--- a/drivers/platform/x86/Makefile
+++ b/drivers/platform/x86/Makefile
@@ -13,6 +13,7 @@ obj-$(CONFIG_TC1100_WMI)	+= tc1100-wmi.o
 obj-$(CONFIG_SONY_LAPTOP)	+= sony-laptop.o
 obj-$(CONFIG_THINKPAD_ACPI)	+= thinkpad_acpi.o
 obj-$(CONFIG_FUJITSU_LAPTOP)	+= fujitsu-laptop.o
+obj-$(CONFIG_OQO_WMI)		+= oqo-wmi.o
 obj-$(CONFIG_PANASONIC_LAPTOP)	+= panasonic-laptop.o
 obj-$(CONFIG_INTEL_MENLOW)	+= intel_menlow.o
 obj-$(CONFIG_ACPI_WMI)		+= wmi.o
diff --git a/drivers/platform/x86/oqo-wmi.c b/drivers/platform/x86/oqo-wmi.c
new file mode 100644
index 0000000..940e605
--- /dev/null
+++ b/drivers/platform/x86/oqo-wmi.c
@@ -0,0 +1,941 @@
+/*
+ *  OQO WMI UPMC Extras
+ *
+ *  Copyright (C) 2008 Brian S. Julin <bri@abrij.org>
+ *
+ *  Based on acer-wmi:
+ *    Copyright (C) 2007-2008	Carlos Corbacho <cathectic@gmail.com>
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+/*
+ * NOTE: You need to turn SMI on in BIOS (if dmidecode works, you already have)
+ * NOTE: acpi-wmi support mandatory
+ * NOTE: backlight and inputdev support a must, ifdefs will come later
+ */
+
+/*
+ *
+ *  0.3: added WLAN enable switch, restore settings on unload,
+ *       resume/suspend handling
+ *  0.2: Still not production-ready, but added ambient light sensor,
+ *       backlight, and it prints the unit serial number to dmesg (do
+ *       not know where to make that available to userspace yet.)
+ *  0.1: This is a first cut.  Plan to reboot after playing with this.
+ */
+
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/init.h>
+#include <linux/types.h>
+#include <linux/dmi.h>
+#include <linux/backlight.h>
+#include <linux/leds.h>
+#include <linux/platform_device.h>
+#include <linux/acpi.h>
+#include <linux/i8042.h>
+#include <linux/input-polldev.h>
+#include <linux/rfkill.h>
+
+#include <acpi/acpi_drivers.h>
+
+MODULE_AUTHOR("Brian Julin");
+MODULE_DESCRIPTION("OQO UPMC WMI Extras Driver");
+MODULE_LICENSE("GPL");
+
+#define OQO_LOGPREFIX "oqo-wmi: "
+#define OQO_ERR KERN_ERR OQO_LOGPREFIX
+#define OQO_NOTICE KERN_NOTICE OQO_LOGPREFIX
+#define OQO_INFO KERN_INFO OQO_LOGPREFIX
+
+#define OQO_KINE_MAXTRY 3
+
+/* Store defined devices globally since we only have one instance. */
+static struct platform_device *oqo_platform_device;
+static struct backlight_device *oqo_backlight_device;
+static struct rfkill *oqo_rfkill;
+static struct input_dev *oqo_kine;
+static struct input_polled_dev *oqo_kine_polled;
+
+/* Likewise store current and original settings globally. */
+struct oqo_settings {
+	int lid_wakes;		/* not sure if ACPI handles/needs help here */
+	int kine_itvl;
+	int bl_bright;
+};
+
+static struct oqo_settings orig, curr;
+
+/* Some of this code is left like in acer-wmi so we can add the older
+   Model 01 and any future models more easily, but we should not expect
+   it to be as complicated as Acer given each model is a leap rather than
+   a subtle variant on the last, so we aren't using "quirks" perse.  Not
+   sure if there is any real difference for our purposes between the o2
+   and e2.
+*/
+struct oqo_model {
+	const char *model;
+	u16 model_subs;
+};
+#define MODEL_SUB_OQO_O2_SMB0 3
+
+static struct oqo_model oqo_models[] = {
+	{
+	 .model = "Model 2",
+	 .model_subs = MODEL_SUB_OQO_O2_SMB0,
+	 },
+	{}
+};
+
+static struct oqo_model *model;
+
+static int force;
+module_param(force, bool, 0644);
+MODULE_PARM_DESC(force, "Force WMI detection even if DMI detection failed");
+
+/*
+ * OQO Model 2 SMBUS registers
+ * We are just using WMI to read the Cx700 smbus, to share the
+ * ACPI mutex (what may also eventually work in VMs/win32)
+ * Using i2c-viapro directly could interfere with PM.
+ */
+
+#define OQO_O2_SMB0_WWAN_DSBL_ADDR	0x19
+#define OQO_O2_SMB0_WWAN_DSBL_MASK	0x02
+#define OQO_O2_SMB0_LUMIN_LO		0x20
+#define OQO_O2_SMB0_LUMIN_HI		0x21
+#define OQO_O2_SMB0_BL_LO		0x26
+#define OQO_O2_SMB0_BL_HI		0x27
+#define OQO_O2_SMB0_ACCEL_POLL_ITVL	0x45
+#define OQO_O2_SMB0_ACCEL_XLO		0x50
+#define OQO_O2_SMB0_ACCEL_XHI		0x51
+#define OQO_O2_SMB0_ACCEL_YLO		0x52
+#define OQO_O2_SMB0_ACCEL_YHI		0x53
+#define OQO_O2_SMB0_ACCEL_ZLO		0x54
+#define OQO_O2_SMB0_ACCEL_ZHI		0x55
+/* These may be handled by ACPI not sure yet. */
+#define OQO_O2_SMB0_LID_WAKES_ADDR	0x58
+#define OQO_O2_SMB0_LID_WAKES_MASK	0x08
+
+#define OQO_O2_SMB0_SERIAL_START	0x70
+#define OQO_O2_SMB0_SERIAL_LEN		11
+
+static char oqo_sn[OQO_O2_SMB0_SERIAL_LEN + 1];
+
+/* Other addresses I have noticed used on the 02 SMBUS (from DSDT and whatnot)
+ *
+ * These are not used because the linux ACPI drivers work fine on them
+ *
+ * 0x0A -- processor sleep mode?
+ * 0x0C -- ACPI events, probably clears when read.
+ * 0x30 -- thermal zone
+ *      There is something going on at 0x31 through 0x34 which is likely
+ *      also thermal.  The values change over time.  Have not figured that
+ *      out yet.
+ * 0x41 -- AC detect
+ * 0x42 -- LID button   ACTUALLY THIS DOES NOT WORK AND NEEDS TO BE FIXED
+ * 0xa0 and 0xa1 -- battery something (presence? state?)
+ * 0xa4 to 0xcf -- battery info (0xc8-0xca contains "OQO")
+ * 0xd4 to 0xef -- other battery stats
+ */
+
+/*
+ * OQO method GUIDs
+ */
+#define OQO_O2_AMW0_GUID "ABBC0F6D-8EA1-11D1-00A0-C90629100000"
+MODULE_ALIAS("wmi:ABBC0F6D-8EA1-11D1-00A0-C90629100000");
+
+/*
+ * Interface type flags
+ */
+enum interface_type {
+	OQO_O2_AMW0,
+};
+
+/* Each low-level interface must define at least some of the following */
+struct wmi_interface {
+	/* The WMI device type */
+	u32 type;
+};
+
+static struct wmi_interface AMW0_interface = {
+	.type = OQO_O2_AMW0,
+};
+
+/* The detected/chosen interface */
+static struct wmi_interface *interface;
+
+static int dmi_matched(const struct dmi_system_id *dmi)
+{
+	model = dmi->driver_data;
+	/*
+	 * Detect which ACPI-WMI interface we're using.
+	 */
+	if (wmi_has_guid(OQO_O2_AMW0_GUID))
+		interface = &AMW0_interface;
+
+	return 0;
+}
+
+static struct dmi_system_id oqo_dmis[] = {
+	{
+	 .callback = dmi_matched,
+	 .ident = "OQO 02",
+	 .matches = {
+		     DMI_MATCH(DMI_SYS_VENDOR, "OQO Inc."),
+		     DMI_MATCH(DMI_PRODUCT_NAME, "OQO Model 2"),
+		     },
+	 .driver_data = oqo_models + 0,
+	 },
+	{}
+};
+
+/*
+ * AMW0 (V1) interface on OQO Model 2
+ *
+ * wmba: has four functions selected by int arg 1.  arg2 is 3 byte buffer.
+ *       1: performs GETB method on the SMBUS using bytes 0, 1 of Arg2
+ *          returns a buffer object containing a single byte
+ *       2: performs SETB on SMBUS using bytes 0, 1, 2 of Arg2
+ *          returns 0 as int.
+ *       3: dumps 256 values into a given SMBUS register (not used here)
+ *          returns 0 as int.
+ *       4: puts byte 0 of arg2 into some sort of busy flag.  Some ACPI
+ *          funcs check this (==0) to decide if SMBUS operations are safe.
+ *          returns 0 as int.
+ * wmbb: simply returns the busy flag set by wmba #4
+ */
+static acpi_status oqo_smbus_getb(u8 addr, u8 *result)
+{
+	struct acpi_buffer input, res;
+	acpi_status status;
+	union acpi_object *obj;
+	u32 arg2;
+
+	input.length = 4;
+	input.pointer = &arg2;
+	res.length = ACPI_ALLOCATE_BUFFER;
+	res.pointer = NULL;
+
+	arg2 = addr;
+	arg2 <<= 8;
+	arg2 |= 0x12;		/* HOSTCMD */
+
+	status = wmi_evaluate_method(OQO_O2_AMW0_GUID, 1, 1, &input, &res);
+
+	if (status != AE_OK)
+		return status;
+
+	obj = (union acpi_object *)res.pointer;
+	if (!obj)
+		return AE_NULL_OBJECT;
+
+	if (obj->type != ACPI_TYPE_BUFFER
+	    || obj->buffer.length != 1 || obj->buffer.pointer == NULL) {
+		kfree(obj);
+		return AE_TYPE;
+	}
+	*result = ((u8 *) (obj->buffer.pointer))[0];
+	kfree(obj);
+	return status;
+}
+
+static acpi_status oqo_smbus_setb(u8 addr, u8 val)
+{
+	struct acpi_buffer input, res;
+	acpi_status status;
+	union acpi_object *obj;
+	u32 arg2;
+
+	input.length = 4;
+	input.pointer = &arg2;
+	res.length = ACPI_ALLOCATE_BUFFER;
+	res.pointer = NULL;
+
+	arg2 = val;
+	arg2 <<= 8;
+	arg2 |= addr;
+	arg2 <<= 8;
+	arg2 |= 0x12;		/* HOSTCMD */
+
+	status = wmi_evaluate_method(OQO_O2_AMW0_GUID, 1, 2, &input, &res);
+
+	if (status != AE_OK)
+		return status;
+
+	obj = (union acpi_object *)res.pointer;
+	if (!obj)
+		return AE_NULL_OBJECT;
+
+	if (obj->type != ACPI_TYPE_INTEGER) {
+		kfree(obj);
+		return AE_TYPE;
+	}
+	kfree(obj);
+	return status;
+}
+
+/*
+ * We assume we are the only one using this ...ahem... "lock" on
+ * the SMBUS because it would be pathetically noneffective otherwise.
+ *
+ * Nonzero silly_lock will keep certain ACPI routines away from the
+ * SMBUS (if they aren't already on it when you call it.)  Zero
+ *  silly_lock will let them back on
+ *
+ * This is probably useful before sleeping the system, and one
+ * waits until any ACPI funcs would have long finished before
+ * proceeding.  It seems harmless enough and will work to wrap
+ * more accesses with it.
+ */
+static acpi_status oqo_lock_smbus(int silly_lock)
+{
+	struct acpi_buffer input, res;
+	acpi_status status;
+	union acpi_object *obj;
+	u32 arg2;
+
+	input.length = 4;
+	input.pointer = &arg2;
+	res.length = ACPI_ALLOCATE_BUFFER;
+	res.pointer = NULL;
+
+	arg2 = !!silly_lock;
+
+	status = wmi_evaluate_method(OQO_O2_AMW0_GUID, 1, 4, &input, &res);
+
+	if (status != AE_OK)
+		return status;
+
+	obj = (union acpi_object *)res.pointer;
+	if (!obj)
+		return AE_NULL_OBJECT;
+
+	if (obj->type != ACPI_TYPE_INTEGER) {
+		kfree(obj);
+		return AE_TYPE;
+	}
+	kfree(obj);
+	return status;
+}
+
+static int smread_s16(u8 hi_addr, u8 lo_addr)
+{
+	s16 ret = -1;
+	acpi_status status;
+	u8 r;
+
+	/* Keep some ACPI routines off the SMBUS */
+	status = oqo_lock_smbus(1);
+	if (ACPI_FAILURE(status))
+		goto skip;
+
+	status = oqo_smbus_getb(hi_addr, &r);
+	if (ACPI_FAILURE(status))
+		goto skip;
+
+	ret = r;
+	ret <<= 8;
+
+	status = oqo_smbus_getb(lo_addr, &r);
+	if (ACPI_FAILURE(status)) {
+		ret = -1;
+		goto skip;
+	}
+
+	ret |= r;
+	ret &= 0x7fff;
+skip:
+	/* Let ACPI routines back on the SMBUS */
+	status = oqo_lock_smbus(0);
+	if (ACPI_FAILURE(status))
+		return -1;
+	return (int)ret;
+}
+
+static int smwrite_s16(u8 hi_addr, u8 lo_addr, s16 val)
+{
+	acpi_status status;
+	u8 r;
+	int ret = -1;
+
+	status = oqo_lock_smbus(1);
+	if (ACPI_FAILURE(status))
+		goto skip;
+
+	r = (val >> 8) & 0x7f;
+	status = oqo_smbus_setb(hi_addr, r);
+	if (ACPI_FAILURE(status))
+		goto skip;
+
+	r = val & 0xff;
+	status = oqo_smbus_setb(lo_addr, r);
+	if (ACPI_FAILURE(status))
+		goto skip;
+
+	ret = 0;
+skip:
+	status = oqo_lock_smbus(0);
+	if (ACPI_FAILURE(status))
+		return -1;
+	return ret;
+}
+
+static int smread_u8(u8 addr)
+{
+	int ret = -1;
+	acpi_status status;
+	u8 r;
+
+	status = oqo_lock_smbus(1);
+	if (ACPI_FAILURE(status))
+		goto skip;
+
+	status = oqo_smbus_getb(addr, &r);
+	if (ACPI_FAILURE(status))
+		goto skip;
+
+	ret = r;
+skip:
+	status = oqo_lock_smbus(0);
+	if (ACPI_FAILURE(status))
+		return -1;
+	return (int)ret;
+}
+
+static int smwrite_u8(u8 addr, u8 val)
+{
+	acpi_status status;
+	int ret = -1;
+
+	status = oqo_lock_smbus(1);
+	if (ACPI_FAILURE(status))
+		goto skip;
+
+	status = oqo_smbus_setb(addr, val);
+	if (ACPI_FAILURE(status))
+		goto skip;
+
+	ret = 0;
+skip:
+	status = oqo_lock_smbus(0);
+	if (ACPI_FAILURE(status))
+		return -1;
+	return ret;
+}
+
+/*
+ * Accelerometer inputdev
+ */
+
+/*
+ * Get a reading of the accelerometer from the firwmware and push
+ * it to an inputdev.
+ *
+ * Also the ambient light detector hitch-hikes on the inputdev, since
+ * it could be useful in some of the same applications for accelerometers.
+ *
+ * Available information and a bit of poking have not found a
+ * way to freeze a snapshot of the accelerometer data, so we have
+ * to do consistency checks to reduce the odds that we mix low
+ * and high bytes from different updates.
+ *
+ * Unfortunately SMBUS access is very slow (11ms) and the firmware API
+ * does not provide 2-byte transfers, so mixed readings happen and
+ * have to be corrected a lot.  (Do not know why; it should be a
+ * multi-kHz.. bus and the reads take only a hundred-ish cycles/byte.
+ * It is not the ACPI function -- it is slow on i2c-viapro as well.)
+ *
+ * Since there is such a big time lag between readings, the axis
+ * are decoupled and reported separately on different timelines as
+ * different events rather than as a set.
+ */
+static acpi_status oqo_read_kine(int *good, s16 *x, s16 *y, s16 *z,
+				 u16 *lumin)
+{
+	u8 hiregs[4] = { OQO_O2_SMB0_ACCEL_XHI,
+		OQO_O2_SMB0_ACCEL_YHI,
+		OQO_O2_SMB0_ACCEL_ZHI,
+		OQO_O2_SMB0_LUMIN_HI
+	};
+	u8 loregs[4] = { OQO_O2_SMB0_ACCEL_XLO,
+		OQO_O2_SMB0_ACCEL_YLO,
+		OQO_O2_SMB0_ACCEL_ZLO,
+		OQO_O2_SMB0_LUMIN_LO
+	};
+
+	short ax[4] = { ABS_X, ABS_Y, ABS_Z, ABS_MISC };
+	u8 realgood = 0;
+	u16 res[4];
+	acpi_status status;
+	int i;
+
+	*good = 0;
+
+	/* Routine: Starting with the lo byte, read lo/hi bytes
+	   alternately until two lo byte readings, match.  Then
+	   take that reading and combine it with the hi reading
+	   sandwiched between.  Errors can still happen when
+	   jittering at wrap boundaries, but should be rare.
+
+	   Don't use this for missile guidance.
+
+	   Userspace post-processing error detection encouraged.
+	 */
+	for (i = 0; i < 4; i++) {
+		int maxtry;
+		u32 log;
+		u8 r, lo, hi;
+
+		lo = loregs[i];
+		hi = hiregs[i];
+		log = 0;
+
+#define LOGRES(reg)  do { \
+			status = oqo_smbus_getb(reg, &r);		\
+			log <<= 8; log |= r; log &= 0xffffff;		\
+			if (ACPI_FAILURE(status))			\
+				goto leave;				\
+		} while (0)
+
+		maxtry = OQO_KINE_MAXTRY + 1;
+		while (maxtry) {
+			LOGRES(lo);
+			if (maxtry <= OQO_KINE_MAXTRY &&
+			    (log >> 16) == (log & 0xff)) {
+				*(res + i) = log & 0xffff;
+				break;
+			}
+			LOGRES(hi);
+			maxtry--;
+		}
+
+		if (maxtry == OQO_KINE_MAXTRY)
+			realgood |= 1 << i;
+
+		if (maxtry) {
+			*good |= 1 << i;
+			/* JIC CYA: this bit may be reserved */
+			res[3] &= 0x7fff;
+			input_report_abs(oqo_kine, ax[i], (s16) res[i]);
+		}
+		/* else we had trouble getting the reading to lock
+		   and we skip reporting this axis.
+		 */
+	}
+
+	*x = (u16) res[0];
+	*y = (u16) res[1];
+	*z = (u16) res[2];
+	*lumin = (u16) res[3];
+	return status;
+leave:
+	return status;
+}
+
+/*
+ * Generic Device (interface-independent)
+ */
+
+static void oqo_kine_poll(struct input_polled_dev *dev)
+{
+	s16 x, y, z;
+	u16 lumin;
+	int good;
+	/*      struct timeval tv1, tv2; */
+
+	if (dev != oqo_kine_polled)
+		return;
+	if (orig.kine_itvl < 0)
+		return;
+
+	x = y = z = 0;
+	oqo_read_kine(&good, &x, &y, &z, &lumin);
+}
+
+static int __devinit oqo_kine_init(void)
+{
+	int err;
+
+	oqo_kine = input_allocate_device();
+	if (!oqo_kine)
+		return -ENOMEM;
+
+	oqo_kine->name = "OQO embedded accelerometer";
+	oqo_kine->phys = "platform:oqo-wmi:kine";
+	oqo_kine->id.bustype = 0;
+	oqo_kine->id.vendor = 0;
+	oqo_kine->id.product = 2;
+	oqo_kine->id.version = 0;
+	oqo_kine->evbit[0] = BIT_MASK(EV_ABS);
+	set_bit(ABS_X, oqo_kine->absbit);
+	set_bit(ABS_Y, oqo_kine->absbit);
+	set_bit(ABS_Z, oqo_kine->absbit);
+	set_bit(ABS_MISC, oqo_kine->absbit);
+	oqo_kine->absmin[ABS_X] =
+	    oqo_kine->absmin[ABS_Y] =
+	    oqo_kine->absmin[ABS_Z] = oqo_kine->absmin[ABS_MISC] = -32768;
+	oqo_kine->absmax[ABS_X] =
+	    oqo_kine->absmax[ABS_Y] =
+	    oqo_kine->absmax[ABS_Z] = oqo_kine->absmax[ABS_MISC] = 32767;
+
+	memcpy(oqo_kine->dev.bus_id, "kine", 4);
+
+	oqo_kine_polled = input_allocate_polled_device();
+	if (!oqo_kine_polled) {
+		err = -ENOMEM;
+		goto bail0;
+	}
+
+	oqo_kine_polled->poll = oqo_kine_poll;
+	oqo_kine_polled->poll_interval = 250;
+	oqo_kine_polled->input = oqo_kine;
+
+	orig.kine_itvl = -1;	/* prevent callback from running */
+	err = input_register_polled_device(oqo_kine_polled);
+	if (err) {
+		printk(OQO_ERR "Failed to register OQO kine input\n");
+		goto bail1;
+	}
+
+	/* This will allow the callback to run now if successful. */
+	orig.kine_itvl = smread_u8(OQO_O2_SMB0_ACCEL_POLL_ITVL);
+	smwrite_u8(OQO_O2_SMB0_ACCEL_POLL_ITVL, 250);
+	curr.kine_itvl = smread_u8(OQO_O2_SMB0_ACCEL_POLL_ITVL);
+	if (orig.kine_itvl < 0 || curr.kine_itvl != 250) {
+		printk(OQO_ERR "Test communication with kine sensor failed\n");
+		err = -ENODEV;
+		goto bail2;
+	}
+
+	printk(OQO_INFO "Created OQO kine input.\n");
+	printk(OQO_INFO "Firmware interval %ims, driver interval %ims\n",
+	       curr.kine_itvl, oqo_kine_polled->poll_interval);
+	return 0;
+bail2:
+	input_unregister_polled_device(oqo_kine_polled);
+bail1:
+	input_free_polled_device(oqo_kine_polled);	/* frees oqo_kine */
+	return err;
+bail0:
+	input_free_device(oqo_kine);
+	return err;
+}
+
+static void __devexit oqo_kine_fini(void)
+{
+	smwrite_u8(OQO_O2_SMB0_ACCEL_POLL_ITVL, orig.kine_itvl);
+	input_unregister_polled_device(oqo_kine_polled);
+	input_free_polled_device(oqo_kine_polled);
+}
+
+/*
+ * Backlight device
+ */
+static int read_brightness(struct backlight_device *bd)
+{
+	return (int)smread_s16(OQO_O2_SMB0_BL_HI, OQO_O2_SMB0_BL_LO);
+}
+
+static int update_bl_status(struct backlight_device *bd)
+{
+	return smwrite_s16(OQO_O2_SMB0_BL_HI,
+			   OQO_O2_SMB0_BL_LO, (s16) bd->props.brightness);
+}
+
+static struct backlight_ops oqo_bl_ops = {
+	.get_brightness = read_brightness,
+	.update_status = update_bl_status,
+};
+
+static int __devinit oqo_backlight_init(struct device *dev)
+{
+	struct backlight_device *bd;
+
+	/*
+	 * It would be nice if someone would figure out how backlights
+	 * like these, which are not driven through the video hardware,
+	 * are supposed to find their associated fb and bind to it (and
+	 * rebind when fb drivers change.
+	 *
+	 * Most extras backlights just shove a junk name in like we do here,
+	 * and don't end up integrated with fbcon sysfs as a result.
+	 */
+	bd = backlight_device_register("oqo-bl", dev, NULL, &oqo_bl_ops);
+
+	if (IS_ERR(bd)) {
+		printk(OQO_ERR "Could not register OQO backlight device\n");
+		oqo_backlight_device = NULL;
+		return PTR_ERR(bd);
+	}
+
+	oqo_backlight_device = bd;
+	bd->props.max_brightness = 0x7fff;
+	curr.bl_bright = orig.bl_bright = bd->props.brightness =
+	    read_brightness(NULL);
+
+	if (bd->props.brightness < 0)
+		goto fail;
+
+	backlight_update_status(bd);
+	printk(OQO_INFO "Found backlight set at %i\n", bd->props.brightness);
+	return 0;
+
+fail:
+	backlight_device_unregister(oqo_backlight_device);
+	oqo_backlight_device = NULL;
+	return -ENODEV;
+}
+
+static void __devexit oqo_backlight_fini(void)
+{
+	if (!oqo_backlight_device)
+		return;
+	oqo_backlight_device->props.brightness = orig.bl_bright;
+	backlight_update_status(oqo_backlight_device);
+	backlight_device_unregister(oqo_backlight_device);
+}
+
+/*
+ * RFKill device
+ */
+
+static int oqo_rfkill_get(void *data, enum rfkill_state *state)
+{
+	int res;
+
+	res = smread_u8(OQO_O2_SMB0_WWAN_DSBL_ADDR);
+	if (res < 0)
+		return res;
+
+	res &= OQO_O2_SMB0_WWAN_DSBL_MASK;
+
+	if (res)
+		*state = RFKILL_STATE_SOFT_BLOCKED;
+	else
+		*state = RFKILL_STATE_UNBLOCKED;
+
+	return 0;
+}
+
+static int oqo_rfkill_toggle(void *data, enum rfkill_state state)
+{
+	int res;
+
+	res = smread_u8(OQO_O2_SMB0_WWAN_DSBL_ADDR);
+
+	if (state == RFKILL_STATE_UNBLOCKED)
+		res &= ~OQO_O2_SMB0_WWAN_DSBL_MASK;
+	else
+		res |= OQO_O2_SMB0_WWAN_DSBL_MASK;
+
+	return smwrite_u8(OQO_O2_SMB0_WWAN_DSBL_ADDR, res);
+}
+
+static int __devinit oqo_rfkill_init(struct device *dev)
+{
+	int res;
+
+	oqo_rfkill = rfkill_allocate(dev, RFKILL_TYPE_WWAN);
+	if (!oqo_rfkill)
+		return -ENODEV;
+
+	res = smread_u8(OQO_O2_SMB0_WWAN_DSBL_ADDR);
+	res &= OQO_O2_SMB0_WWAN_DSBL_MASK;
+
+	oqo_rfkill->name = "oqo-wwan";
+	if (res)
+		oqo_rfkill->state = RFKILL_STATE_SOFT_BLOCKED;
+	else
+		oqo_rfkill->state = RFKILL_STATE_UNBLOCKED;
+
+	oqo_rfkill->get_state = oqo_rfkill_get;
+	oqo_rfkill->toggle_radio = oqo_rfkill_toggle;
+	oqo_rfkill->user_claim_unsupported = 1;
+
+	res = rfkill_register(oqo_rfkill);
+
+	if (res)
+		rfkill_free(oqo_rfkill);
+
+	return res;
+}
+
+static void __devexit oqo_rfkill_fini(void)
+{
+	if (!oqo_rfkill)
+		return;
+	rfkill_unregister(oqo_rfkill);
+}
+
+/*
+ * Platform device
+ */
+
+static int __devinit oqo_platform_probe(struct platform_device *device)
+{
+	int err;
+	int i;
+	char *troubleok = "trouble, but continuing.\n";
+
+	memset(oqo_sn, 0, OQO_O2_SMB0_SERIAL_LEN + 1);
+	for (i = 0; i < OQO_O2_SMB0_SERIAL_LEN; i++) {
+		err = oqo_smbus_getb(OQO_O2_SMB0_SERIAL_START + i, oqo_sn + i);
+		if (err) {
+			printk(OQO_ERR "Serial number check failed.\n");
+			return err;
+		}
+	}
+	printk(OQO_INFO "Found OQO with serial number %s.\n", oqo_sn);
+
+	err = oqo_backlight_init(&device->dev);
+	if (err)
+		printk(OQO_ERR "Backlight init %s", troubleok);
+
+	err = oqo_rfkill_init(&device->dev);
+	if (err)
+		printk(OQO_ERR "RFKill init %s", troubleok);
+
+	/* LID does not work at all yet, and this may be taken
+	   care of by ACPI.
+	 */
+	orig.lid_wakes = smread_u8(OQO_O2_SMB0_LID_WAKES_ADDR);
+	orig.lid_wakes &= OQO_O2_SMB0_LID_WAKES_MASK;
+	orig.lid_wakes = curr.lid_wakes = !!orig.lid_wakes;
+	if (orig.lid_wakes < 0) {
+		printk(OQO_ERR "Wake on LID event %s", troubleok);
+	} else {
+		printk(OQO_INFO "Wake on LID is %s.\n",
+		       (orig.lid_wakes ? "on" : "off"));
+	}
+
+	err = oqo_kine_init();
+	return err;
+}
+
+static int oqo_platform_remove(struct platform_device *device)
+{
+	oqo_backlight_fini();
+	oqo_rfkill_fini();
+	oqo_kine_fini();
+
+	return 0;
+}
+
+#ifdef CONFIG_PM
+
+static int oqo_platform_suspend(struct platform_device *dev, pm_message_t state)
+{
+	if (!interface)
+		return -ENOMEM;
+
+	/* This sticks during boot so do not turn it entirely off */
+	if (oqo_backlight_device) {
+		curr.bl_bright = read_brightness(oqo_backlight_device);
+		smwrite_s16(OQO_O2_SMB0_BL_HI, OQO_O2_SMB0_BL_LO, 256);
+	}
+	return 0;
+}
+
+static int oqo_platform_resume(struct platform_device *device)
+{
+	if (!interface)
+		return -ENOMEM;
+
+	if (oqo_backlight_device) {
+		smwrite_s16(OQO_O2_SMB0_BL_HI,
+			    OQO_O2_SMB0_BL_LO, curr.bl_bright);
+	}
+
+	return 0;
+}
+
+#else
+#define oqo_platform_suspend NULL
+#define oqo_platform_resume  NULL
+#endif
+
+static struct platform_driver oqo_platform_driver = {
+	.driver = {
+		   .name = "oqo-wmi",
+		   .owner = THIS_MODULE,
+		   },
+	.probe = oqo_platform_probe,
+	.remove = oqo_platform_remove,
+	.suspend = oqo_platform_suspend,
+	.resume = oqo_platform_resume,
+};
+
+static int __init oqo_wmi_init(void)
+{
+	int err;
+
+	dmi_check_system(oqo_dmis);
+
+	if (!interface && force) {
+		model = oqo_models;
+		if (wmi_has_guid(OQO_O2_AMW0_GUID))
+			interface = &AMW0_interface;
+	}
+
+	if (!interface) {
+		printk(OQO_ERR "No or unsupported WMI interface. Aborting.\n");
+		printk(OQO_ERR "Hint: Get dmidecode working and try again.\n");
+		printk(OQO_ERR "(Check \"System Management BIOS\" in BIOS)\n");
+		if (!force)
+			printk(OQO_ERR "Use the force option to skip DMI"
+			       " checking\n");
+		return -ENODEV;
+	}
+
+	err = platform_driver_register(&oqo_platform_driver);
+	if (err) {
+		printk(OQO_ERR "platform_driver_register gave %d.\n", err);
+		goto bail0;
+	}
+
+	oqo_platform_device = platform_device_alloc("oqo-wmi", -1);
+	if (!oqo_platform_device) {
+		printk(OQO_ERR "Could not allocate platform device.\n");
+		err = -ENOMEM;
+		goto bail1;
+	}
+
+	err = platform_device_add(oqo_platform_device);
+	if (err) {
+		printk(OQO_ERR "platform_device_add gave %d.\n", err);
+		platform_device_put(oqo_platform_device);
+		goto bail1;
+	}
+
+	return 0;
+
+bail1:
+	platform_driver_unregister(&oqo_platform_driver);
+bail0:
+	return err;
+}
+
+static void __exit oqo_wmi_fini(void)
+{
+	platform_device_del(oqo_platform_device);
+	platform_driver_unregister(&oqo_platform_driver);
+
+	return;
+}
+
+module_init(oqo_wmi_init);
+module_exit(oqo_wmi_fini);
-- 
1.6.1.76.gc123b


  parent reply	other threads:[~2009-01-09 22:34 UTC|newest]

Thread overview: 136+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-11-27 19:05 [PATCH] misc: Add oqo-wmi driver for model 2 OQO backlight and rfkill control Matthew Garrett
2008-11-28 19:31 ` Len Brown
2008-11-29  3:35   ` Brian S. Julin
2008-11-29  4:50     ` Matthew Garrett
2008-12-03 19:55       ` Matthew Garrett
2008-12-03 22:55         ` Sven Wegener
2008-12-03 23:00         ` Andrew Morton
2008-12-04  1:28           ` Brian S. Julin
2009-01-09  6:13         ` Len Brown
2009-01-09 12:35           ` Matthew Garrett
2009-01-09 20:09             ` Len Brown
2009-01-09 22:34           ` Len Brown [this message]
  -- strict thread matches above, loose matches on Subject: below --
2019-04-05  2:38 (unknown) Changbin Du
2018-02-12  1:39 (unknown), Alfred Cheuk Chow
2017-11-12 15:09 (unknown), Friedrich Mayrhofer
2017-10-17  7:00 (unknown), lswedroe
2017-10-15 22:07 (unknown), info
2017-10-11 19:29 (unknown), info
2017-10-09  6:17 (unknown), durrant
2017-10-06 11:55 (unknown), info
2017-10-02 20:31 (unknown), kchristopher
2017-09-29 21:29 (unknown), info
2017-09-07  7:05 (unknown), tabiadhawatef
2017-09-05 14:02 (unknown), ecaterinasuciu09
2017-08-14 16:53 (unknown), durrant
2017-08-12  1:11 (unknown), lizdebeth_
2017-08-11  9:18 (unknown), jonathan.malihan
2017-08-11  4:42 (unknown), lizdebeth_
2017-08-09  0:04 (unknown), h.piontek
2017-08-06 23:55 (unknown), webmaster
2017-08-04  5:04 (unknown), durrant
2017-08-02  1:05 (unknown), lizdebeth_
2017-08-01  4:40 (unknown), durrant
2017-07-31 11:49 (unknown), kchristopher
2017-07-18 20:28 (unknown), lizdebeth_
2017-07-17 23:02 (unknown), h.piontek
2017-07-03  1:28 (unknown), h.piontek
2017-07-02 20:26 (unknown), tabiadhawatef
2017-06-29 10:39 (unknown), lizdebeth_
2017-06-22  2:13 (unknown), ecaterinasuciu09
2017-06-20  0:47 (unknown), durrant
2017-06-15  8:37 (unknown), ecaterinasuciu09
2017-06-14  1:06 (unknown), durrant
2017-06-13  9:59 (unknown), lizdebeth_
2017-06-12  7:28 (unknown), webmaster
2017-06-10 14:34 (unknown), kbennett
2017-06-09  1:31 (unknown), durrant
2017-06-01  2:25 (unknown), kbennett
2017-05-20  8:14 (unknown), ecaterinasuciu09
2017-04-21 17:44 (unknown), Mr.Jerry Smith
2017-04-18  2:53 (unknown), h.piontek
2017-04-16  8:52 (unknown), geir.nuland
     [not found] <1771828252.1867143.1486725329404.ref@mail.yahoo.com>
     [not found] ` <1771828252.1867143.1486725329404@mail.yahoo.com>
     [not found]   ` <362116259.1841028.1486725756488@mail.yahoo.com>
     [not found]     ` <1418971482.1876011.1486725827782@mail.yahoo.com>
     [not found]       ` <781770619.1914371.1486725880495@mail.yahoo.com>
     [not found]         ` <1842722123.458239.1486738412986@mail.yahoo.com>
     [not found]           ` <1988971450.1919957.1486738465269@mail.yahoo.com>
     [not found]             ` <2009483472.1959807.1486738532101@mail.yahoo.com>
     [not found]               ` <700044894.458801.1486738592344@mail.yahoo.com>
     [not found]                 ` <1679468659.1943183.1486738646052@mail.yahoo.com>
     [not found]                   ` <162360655.2032263.1486743641678@mail.yahoo.com>
     [not found]                     ` <1111317252.1888703.1486743688716@mail.yahoo.com>
     [not found]                       ` <845911663.2021263.1486743732973@mail.yahoo.com>
     [not found]                         ` <2098808266.2026487.1486743776423@mail.yahoo.com>
     [not found]                           ` <568782206.2040087.1486743821882@mail.yahoo.com>
     [not found]                             ` <19843461.2458888.1486807264129@mail.yahoo .com>
     [not found]                               ` <641276465.2418779.1486807323305@mail.yahoo.com>
     [not found]                                 ` <390323133.2325381.1486807369870@mail.yahoo.com>
     [not found]                                   ` <1403941115.2453941.1486807413560@mail.yahoo.com>
     [not found]                                     ` <1277591292.2446250.1486807455917@mail.yahoo.com>
     [not found]                                       ` <1213689794.2466613.1486815359337@mail.yahoo.com>
     [not found]                                         ` <329782595.2476773.1486815413044@mail.yahoo.com>
     [not found]                                           ` <1973633957.2390033.1486815459726@mail.yahoo.com>
     [not found]                                             ` <1477693835.2468079.1486815506109@mail.yahoo.com>
     [not found]                                               ` <1808615318.2452083.1486815556720@mail.yahoo.com>
     [not found]                                                 ` <603828148.2508650.1486823074184@mail.yahoo.com>
     [not found]                                                   ` <1787007361.2513644.1486823124149@mail.yahoo.com>
     [not found]                                                     ` <845262684.2377129.1486823170993@mail.yahoo.com>
     [not found]                                                       ` <419777068.2512512.1486823225012@mail.yahoo.com>
     [not found]                                                         ` <232385099.2515850.1486830177167@mail.yahoo.com>
     [not found]                                                           ` <218971376.2576178.1486830217194@mail.yahoo.com>
     [not found]                                                             ` <2021140041.2546157.1486830247344@mail.yahoo.com>
     [not found]                                                               ` <448230626.2487309.1486830282386@mail.yahoo.com>
     [not found]                                                                 ` <2079672177.2544802.1486830312151@mail.yahoo.com>
     [not found]                                                                   ` <1630849281.2540966.1486902595035@mail.yahoo.com>
     [not found]                                                                     ` <1763670160.2830682.1486902646696@mail.yahoo.com>
     [not found]                                                                       ` <964451657.2841851.1486902695591@mail.yahoo.com>
     [not found]                                                                         ` <516693761.2834417.1486902743162@mail.yahoo.com>
     [not found]                                                                           ` <461796533.2811268.1486902801495@mail.yahoo.com>
     [not found]                                                                             ` <713444900.2811703.1486907914861@mail.yahoo.com>
     [not found]                                                                               ` <302588613.2808166.1486907951385@mail.yahoo.com>
     [not found]                                                                                 ` <1622557777.1213917.1486907992370@mail.yahoo.com>
     [not found]                                                                                   ` <2064564951.2810235.1486908043751@mail.yahoo.com>
     [not found]                                                                                     ` <442326396.3090755.1486973430527@mail.yahoo.com>
     [not found]                                                                                       ` <518762456.3172842.1486973474413@mail.yahoo.com>
     [not found]                                                                                         ` <522771675.3250061.1486973515470@mail.yahoo.com>
     [not found]                                                                                           ` <1528572129.3231295.1486973562972@mail.yahoo.com>
     [not found]                                                                                             ` <1997972092.3216726.1486973619057@mail.yahoo.com>
     [not found]                                                                                               ` <172315 5515.3200469.1486978792361@mail.yahoo.com>
     [not found]                                                                                                 ` <1535140240.3250394.1486978848738@mail.yahoo.com>
     [not found]                                                                                                   ` <1684778328.3209409.1486978901145@mail.yahoo.com>
     [not found]                                                                                                     ` <1677088215.3214109.1486978951402@mail.yahoo.com>
     [not found]                                                                                                       ` <864043271.2969648.1486979004523@mail.yahoo.com>
     [not found]                                                                                                         ` <1363436970.3248457.1486985168733@mail.yahoo.com>
     [not found]                                                                                                           ` <988334087.3285220.1486985218306@mail.yahoo.com>
     [not found]                                                                                                             ` <1927028744.3292897.1486985258054@mail.yahoo.com>
     [not found]                                                                                                               ` <841727306.3314561.1486985306658@mail.yahoo.com>
     [not found]                                                                                                                 ` <1530267099.3983583.1487060768443@mail.yahoo.com>
     [not found]                                                                                                                   ` <739265803.3926080.1487060816047@mail.yahoo.com>
     [not found]                                                                                                                     ` <1513400527.3968180.1487060856715@mail.yahoo.com>
     [not found]                                                                                                                       ` <531389155.4002715.1487060905075@mail.yahoo.com>
     [not found]                                                                                                                         ` <895049946.4061735.1487060954342@mail.yahoo.com>
     [not found]                                                                                                                           ` <1784122856.4044434.1487065908235@mail.yahoo.com>
     [not found]                                                                                                                             ` <1407078631.4020482.1487065957415@mail.yahoo.com>
     [not found]                                                                                                                               ` <1839327034 .4067597.1487065997225@mail.yahoo.com>
     [not found]                                                                                                                                 ` <810244449.4029107.1487066033810@mail.yahoo.com>
     [not found]                                                                                                                                   ` <1095781515.608534.1487066088438@mail.yahoo.com>
     [not found]                                                                                                                                     ` <106819403.4076657.1487073151896@mail.yahoo.com>
     [not found]                                                                                                                                       ` <389117608.4110828.1487073193205@mail.yahoo.com>
     [not found]                                                                                                                                         ` <386158465.4086294.1487073241229@mail.yahoo.com>
     [not found]                                                                                                                                           ` <955001158.3929300.1487073321885@mail.yahoo.com>
     [not found]                                                                                                                                             ` <701155907.390358.1487239942052@mail.yahoo.com>
     [not found]                                                                                                                                               ` <83923247.405083.1487239972689@mail.yahoo.com>
     [not found]                                                                                                                                                 ` <1733323291.394405.1487240008443@mail.yahoo.com>
     [not found]                                                                                                                                                   ` <1295161698.440984.1487248883658@mail.yahoo.com>
     [not found]                                                                                                                                                     ` <1210050213.428345.1487248904890@mail.yahoo.com>
     [not found]                                                                                                                                                       ` <631568915.469124.1487248931915@mail.yahoo.com>
     [not found]                                                                                                                                                         ` <287722.487339.1487248955653@mail.yahoo.com>
     [not found]                                                                                                                                                           ` <1417564216.1088735.1487316834261@mail.yahoo.com>
     [not found]                                                                                                                                                             ` <713636483.1053558.1487316903911@mail.yahoo.com>
     [not found]                                                                                                                                                               ` <763613544.2280970.1487739924449@mail.yahoo.com>
2017-02-22  5:06                                                                                                                                                                 ` (unknown) DR ANDASON PHILLIP
2017-01-11 12:54 (unknown), info
2017-01-11  2:43 (unknown), info
2016-12-14  9:45 (unknown), Mr Friedrich Mayrhofer
2016-12-03 17:18 (unknown), lswedroe
2016-11-29  5:51 (unknown), h.piontek
2016-05-16 15:47 (unknown), kchristopher
     [not found] <1230452577.2656353.1452358502257.JavaMail.yahoo.ref@mail.yahoo.com>
     [not found] ` <1230452577.2656353.1452358502257.JavaMail.yahoo@mail.yahoo.com>
     [not found]   ` <1716277561.2658732.1452358529527.JavaMail.yahoo@mail.yahoo.com>
     [not found]     ` <1968105255.2669152.1452358552424.JavaMail.yahoo@mail.yahoo.com>
     [not found]       ` <1793717263.2678134.1452358585833.JavaMail.yahoo@mail.yahoo.com>
     [not found]         ` <104083555.2657451.1452358609611.JavaMail.yahoo@mail.yahoo.com>
     [not found]           ` <1076601057.3198277.1452516604891.JavaMail.yahoo@mail.yahoo.com>
     [not found]             ` <41508990.3349881.1452516637416.JavaMail.yahoo@mail.yahoo.com>
     [not found]               ` <819791717.3309213.1452516666178.JavaMail.yahoo@mail.yahoo.com>
     [not found]                 ` <1859844893.3359033.1452516703329.JavaMail.yahoo@mail.yahoo.com>
     [not found]                   ` <1209900645.3363940.1452516734366.JavaMail.yahoo@mail.yahoo.com>
     [not found]                     ` <722407557.4055610.1452598179301.JavaMail.yahoo@mail.yahoo.com>
     [not found]                       ` <15338576 12.3999360.1452598216321.JavaMail.yahoo@mail.yahoo.com>
     [not found]                         ` <1217152484.4000448.1452598253742.JavaMail.yahoo@mail.yahoo.com>
     [not found]                           ` <1959197406.3852824.1452598286434.JavaMail.yahoo@mail.yahoo.com>
     [not found]                             ` <1013645440.3980510.1452598322091.JavaMail.yahoo@mail.yahoo.com>
     [not found]                               ` <95607198.4055649.1452605534361.JavaMail.yahoo@mail.yahoo.com>
     [not found]                                 ` <1194909989.4116724.1452605572069.JavaMail.yahoo@mail.yahoo.com>
     [not found]                                   ` <1872344360.3900958.1452605601355.JavaMail.yahoo@mail.yahoo.com>
     [not found]                                     ` <1767520438.4020646.1452605627006.JavaMail.yahoo@mail.yahoo.com>
     [not found]                                       ` <1255893341.4037472.1452605666412.JavaMail.yahoo@mail.yahoo.com>
     [not found]                                         ` <1820757037.4080667.1452611491583.JavaMail.yahoo@mail.yahoo.com>
     [not found]                                           ` <814472098.3998614.1452611520894.JavaMail.yahoo@mail.yahoo.com>
     [not found]                                             ` <23225522.4108865.1452611548069.JavaMail.yahoo@mail.yahoo.com>
     [not found]                                               ` <236986486.3890202.1452611577845 .JavaMail.yahoo@mail.yahoo.com>
     [not found]                                                 ` <1340761007.4094730.1452611613509.JavaMail.yahoo@mail.yahoo.com>
     [not found]                                                   ` <439573249.4578557.1452672949962.JavaMail.yahoo@mail.yahoo.com>
     [not found]                                                     ` <293944960.4600324.1452672974687.JavaMail.yahoo@mail.yahoo.com>
     [not found]                                                       ` <897301602.4582950.1452672999040.JavaMail.yahoo@mail.yahoo.com>
     [not found]                                                         ` <363180375.4633257.1452673107225.JavaMail.yahoo@mail.yahoo.com>
     [not found]                                                           ` <350602177.974245.1452673141911.JavaMail.yahoo@mail.yahoo.com>
     [not found]                                                             ` <2022702308.4673139.1452680322610.JavaMail.yahoo@mail.yahoo.com>
     [not found]                                                               ` <1610020632.4629393.1452680350391.JavaMail.yahoo@mail.yahoo.com>
     [not found]                                                                 ` <333140794.4700519.1452680379371.JavaMail.yahoo@mail.yahoo.com>
     [not found]                                                                   ` <902983052.4645436.1452680417052.JavaMail.yahoo@mail.yahoo.com>
     [not found]                                                                     ` <125862452.4636825.1452680441734.JavaMail.yahoo@mail.yahoo.com>
     [not found]                                                                       ` <1094615852.4555477.1452693216093.JavaMail.yahoo@mail.yahoo. com>
     [not found]                                                                         ` <1867966714.4704436.1452693251194.JavaMail.yahoo@mail.yahoo.com>
     [not found]                                                                           ` <1255931484.4715204.1452693303099.JavaMail.yahoo@mail.yahoo.com>
     [not found]                                                                             ` <676467399.4479337.1452693338710.JavaMail.yahoo@mail.yahoo.com>
     [not found]                                                                               ` <1072618565.4705486.1452693387868.JavaMail.yahoo@mail.yahoo.com>
     [not found]                                                                                 ` <349706432.5276940.1452761261680.JavaMail.yahoo@mail.yahoo.com>
     [not found]                                                                                   ` <1552663378.5301783.1452761333744.JavaMail.yahoo@mail.yahoo.com>
     [not found]                                                                                     ` <630829133.5235320.1452761390703.JavaMail.yahoo@mail.yahoo.com>
     [not found]                                                                                       ` <907595456.4817500.1452761429539.JavaMail.yahoo@mail.yahoo.com>
     [not found]                                                                                         ` <479694266.4655689.1452761465958.JavaMail.yahoo@mail.yahoo.com>
     [not found]                                                                                           ` <370060311.5056220.1452767015476.JavaMail.yahoo@mail.yahoo.com>
     [not found]                                                                                             ` <264912373.5348086.1452767045383.JavaMail.yahoo@mail.yahoo.com>
     [not found]                                                                                               ` <1437672429.5335947.1452767075562.JavaMail.yahoo@mail.yahoo.com>
     [not found]                                                                                                 ` <519394679.5322836.1 452767124717.JavaMail.yahoo@mail.yahoo.com>
     [not found]                                                                                                   ` <936190297.5397294.1452767167196.JavaMail.yahoo@mail.yahoo.com>
     [not found]                                                                                                     ` <1476994894.5354271.1452774514304.JavaMail.yahoo@mail.yahoo.com>
     [not found]                                                                                                       ` <541683891.5389976.1452774549771.JavaMail.yahoo@mail.yahoo.com>
     [not found]                                                                                                         ` <1394137301.5340313.1452774577917.JavaMail.yahoo@mail.yahoo.com>
     [not found]                                                                                                           ` <390399949.605337.1452774618458.JavaMail.yahoo@mail.yahoo.com>
     [not found]                                                                                                             ` <1993563799.5413836.1452774647836.JavaMail.yahoo@mail.yahoo.com>
     [not found]                                                                                                               ` <1588997907.5378977.1452782998199.JavaMail.yahoo@mail.yahoo.com>
     [not found]                                                                                                                 ` <1636012964.5460028.1452783074623.JavaMail.yahoo@mail.yahoo.com>
     [not found]                                                                                                                   ` <115120680.5365813.1452783117293.JavaMail.yahoo@mail.yahoo.com>
     [not found]                                                                                                                     ` <1623632786.5437831.1452783145983.JavaMail.yahoo@mail.yahoo.com>
     [not found]                                                                                                                       ` <301407935.5573640.1452853835667.JavaMail.yahoo@mail.yahoo.com>
     [not found]                                                                                                                         ` <1222680849.4926598.1455622523774.JavaMail.yahoo@mail.yahoo.com>
2016-02-16 11:36                                                                                                                           ` (unknown) WESTERN UNION MONEY TRANSFER
2015-09-27 10:22 (unknown), Alan Beamer
2015-09-23 17:16 (unknown), funds1222222
2015-09-07 19:34 (unknown), Mary Williams
2015-08-20  7:12 (unknown), Mark Singer
2015-07-01 11:53 (unknown), Sasnett_Karen
2015-04-14  2:06 (unknown) Joan
2015-03-12 11:49 (unknown), pepa6.es
2015-03-09  4:09 (unknown), Mrs. Olga
2014-11-20  2:49 (unknown), James Rodriguez
     [not found] <1570038211.167595.1414613146892.JavaMail.yahoo@jws10056.mail.ne1.yahoo.com>
     [not found] ` <1835234304.171617.1414613165674.JavaMail.yahoo@jws10089.mail.ne1.yahoo.com>
     [not found]   ` <1938862685.172387.1414613200459.JavaMail.yahoo@jws100180.mail.ne1.yahoo.com>
     [not found]     ` <705402329.170339.1414613213653.JavaMail.yahoo@jws10087.mail.ne1.yahoo.com>
     [not found]       ` <760168749.169371.1414613227586.JavaMail.yahoo@jws10082.mail.ne1.yahoo.com>
     [not found]         ` <1233923671.167957.1414613439879.JavaMail.yahoo@jws10091.mail.ne1.yahoo.com>
     [not found]           ` <925985882.172122.1414613520734.JavaMail.yahoo@jws100207.mail.ne1.yahoo.com>
     [not found]             ` <1216694778.172990.1414613570775.JavaMail.yahoo@jws100152.mail.ne1.yahoo.com>
     [not found]               ` <1213035306.169838.1414613612716.JavaMail.yahoo@jws10097.mail.ne1.yahoo.com>
     [not found]                 ` <2058591563.172973.1414613668636.JavaMail.yahoo@jws10089.mail.ne1.yahoo.com>
     [not found]                   ` <1202030640.175493 .1414613712352.JavaMail.yahoo@jws10036.mail.ne1.yahoo.com>
     [not found]                     ` <1111049042.175610.1414613739099.JavaMail.yahoo@jws100165.mail.ne1.yahoo.com>
     [not found]                       ` <574125160.175950.1414613784216.JavaMail.yahoo@jws100158.mail.ne1.yahoo.com>
     [not found]                         ` <1726966600.175552.1414613846198.JavaMail.yahoo@jws100190.mail.ne1.yahoo.com>
     [not found]                           ` <976499752.219775.1414613888129.JavaMail.yahoo@jws100101.mail.ne1.yahoo.com>
     [not found]                             ` <1400960529.171566.1414613936238.JavaMail.yahoo@jws10059.mail.ne1.yahoo.com>
     [not found]                               ` <1333619289.175040.1414613999304.JavaMail.yahoo@jws100196.mail.ne1.yahoo.com>
     [not found]                                 ` <1038759122.176173.1414614054070.JavaMail.yahoo@jws100138.mail.ne1.yahoo.com>
     [not found]                                   ` <1109995533.176150.1414614101940.JavaMail.yahoo@jws100140.mail.ne1.yahoo.com>
     [not found]                                     ` <809474730.174920.1414614143971.JavaMail.yahoo@jws100154.mail.ne1.yahoo.com>
     [not found]                                       ` <1234226428.170349.1414614189490.JavaMail .yahoo@jws10056.mail.ne1.yahoo.com>
     [not found]                                         ` <1122464611.177103.1414614228916.JavaMail.yahoo@jws100161.mail.ne1.yahoo.com>
     [not found]                                           ` <1350859260.174219.1414614279095.JavaMail.yahoo@jws100176.mail.ne1.yahoo.com>
     [not found]                                             ` <1730751880.171557.1414614322033.JavaMail.yahoo@jws10060.mail.ne1.yahoo.com>
     [not found]                                               ` <642429550.177328.1414614367628.JavaMail.yahoo@jws100165.mail.ne1.yahoo.com>
     [not found]                                                 ` <1400780243.20511.1414614418178.JavaMail.yahoo@jws100162.mail.ne1.yahoo.com>
     [not found]                                                   ` <2025652090.173204.1414614462119.JavaMail.yahoo@jws10087.mail.ne1.yahoo.com>
     [not found]                                                     ` <859211720.180077.1414614521867.JavaMail.yahoo@jws100147.mail.ne1.yahoo.com>
     [not found]                                                       ` <258705675.173585.1414614563057.JavaMail.yahoo@jws10078.mail.ne1.yahoo.com>
     [not found]                                                         ` <1773234186.173687.1414614613736.JavaMail.yahoo@jws10078.mail.ne1.yahoo.com>
     [not found]                                                           ` <1132079010.173033.1414614645153.JavaMail.yahoo@jws10066.mail.ne1.ya hoo.com>
     [not found]                                                             ` <1972302405.176488.1414614708676.JavaMail.yahoo@jws100166.mail.ne1.yahoo.com>
     [not found]                                                               ` <1713123000.176308.1414614771694.JavaMail.yahoo@jws10045.mail.ne1.yahoo.com>
     [not found]                                                                 ` <299800233.173413.1414614817575.JavaMail.yahoo@jws10066.mail.ne1.yahoo.com>
     [not found]                                                                   ` <494469968.179875.1414614903152.JavaMail.yahoo@jws100144.mail.ne1.yahoo.com>
     [not found]                                                                     ` <2136945987.171995.1414614942776.JavaMail.yahoo@jws10091.mail.ne1.yahoo.com>
     [not found]                                                                       ` <257674219.177708.1414615022592.JavaMail.yahoo@jws100181.mail.ne1.yahoo.com>
     [not found]                                                                         ` <716927833.181664.1414615075308.JavaMail.yahoo@jws100145.mail.ne1.yahoo.com>
     [not found]                                                                           ` <874940984.178797.1414615132802.JavaMail.yahoo@jws100157.mail.ne1.yahoo.com>
     [not found]                                                                             ` <1283488887.176736.1414615187657.JavaMail.yahoo@jws100183.mail.ne1.yahoo.com>
     [not found]                                                                               ` <777665713.175887.1414615236293.JavaMail.yahoo@jws10083.mail.ne1.yahoo.com>
     [not found]                                                                                 ` <585395776.176325.1 414615298260.JavaMail.yahoo@jws10033.mail.ne1.yahoo.com>
     [not found]                                                                                   ` <178352191.221832.1414615355071.JavaMail.yahoo@jws100104.mail.ne1.yahoo.com>
     [not found]                                                                                     ` <108454213.176606.1414615522058.JavaMail.yahoo@jws10053.mail.ne1.yahoo.com>
     [not found]                                                                                       ` <1617229176.177502.1414615563724.JavaMail.yahoo@jws10030.mail.ne1.yahoo.com>
     [not found]                                                                                         ` <324334617.178254.1414615625247.JavaMail.yahoo@jws10089.mail.ne1.yahoo.com>
     [not found]                                                                                           ` <567135865.82376.1414615664442.JavaMail.yahoo@jws100136.mail.ne1.yahoo.com>
     [not found]                                                                                             ` <764758300.179669.1414615711821.JavaMail.yahoo@jws100107.mail.ne1.yahoo.com>
     [not found]                                                                                               ` <1072855470.183388.1414615775798.JavaMail.yahoo@jws100147.mail.ne1.yahoo.com>
     [not found]                                                                                                 ` <2134283632.173314.1414615831322.JavaMail.yahoo@jws10094.mail.ne1.yahoo.com>
     [not found]                                                                                                   ` <1454491902.178612.1414615875076.JavaMail.yahoo@jws100209.mail.ne1.yahoo.com>
     [not found]                                                                                                     ` <1480763910.146593.1414958012342.JavaMail.yahoo@jws10033.mail.ne1.yahoo.com>
2014-11-02 19:54                                                                                                       ` (unknown) MRS GRACE MANDA
     [not found] <379159348.236010.1414136194059.JavaMail.yahoo@jws100115.mail.ne1.yahoo.com>
     [not found] ` <2105581186.226848.1414136236806.JavaMail.yahoo@jws10075.mail.ne1.yahoo.com>
     [not found]   ` <1051957008.227483.1414136297815.JavaMail.yahoo@jws10029.mail.ne1.yahoo.com>
     [not found]     ` <1990094002.223892.1414136333799.JavaMail.yahoo@jws10070.mail.ne1.yahoo.com>
     [not found]       ` <1126356209.227508.1414136378165.JavaMail.yahoo@jws10065.mail.ne1.yahoo.com>
     [not found]         ` <1809025612.238459.1414136438121.JavaMail.yahoo@jws100132.mail.ne1.yahoo.com>
     [not found]           ` <182198586.235758.1414136460637.JavaMail.yahoo@jws100111.mail.ne1.yahoo.com>
     [not found]             ` <909433265.227445.1414136497085.JavaMail.yahoo@jws10076.mail.ne1.yahoo.com>
     [not found]               ` <2067346387.228592.1414136531032.JavaMail.yahoo@jws10059.mail.ne1.yahoo.com>
     [not found]                 ` <1338634683.232208.1414136563767.JavaMail.yahoo@jws100154.mail.ne1.yahoo.com>
     [not found]                   ` <449338023.228287 .1414136671979.JavaMail.yahoo@jws10041.mail.ne1.yahoo.com>
     [not found]                     ` <873633883.236777.1414136837141.JavaMail.yahoo@jws100144.mail.ne1.yahoo.com>
     [not found]                       ` <1450865537.233065.1414136867203.JavaMail.yahoo@jws100202.mail.ne1.yahoo.com>
     [not found]                         ` <894047528.238337.1414136909054.JavaMail.yahoo@jws100124.mail.ne1.yahoo.com>
     [not found]                           ` <2129271673.233931.1414137070348.JavaMail.yahoo@jws100170.mail.ne1.yahoo.com>
     [not found]                             ` <936824743.234404.1414137120292.JavaMail.yahoo@jws100177.mail.ne1.yahoo.com>
     [not found]                               ` <412094225.227214.1414137242898.JavaMail.yahoo@jws10049.mail.ne1.yahoo.com>
     [not found]                                 ` <94250903.229372.1414137339459.JavaMail.yahoo@jws100196.mail.ne1.yahoo.com>
     [not found]                                   ` <991907733.235702.1414137504062.JavaMail.yahoo@jws100138.mail.ne1.yahoo.com>
     [not found]                                     ` <1552034677.229828.1414137605003.JavaMail.yahoo@jws10051.mail.ne1.yahoo.com>
     [not found]                                       ` <362591792.236894.1414137654764.JavaMail.yahoo @jws100107.mail.ne1.yahoo.com>
     [not found]                                         ` <1596010505.233988.1414137723340.JavaMail.yahoo@jws100167.mail.ne1.yahoo.com>
     [not found]                                           ` <1056969615.239752.1414137798638.JavaMail.yahoo@jws100100.mail.ne1.yahoo.com>
     [not found]                                             ` <535130348.238991.1414137929077.JavaMail.yahoo@jws100133.mail.ne1.yahoo.com>
     [not found]                                               ` <653289865.229391.1414137978245.JavaMail.yahoo@jws10040.mail.ne1.yahoo.com>
     [not found]                                                 ` <1959086951.235165.1414138040411.JavaMail.yahoo@jws100184.mail.ne1.yahoo.com>
     [not found]                                                   ` <731191736.229846.1414138093768.JavaMail.yahoo@jws10055.mail.ne1.yahoo.com>
     [not found]                                                     ` <434432133.231415.1414138139665.JavaMail.yahoo@jws10091.mail.ne1.yahoo.com>
     [not found]                                                       ` <2012248480.229472.1414138205807.JavaMail.yahoo@jws10075.mail.ne1.yahoo.com>
     [not found]                                                         ` <731434736.231447.1414138253699.JavaMail.yahoo@jws10031.mail.ne1.yahoo.com>
     [not found]                                                           ` <451657850.237728.1414138304825.JavaMail.yahoo@jws100117.mail.ne1.yahoo.com >
     [not found]                                                             ` <662951596.240326.1414138359171.JavaMail.yahoo@jws100126.mail.ne1.yahoo.com>
     [not found]                                                               ` <1040659277.229506.1414138423348.JavaMail.yahoo@jws10077.mail.ne1.yahoo.com>
     [not found]                                                                 ` <441533089.228987.1414138547174.JavaMail.yahoo@jws10049.mail.ne1.yahoo.com>
     [not found]                                                                   ` <1974760882.229277.1414138585111.JavaMail.yahoo@jws10033.mail.ne1.yahoo.com>
     [not found]                                                                     ` <276341592.162417.1414157383319.JavaMail.yahoo@jws100181.mail.ne1.yahoo.com>
     [not found]                                                                       ` <2095882099.75102.1414157435417.JavaMail.yahoo@jws100123.mail.ne1.yahoo.com>
     [not found]                                                                         ` <1233471366.270903.1414157467817.JavaMail.yahoo@jws100126.mail.ne1.yahoo.com>
     [not found]                                                                           ` <1439410171.268594.1414157540720.JavaMail.yahoo@jws100169.mail.ne1.yahoo.com>
     [not found]                                                                             ` <1005333160.265385.1414157597386.JavaMail.yahoo@jws100167.mail.ne1.yahoo.com>
     [not found]                                                                               ` <460982177.261014.1414157965646.JavaMail.yahoo@jws10093.mail.ne1.yahoo.com>
     [not found]                                                                                 ` <46274119.268852.14141580 93889.JavaMail.yahoo@jws100107.mail.ne1.yahoo.com>
     [not found]                                                                                   ` <212519260.375090.1414220897917.JavaMail.yahoo@jws100152.mail.ne1.yahoo.com>
     [not found]                                                                                     ` <302834607.370076.1414221156462.JavaMail.yahoo@jws10086.mail.ne1.yahoo.com>
     [not found]                                                                                       ` <1335716414.378514.1414221244370.JavaMail.yahoo@jws100141.mail.ne1.yahoo.com>
     [not found]                                                                                         ` <1298331734.378549.1414221279424.JavaMail.yahoo@jws100141.mail.ne1.yahoo.com>
     [not found]                                                                                           ` <1032654278.369386.1414221328045.JavaMail.yahoo@jws10072.mail.ne1.yahoo.com>
     [not found]                                                                                             ` <1656851567.374878.1414221358827.JavaMail.yahoo@jws100203.mail.ne1.yahoo.com>
     [not found]                                                                                               ` <1827004888.381323.1414221389496.JavaMail.yahoo@jws100113.mail.ne1.yahoo.com>
     [not found]                                                                                                 ` <165227956.371393.1414221427540.JavaMail.yahoo@jws10028.mail.ne1.yahoo.com>
     [not found]                                                                                                   ` <1854435824.367889.1414221461749.JavaMail.yahoo@jws10046.mail.ne1.yahoo.com>
     [not found]                                                                                                     ` <1029456579.471640.1414325300884.JavaMail.yahoo@jws100103.mail.ne1.yahoo.com>
2014-10-26 12:08                                                                                                       ` (unknown) STANDARD BANK
2014-03-23 13:48 (unknown), Fiser, Sarah A.
2014-02-28 11:55 (unknown), Juanita Brunelle
2013-12-21 16:48 (unknown), Alex Barattini
2013-10-12 20:31 (unknown), Innocent Eleazu
2013-06-26 21:31 (unknown), Yinghai Lu
2013-05-02  8:51 (unknown), ..
2012-10-30  4:02 [PATCH v3 7/8] ACPI, PCI: add hostbridge removal function Bjorn Helgaas
2012-10-30 17:42 ` (unknown), Yinghai Lu
2012-08-03  5:31 (unknown), Lori Holden
2012-07-24 11:46 (unknown), roboth roli company
2012-05-25 13:45 (unknown), robothroli company
2012-05-05 18:59 (unknown), Mrs Sabah Halif
2012-02-15 17:47 (unknown), Ann Adams
2011-11-24  4:12 (unknown) Grenfell
2011-10-18  6:43 (unknown), Benjamin Albert
2011-09-16  4:35 (unknown) Bar Yasser
2011-08-16 14:56 (unknown), Mr.Vincent Cheng
2011-08-04 16:38 (unknown), Mr. Vincent Cheng
2011-07-21 15:52 (unknown), Mr.Vincent Cheng 
2011-07-15 17:07 (unknown), Mr. Vincent Cheng Chuen
2011-06-15 17:28 (unknown), web.1
2011-05-03 16:05 (unknown), ken leo
2011-01-28 11:31 (unknown), ECOWAS/UNITED NATIONS
2011-01-19  0:47 (unknown), ECOWAS/UNITED NATIONS
2011-01-17 13:05 (unknown), Shougang Group
2011-01-09 18:06 (unknown), ECOWAS/UNITED NATIONS
2010-12-15 10:18 (unknown), Chen Gong
2010-11-28 12:47 (unknown) Euro Millions
2010-11-16 13:59 (unknown), , Ming-Yang Lee
2010-11-08 12:25 (unknown), MR. MERVYN KING
2010-10-24 18:24 (unknown), CHARITY DONATION & ECOWAS
2010-10-24 18:16 (unknown), CHARITY DONATION & ECOWAS
2010-10-15  9:06 (unknown), WESTERN UNION TRANSFER
2010-09-13 19:47 [PATCH 00/25] treewide-next: Use static const char arrays Joe Perches
2010-09-14  9:14 ` (unknown) David Howells
2010-09-10 13:39 (unknown) patrick.brunet
2010-08-16 22:16 (unknown) Peter Denison
2010-05-29 23:37 (unknown), John Lee
2010-03-25  0:01 (unknown), UBS International Holdings BV
2010-01-09  1:37 (unknown), Mrs Claire Page
2009-12-05  8:09 (unknown), United Nations
2009-09-24 22:19 (unknown), Joshua C.
2009-09-21 14:21 (unknown) Kelly Bowa
2009-07-27 16:23 (unknown) vivianofferplc013
2009-06-24 11:32 (unknown), Mahmood Naderan
2009-06-24 11:31 (unknown), Mahmood Naderan
2009-03-16  5:23 (unknown), Len Brown
2009-01-30 18:07 (unknown), Webmail Help Desk
2009-01-29 17:21 (unknown), prmo
2009-01-29 17:21 (unknown), prmo
2009-01-24  4:27 (unknown), Mrs. Caroline Bryan.
2009-01-06 21:34 (unknown) FTPAdmin Kernel.org
2008-12-28 11:24 (unknown) Toralf Förster
2008-09-24  3:29 (unknown) infobobby13
2008-09-16 14:26 (unknown), OXFAM GB - UK
2008-06-17 20:04 (unknown), tbo
2008-02-10 14:31 (unknown), Mateu Soler
2008-02-06  8:49 (unknown), Jurij
2007-07-26 13:26 (unknown) Frank
2006-12-12 14:42 (unknown), Michael.Eschweiler
2006-07-07 22:51 (unknown) thermal
2006-06-21 15:27 (unknown), Brown, Len
2006-05-19  9:28 (unknown), martin schneebacher
2006-05-06  6:39 (unknown), Protasevich, Natalie
2006-03-27 18:09 (unknown) CustomerDepartament
2006-01-09  8:58 (unknown) martin schneebacher
2006-01-05  8:17 (unknown) Johan Vromans

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=alpine.LFD.2.00.0901091731540.20020@localhost.localdomain \
    --to=lenb@kernel.org \
    --cc=bri@abrij.org \
    --cc=greg@kroah.com \
    --cc=linux-acpi@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mjg59@srcf.ucam.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox