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
WARNING: multiple messages have this Message-ID (diff)
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 Date: Fri, 09 Jan 2009 17:34:08 -0500 (EST) [thread overview] 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
next prev parent reply other threads:[~2009-01-09 22:34 UTC|newest] Thread overview: 3367+ 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] 2009-01-09 22:34 ` Len Brown 2017-03-28 21:11 (unknown), George Papadrosou 2017-03-30 10:55 (unknown), Sandeepa Prabhu 2017-04-03 6:14 (unknown), Adrian Gillian Bayford 2017-04-03 6:14 (unknown), Adrian Gillian Bayford 2017-04-04 19:31 (unknown), Kristi Nikolla 2017-04-05 16:35 (unknown), bunny43200 2017-04-05 16:53 (unknown), dowen 2017-04-05 17:06 (unknown), kgbok.kezyhumh 2017-04-05 17:30 (unknown), sekretariat.mzagorski-40QDpL200RxmR6Xm/wNWPw 2017-04-05 18:10 (unknown), alters 2017-04-06 6:03 (unknown), bendis.michal 2017-04-06 8:19 (unknown), bendis.michal 2017-04-06 11:45 (unknown), j.lahoda-aRb0bU7PRFPrBKCeMvbIDA 2017-04-06 13:43 (unknown), agiva 2017-04-06 13:49 (unknown), benjamin 2017-04-06 14:05 (unknown), jacqueline.pike 2017-04-06 19:09 (unknown), David Buckley 2017-04-08 19:20 (unknown), jbmplupus-Mmb7MZpHnFY 2017-04-09 0:27 (unknown), simon.a.t.hardy 2017-04-09 2:11 (unknown), jacqueline.pike 2017-04-09 6:12 (unknown), roeper 2017-04-09 14:11 (unknown), carmen.croonquist 2017-04-09 14:27 (unknown), weingart 2017-04-09 15:30 (unknown), jha 2017-04-09 20:48 (unknown), simon.a.t.hardy 2017-04-09 20:49 (unknown), xb1402456186 2017-04-09 21:15 (unknown), ujagu8185-Re5JQEeQqe8AvxtiuMwx3w 2017-04-09 22:03 (unknown), stef.ryckmans 2017-04-09 22:03 (unknown), zem.uchastok 2017-04-09 22:07 (unknown) askeeta 2017-04-10 0:41 (unknown), amin 2017-04-10 3:30 (unknown), hp 2017-04-10 5:46 (unknown), archerrp 2017-04-10 6:51 (unknown), kathleen.gilbert 2017-04-10 8:37 (unknown), kkaplanidou 2017-04-10 9:20 (unknown), nmckenna 2017-04-10 10:18 (unknown), rueggemann 2017-04-10 11:47 (unknown), office 2017-04-11 15:47 (unknown), energi 2017-04-13 15:58 (unknown), Scott Ellentuch 2017-04-14 19:14 (unknown) David Miller 2017-04-15 13:53 (unknown), smallgroups 2017-04-15 14:07 (unknown), energi 2017-04-15 14:16 (unknown), demorton 2017-04-15 15:00 (unknown), jbmplupus-Mmb7MZpHnFY 2017-04-16 3:17 (unknown), resson-epfaOiJH9AY 2017-04-16 3:33 (unknown), ohnesorge-wiek 2017-04-16 6:21 (unknown), shwx002 2017-04-16 8:21 (unknown), jha 2017-04-16 8:52 (unknown), geir.nuland 2017-04-16 15:48 (unknown), redbeardcharters 2017-04-16 16:31 (unknown), a.skucha 2017-04-16 16:37 (unknown), bfoster 2017-04-16 17:41 (unknown) askeeta 2017-04-16 17:44 (unknown), bkjf 2017-04-16 17:49 (unknown), zem.uchastok 2017-04-16 18:30 (unknown), r67 2017-04-16 18:32 (unknown), nathalie.colle 2017-04-16 18:50 (unknown), cbordinaro 2017-04-16 19:08 (unknown), athgregory 2017-04-16 20:59 (unknown), mitch_128 2017-04-16 21:22 (unknown), ujagu8185-Re5JQEeQqe8AvxtiuMwx3w 2017-04-16 22:46 (unknown), tammyehood 2017-04-16 23:02 (unknown), brian 2017-04-16 23:57 (unknown), muirs 2017-04-17 0:43 (unknown), John Ewalt 2017-04-17 2:06 (unknown), rlm85310 2017-04-17 2:26 (unknown), wvhyvcm.abyxg 2017-04-17 3:09 (unknown), bunny43200 2017-04-17 3:38 (unknown), kgbok.kezyhumh 2017-04-17 4:06 (unknown), nkosuta-f+iqBESB6gc 2017-04-17 7:56 (unknown), lucia.germino 2017-04-17 9:12 (unknown), kelley 2017-04-17 12:59 (unknown), openhackbangalore 2017-04-17 14:38 (unknown), energi 2017-04-17 15:20 (unknown), tchidrenplytoo 2017-04-17 18:00 (unknown), j.lahoda-aRb0bU7PRFPrBKCeMvbIDA 2017-04-18 1:56 (unknown), scotte 2017-04-18 2:53 (unknown), h.piontek 2017-04-18 10:57 (unknown) catherine.verge 2017-04-18 16:05 (unknown), rlm85310 2017-04-19 4:29 (unknown), kelley 2017-04-19 16:38 (unknown), amin 2017-04-19 20:46 (unknown), hp 2017-04-20 6:33 (unknown), rueggemann 2017-04-20 12:28 (unknown), h.gerritsen12 2017-04-21 7:38 (unknown), wesley.sydnor 2017-04-21 8:30 (unknown), scotte 2017-04-21 8:36 (unknown), joseph.x.hronec 2017-04-21 9:25 (unknown), delaware.orders 2017-04-21 9:51 (unknown), Kredit 2017-04-21 11:49 (unknown), kathleen.gilbert 2017-04-21 16:59 (unknown) Mr.Jerry Smith 2017-04-21 17:06 (unknown), Mr.Jerry Smith 2017-04-21 17:07 (unknown), Mr.Jerry Smith 2017-04-21 17:15 (unknown), Mr.Jerry Smith 2017-04-21 17:24 (unknown), Mr.Jerry Smith 2017-04-21 17:40 (unknown), Mr.Jerry Smith 2017-04-21 17:44 (unknown), Mr.Jerry Smith 2017-04-21 17:54 (unknown), Mr.Jerry Smith 2017-04-26 3:57 (unknown), prasad padiyar 2017-04-26 7:36 (unknown), glolariu 2017-04-26 11:54 (unknown) Shalini Chellathurai Saroja 2017-04-28 8:20 (unknown), Anatolij Gustschin 2017-04-28 8:36 (unknown), администратор 2017-04-28 8:36 (unknown), администратор 2017-04-28 8:36 (unknown), администратор 2017-04-28 8:36 (unknown), администратор 2017-04-28 9:09 (unknown), администратор 2017-04-29 15:25 (unknown), Dmitry Bazhenov 2017-05-01 18:59 [PATCHv2 1/1] IB/ipoib: add get_settings in ethtool Doug Ledford [not found] ` <1493665155.3041.186.camel-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> 2017-05-04 5:24 ` (unknown), Zhu Yanjun 2017-05-04 13:20 (unknown), Steve French 2017-05-10 7:23 (unknown), kelley 2017-05-11 1:02 (unknown), info 2017-05-14 3:19 (unknown), unixkeeper 2017-05-15 23:19 (unknown), bcohen 2017-05-15 23:49 (unknown), morice.diane 2017-05-16 3:06 (unknown), armiksanaye 2017-05-16 6:37 (unknown), momofr 2017-05-17 7:10 (unknown), 1.10.0812112155390.21775 2017-05-17 10:59 (unknown), anita.traylor 2017-05-17 13:39 (unknown), J Walker 2017-05-17 18:42 (unknown), stef.ryckmans 2017-05-18 13:40 (unknown), hp 2017-05-18 13:41 (unknown), alters 2017-05-18 14:13 (unknown), agiva 2017-05-18 16:47 (unknown), susan.christian 2017-05-18 19:22 (unknown), lucia.germino 2017-05-19 3:34 (unknown), openhackbangalore 2017-05-19 4:32 (unknown), archerrp 2017-05-19 6:45 (unknown), j.lahoda-aRb0bU7PRFPrBKCeMvbIDA 2017-05-19 11:45 (unknown), counselling-30L6jp03H7UtpYsHHOQ6Llpr/1R2p/CL 2017-05-19 12:56 (unknown), kindergartenchaos2 2017-05-19 13:31 (unknown), office 2017-05-19 14:51 (unknown), citydesk 2017-05-19 15:35 (unknown), susan.christian 2017-05-19 16:59 (unknown), zumbalisa 2017-05-20 0:26 (unknown), brian 2017-05-20 0:40 (unknown), sophie.norman 2017-05-20 1:09 (unknown), board 2017-05-20 8:14 (unknown), ecaterinasuciu09 2017-05-20 9:40 (unknown), mgriffit 2017-05-20 11:03 (unknown), pohut00 2017-05-20 11:47 (unknown), john.dahlberg 2017-05-20 12:27 (unknown), ajae 2017-05-20 14:29 (unknown), cv 2017-05-20 16:22 (unknown), alters 2017-05-20 17:45 (unknown), counselling-30L6jp03H7UtpYsHHOQ6Llpr/1R2p/CL 2017-05-20 18:58 (unknown), office 2017-05-20 20:00 (unknown), citydesk 2017-05-20 21:16 (unknown), h.gerritsen12 2017-05-21 8:42 (unknown), brucet 2017-05-21 8:55 (unknown), agiva 2017-05-21 8:55 (unknown), benjamin 2017-05-21 9:17 (unknown), jacqueline.pike 2017-05-21 11:13 (unknown), mariobronti 2017-05-21 11:38 (unknown), susan.christian 2017-05-21 11:59 (unknown), anita.traylor 2017-05-21 13:56 (unknown), sibolt.mulder-b60u5d1xRcFWk0Htik3J/w 2017-05-21 16:36 (unknown), x1kn8fk 2017-05-21 20:35 (unknown), armiksanaye 2017-05-22 0:57 (unknown), mari.kayhko 2017-05-22 16:10 (unknown), mitch_128 2017-05-22 20:39 (unknown), horizon 2017-05-22 22:32 (unknown), patientcentral 2017-05-23 2:19 (unknown), mdavis 2017-05-23 4:53 (unknown), nfrankiyamu 2017-05-23 7:38 (unknown), scotte 2017-05-23 8:42 (unknown), delaware.orders 2017-05-23 9:36 (unknown), bendis.michal 2017-05-23 16:24 (unknown), agiva 2017-05-23 16:29 (unknown), benjamin 2017-05-23 22:44 (unknown), noord-holland 2017-05-24 0:12 (unknown), bcohen 2017-05-24 16:26 (unknown), natasha.glauser 2017-05-26 16:33 (unknown) Anderson McEnany < 2017-05-26 16:33 (unknown) Anderson McEnany < 2017-05-31 11:36 (unknown), p.mueller-spz-hgw-Mmb7MZpHnFY 2017-05-31 14:53 (unknown), tjcrewvolcoordinator-Re5JQEeQqe8AvxtiuMwx3w 2017-06-01 0:43 (unknown), armouralumni 2017-06-01 1:55 (unknown), cdevries 2017-06-01 2:25 (unknown), kbennett 2017-06-01 2:26 (unknown), Dave Airlie 2017-06-01 20:40 (unknown), nbensoncole81 2017-06-02 6:04 (unknown), mari.kayhko 2017-06-02 8:02 (unknown), jessica.jones-PnMVE5gNl/Vkbu+0n/iG1Q 2017-06-03 5:45 (unknown), nfrankiyamu 2017-06-03 7:17 (unknown), nbensoncole81 2017-06-04 10:30 (unknown), Yuval Mintz 2017-06-04 19:55 (unknown), archerrp 2017-06-05 0:03 (unknown), nmckenna 2017-06-05 1:08 (unknown), rueggemann 2017-06-05 4:30 (unknown), citydesk 2017-06-05 5:43 (unknown), h.gerritsen12 2017-06-05 17:32 (unknown), armouralumni 2017-06-06 7:19 (unknown), From Lori J. Robinson 2017-06-06 7:19 (unknown), From Lori J. Robinson 2017-06-06 7:19 (unknown), From Lori J. Robinson 2017-06-06 7:19 (unknown), From Lori J. Robinson 2017-06-06 20:36 (unknown), dengx 2017-06-06 23:46 (unknown), mdavis 2017-06-07 3:19 (unknown), lucia.germino 2017-06-07 7:42 (unknown), morice.diane 2017-06-07 11:43 (unknown), nhossein4212003 2017-06-07 14:00 (unknown), 1.10.0812112155390.21775 2017-06-07 21:54 (unknown), agar2000 2017-06-07 22:30 (unknown), tammyehood 2017-06-08 3:14 (unknown), kgbok.kezyhumh 2017-06-08 3:14 (unknown), agar2000 2017-06-08 5:00 (unknown), noord-holland 2017-06-08 5:41 (unknown), Oliver Carter 2017-06-08 11:31 (unknown), helga.brickl 2017-06-08 12:51 (unknown), koopk 2017-06-08 13:07 (unknown), unsubscribe.me 2017-06-08 13:35 (unknown) Yuval Shaia 2017-06-08 14:09 (unknown), service 2017-06-08 15:18 (unknown), junplzen 2017-06-08 17:26 (unknown), natasha.glauser 2017-06-08 17:59 (unknown), kirola 2017-06-08 18:00 (unknown), beautyink 2017-06-08 22:14 (unknown), bcohen 2017-06-09 0:34 (unknown), richard 2017-06-09 0:39 (unknown), susan.christian 2017-06-09 1:31 (unknown), durrant 2017-06-09 2:06 (unknown), rueggemann 2017-06-09 3:35 (unknown), office 2017-06-09 4:30 (unknown), citydesk 2017-06-09 8:02 (unknown), kholloway 2017-06-09 10:47 (unknown), tjcrewvolcoordinator-Re5JQEeQqe8AvxtiuMwx3w 2017-06-09 12:45 (unknown), Mrs Alice Walton 2017-06-09 17:38 (unknown), nfrankiyamu 2017-06-09 18:57 (unknown), editor 2017-06-09 19:04 (unknown), armouralumni 2017-06-10 5:29 (unknown), agiva 2017-06-10 5:53 (unknown), jacqueline.pike 2017-06-10 7:07 (unknown), Youichi Kanno 2017-06-10 8:23 (unknown), kindergartenchaos2 2017-06-10 13:33 (unknown), iker-KvP5wT2u2U0 2017-06-10 14:34 (unknown), kbennett 2017-06-10 20:24 (unknown), board 2017-06-10 21:03 (unknown), morice.diane 2017-06-10 21:10 (unknown), mbalhoff 2017-06-11 0:20 (unknown), service 2017-06-11 2:29 (unknown), energi 2017-06-11 3:28 (unknown), redaccion 2017-06-11 4:42 (unknown), 1.10.0812112155390.21775 2017-06-11 7:27 (unknown), roeper 2017-06-11 16:35 (unknown), mitch_128 2017-06-11 18:16 (unknown), tammyehood 2017-06-12 7:28 (unknown), webmaster 2017-06-12 10:50 (unknown), sibolt.mulder-b60u5d1xRcFWk0Htik3J/w 2017-06-12 15:02 (unknown), amin 2017-06-12 16:44 (unknown), nfrankiyamu 2017-06-12 17:13 (unknown), armiksanaye 2017-06-12 19:12 (unknown), nhossein4212003 2017-06-12 21:36 (unknown), nbensoncole81 2017-06-13 4:22 (unknown), mitch_128 2017-06-13 4:35 (unknown), ujagu8185-Re5JQEeQqe8AvxtiuMwx3w 2017-06-13 4:53 (unknown), roeper 2017-06-13 8:14 (unknown), horizon 2017-06-13 9:35 (unknown), wvhyvcm.abyxg 2017-06-13 9:59 (unknown), lizdebeth_ 2017-06-13 10:15 (unknown), nenep 2017-06-13 11:59 (unknown), susan.christian 2017-06-13 21:38 (unknown), douille.l 2017-06-14 1:06 (unknown), durrant 2017-06-14 10:27 (unknown), susan.christian 2017-06-14 11:42 (unknown), sophie.norman 2017-06-14 12:26 (unknown), sibolt.mulder-b60u5d1xRcFWk0Htik3J/w 2017-06-14 12:27 (unknown), board 2017-06-14 16:39 (unknown), nfrankiyamu 2017-06-14 19:31 (unknown), kholloway 2017-06-14 20:41 (unknown), angers 2017-06-14 21:25 (unknown), koopk 2017-06-14 22:19 (unknown), muirs 2017-06-15 8:37 (unknown), ecaterinasuciu09 2017-06-15 13:50 (unknown), pohut00 2017-06-15 14:56 (unknown), john.dahlberg 2017-06-15 17:35 (unknown), jeffrey.faulkenberg 2017-06-16 14:46 (unknown), roeper 2017-06-16 22:37 (unknown), kelley 2017-06-17 22:46 (unknown), rhsinfo 2017-06-18 3:09 (unknown), agar2000 2017-06-18 13:58 (unknown), membership 2017-06-18 14:27 (unknown), xa0ajutor 2017-06-19 9:36 (unknown), susan.christian 2017-06-19 9:57 (unknown), anita.traylor 2017-06-19 16:53 (unknown), armouralumni 2017-06-19 18:46 (unknown), chrisbi_anelyst 2017-06-19 19:58 (unknown), tjcrewvolcoordinator-Re5JQEeQqe8AvxtiuMwx3w 2017-06-20 0:47 (unknown), durrant 2017-06-20 6:29 (unknown), xa0ajutor 2017-06-20 16:31 (unknown), nfrankiyamu 2017-06-20 17:50 (unknown), editor 2017-06-20 18:45 (unknown), roeper 2017-06-20 22:49 (unknown), redaccion 2017-06-21 4:40 (unknown), kholloway 2017-06-21 6:16 (unknown), angers 2017-06-21 6:23 (unknown), chrisbi_anelyst 2017-06-21 7:32 (unknown), tjcrewvolcoordinator-Re5JQEeQqe8AvxtiuMwx3w 2017-06-21 7:43 (unknown), koopk 2017-06-21 20:10 (unknown), morice.diane 2017-06-22 2:13 (unknown), ecaterinasuciu09 2017-06-22 5:49 (unknown), noord-holland 2017-06-22 13:22 (unknown), jeffrey.faulkenberg 2017-06-22 20:22 (unknown), junplzen 2017-06-22 20:24 (unknown), koopk 2017-06-23 1:43 (unknown), horizon 2017-06-23 2:49 (unknown), mdavis 2017-06-23 4:50 (unknown), nkosuta-f+iqBESB6gc 2017-06-23 6:09 (unknown), Administrator 2017-06-23 12:26 (unknown), archerrp 2017-06-23 17:22 (unknown), richard 2017-06-23 19:27 (unknown), armouralumni 2017-06-24 0:04 (unknown), hastpass 2017-06-24 0:35 (unknown), citydesk 2017-06-24 2:32 (unknown), h.gerritsen12 2017-06-24 8:07 (unknown), j.lahoda-aRb0bU7PRFPrBKCeMvbIDA 2017-06-24 11:55 (unknown), natasha.glauser 2017-06-24 12:38 (unknown), redaccion 2017-06-24 15:03 (unknown), archerrp 2017-06-24 15:41 (unknown), benjamin 2017-06-24 19:38 (unknown), richard 2017-06-25 2:39 (unknown), bflove1-ntQ8I44N4zM 2017-06-25 3:57 (unknown), nfrankiyamu 2017-06-25 4:47 (unknown), h.gerritsen12 2017-06-25 5:14 (unknown), archerrp 2017-06-25 5:19 (unknown), nbensoncole81 2017-06-25 10:21 (unknown), richard 2017-06-25 13:23 (unknown), rueggemann 2017-06-25 16:49 (unknown), agar2000 2017-06-25 18:13 (unknown), citydesk 2017-06-25 20:10 (unknown), h.gerritsen12 2017-06-26 5:21 (unknown) Leon Romanovsky 2017-06-26 9:15 (unknown), beautyink 2017-06-26 10:22 (unknown), p.mueller-spz-hgw-Mmb7MZpHnFY 2017-06-26 15:03 (unknown), richard 2017-06-26 16:10 (unknown), susan.christian 2017-06-26 17:51 (unknown), rueggemann 2017-06-26 19:07 (unknown), eremias 2017-06-26 22:14 (unknown), citydesk 2017-06-26 22:58 (unknown), Anders Lind 2017-06-26 22:58 (unknown), Anders Lind 2017-06-27 0:08 (unknown), h.gerritsen12 2017-06-27 7:12 (unknown), loisc07 2017-06-27 7:15 (unknown), noord-holland 2017-06-27 11:59 (unknown), natasha.glauser 2017-06-28 3:22 (unknown), Administrator 2017-06-28 3:56 (unknown), системы администратор 2017-06-28 3:56 (unknown), системы администратор 2017-06-28 3:56 (unknown), системы администратор 2017-06-28 3:56 (unknown), системы администратор 2017-06-28 3:57 (unknown), системы администратор 2017-06-28 14:22 (unknown), tchidrenplytoo 2017-06-29 10:39 (unknown), lizdebeth_ 2017-06-29 12:20 (unknown), The Post Office 2017-06-29 13:46 (unknown), kholloway 2017-06-29 19:05 (unknown), morice.diane 2017-06-30 1:14 (unknown), paloma.depping 2017-06-30 2:53 (unknown), 1.10.0812112155390.21775 2017-06-30 8:29 (unknown), sibolt.mulder-b60u5d1xRcFWk0Htik3J/w 2017-07-01 11:36 (unknown), p.mueller-spz-hgw-Mmb7MZpHnFY 2017-07-01 21:28 (unknown), redaccion 2017-07-02 10:14 (unknown), armouralumni 2017-07-02 18:44 (unknown), tchidrenplytoo 2017-07-02 20:26 (unknown), tabiadhawatef 2017-07-03 1:28 (unknown), h.piontek 2017-07-03 4:44 (unknown), beautyink 2017-07-03 12:43 (unknown), mitch_128 2017-07-03 13:30 (unknown), roeper 2017-07-03 13:54 (unknown), sm-yT/95SBIOhs 2017-07-03 14:13 (unknown), tammyehood 2017-07-04 4:17 (unknown), rueggemann 2017-07-04 6:01 (unknown), xa0ajutor 2017-07-04 8:52 (unknown), citydesk 2017-07-04 10:50 (unknown), h.gerritsen12 2017-07-04 16:38 (unknown), openhackbangalore 2017-07-04 18:35 (unknown), noord-holland 2017-07-04 19:53 (unknown), tchidrenplytoo 2017-07-04 21:02 (unknown), salome.khum 2017-07-04 22:53 (unknown), j.lahoda-aRb0bU7PRFPrBKCeMvbIDA 2017-07-05 0:06 (unknown), michele 2017-07-05 0:55 (unknown), helga.brickl 2017-07-05 6:42 (unknown), angers 2017-07-05 6:55 (unknown), agiva 2017-07-05 7:00 (unknown), benjamin 2017-07-05 8:06 (unknown), koopk 2017-07-05 15:15 (unknown), armouralumni 2017-07-05 15:57 (unknown), sibolt.mulder-b60u5d1xRcFWk0Htik3J/w 2017-07-05 21:18 (unknown), een 2017-07-06 0:55 (unknown), 이성근 2017-07-06 6:10 (unknown), armouralumni 2017-07-06 14:11 (unknown), een 2017-07-06 17:35 (unknown), simon.a.t.hardy 2017-07-07 0:30 (unknown), amin 2017-07-07 1:37 (unknown), zumbalisa 2017-07-07 17:21 (unknown), pooks005 2017-07-08 11:53 (unknown), Alfred chow 2017-07-08 16:07 (unknown), netgalley 2017-07-08 17:13 (unknown), horizon 2017-07-08 18:22 (unknown), Alfred chow 2017-07-08 18:22 (unknown), Alfred chow 2017-07-09 13:02 (unknown), smallgroups 2017-07-09 18:51 (unknown), pooks005 2017-07-09 20:52 (unknown), iker-KvP5wT2u2U0 2017-07-09 23:19 (unknown), Corporate Lenders 2017-07-09 23:19 (unknown), Corporate Lenders 2017-07-09 23:29 (unknown), brian 2017-07-10 3:39 (unknown), системы администратор 2017-07-10 3:45 (unknown), системы администратор 2017-07-10 3:45 (unknown), системы администратор 2017-07-10 3:45 (unknown), системы администратор 2017-07-10 3:45 (unknown), системы администратор 2017-07-10 3:47 (unknown), системы администратор 2017-07-10 4:42 (unknown), lipa 2017-07-10 10:06 (unknown), alters 2017-07-10 12:43 (unknown), brian 2017-07-10 12:51 (unknown), lucia.germino 2017-07-10 21:37 (unknown), roeper 2017-07-10 21:53 (unknown), agiva 2017-07-10 22:07 (unknown), jacqueline.pike 2017-07-11 0:07 (unknown), protecciondatos.es 2017-07-11 16:39 (unknown), indulge-HCInDj6vYHrk4FeknX8I/ZqQE7yCjDx5 2017-07-12 0:42 (unknown), associatebusiness2009 2017-07-12 11:22 (unknown), sterrenplan.kampen 2017-07-12 19:24 (unknown), patientcentral 2017-07-13 2:27 (unknown), tomsue2000 2017-07-13 3:37 (unknown), befragung 2017-07-13 4:49 (unknown), delaware.orders 2017-07-15 12:30 (unknown), Huaisheng HS1 Ye 2017-07-16 7:25 (unknown), kim.frederiksen 2017-07-17 1:09 (unknown), kathleen.gilbert 2017-07-17 1:20 (unknown), tchidrenplytoo 2017-07-17 2:32 (unknown), salome.khum 2017-07-17 15:31 (unknown), kathleen.gilbert 2017-07-17 15:42 (unknown), tchidrenplytoo 2017-07-17 17:30 (unknown), richard 2017-07-17 21:54 (unknown), citydesk 2017-07-17 23:02 (unknown), h.piontek 2017-07-18 4:09 (unknown), armouralumni 2017-07-18 4:32 (unknown), citydesk 2017-07-18 4:50 (unknown), ying.huang-ral2JQCrhuEAvxtiuMwx3w 2017-07-18 5:45 (unknown), h.gerritsen12 2017-07-18 6:22 (unknown), sorbisches.internat 2017-07-18 11:36 (unknown), shwx002 2017-07-18 12:45 (unknown), mitch_128 2017-07-18 13:52 (unknown), stef.ryckmans 2017-07-18 15:56 (unknown), bfoster 2017-07-18 20:17 (unknown), brian 2017-07-18 20:28 (unknown), lizdebeth_ 2017-07-18 20:36 (unknown), bunny43200 2017-07-18 23:49 (unknown), helga.brickl 2017-07-19 11:11 (unknown), rhsinfo 2017-07-20 3:55 (unknown), mfr-6k8blvha/+BqlCpFK1mnLg 2017-07-20 18:43 (unknown), tbinh.minhnd 2017-07-23 23:48 (unknown), miteshriya 2017-07-25 10:27 (unknown), nick_c_huang 2017-07-25 14:56 (unknown), nhossein4212003 2017-07-25 16:36 (unknown), susan.christian 2017-07-25 18:45 (unknown), x1kn8fk 2017-07-25 18:53 (unknown), sibolt.mulder-b60u5d1xRcFWk0Htik3J/w 2017-07-25 20:01 (unknown), hp 2017-07-25 20:41 (unknown), sorbisches.internat 2017-07-25 23:24 (unknown), h.gerritsen12 2017-07-26 2:25 (unknown), tammyehood 2017-07-26 4:42 (unknown), horizon 2017-07-26 6:36 (unknown), nenep 2017-07-26 10:32 (unknown), Solen win2 2017-07-26 11:39 (unknown), chrisbi_anelyst 2017-07-26 12:48 (unknown), momofr 2017-07-26 14:20 (unknown), sterrenplan.kampen 2017-07-26 14:35 (unknown), venkatvenkatsubra 2017-07-26 20:08 (unknown), municlerk 2017-07-26 20:45 (unknown), een 2017-07-27 1:25 (unknown), info 2017-07-27 2:14 (unknown) ceph-devel 2017-07-27 2:16 (unknown) ceph-devel 2017-07-27 5:01 (unknown), hp 2017-07-27 13:00 (unknown), nfrankiyamu 2017-07-28 7:17 (unknown), doctornina 2017-07-28 7:44 (unknown), robert.berry 2017-07-28 16:02 (unknown), gdahl 2017-07-30 23:33 (unknown), daven bango 2017-07-31 10:50 (unknown), susan.christian 2017-07-31 11:33 (unknown), rhsinfo 2017-07-31 11:49 (unknown), kchristopher 2017-07-31 13:15 (unknown), sibolt.mulder-b60u5d1xRcFWk0Htik3J/w 2017-07-31 14:52 (unknown), horizon 2017-07-31 16:54 (unknown), bunny43200 2017-07-31 18:00 (unknown), robert.berry 2017-07-31 20:14 (unknown), x1kn8fk 2017-07-31 21:27 (unknown), natasha.glauser 2017-08-01 1:35 (unknown), xa0ajutor 2017-08-01 1:35 (unknown), amin 2017-08-01 3:31 (unknown), helga.brickl 2017-08-01 4:40 (unknown), durrant 2017-08-01 10:07 (unknown) Chris Ruehl 2017-08-01 12:35 (unknown), jha 2017-08-01 14:53 (unknown), Angela H. Whiteman 2017-08-01 16:33 (unknown), sterrenplan.kampen 2017-08-01 19:35 (unknown), anderslindgaard 2017-08-01 19:35 (unknown), anderslindgaard 2017-08-01 20:18 (unknown), stef.ryckmans 2017-08-01 21:03 (unknown), editor 2017-08-01 21:19 (unknown), tammyehood 2017-08-02 0:36 (unknown), richard 2017-08-02 1:05 (unknown), lizdebeth_ 2017-08-02 1:19 (unknown), nenep 2017-08-02 3:45 (unknown), системы администратор 2017-08-02 3:45 (unknown), системы администратор 2017-08-02 3:45 (unknown), системы администратор 2017-08-02 3:45 (unknown), системы администратор 2017-08-02 3:45 (unknown), helga.brickl 2017-08-02 3:47 (unknown), системы администратор 2017-08-02 4:12 (unknown), Administrator 2017-08-02 11:47 (unknown), armiksanaye 2017-08-02 12:55 (unknown), tammyehood 2017-08-02 13:58 (unknown), Will 2017-08-02 15:40 (unknown), Erma 2017-08-02 17:07 (unknown), Margery 2017-08-02 17:31 (unknown), Edmond 2017-08-02 18:05 (unknown), Angela-63XfWfWBA5k 2017-08-03 5:21 (unknown), Houston 2017-08-03 14:01 (unknown), Nora Johnson 2017-08-03 19:52 (unknown), natasha.glauser 2017-08-04 5:04 (unknown), durrant 2017-08-04 23:59 (unknown), editor 2017-08-05 11:42 (unknown), Sriram Murthy 2017-08-05 12:35 (unknown), agar2000 2017-08-05 14:08 (unknown), simon.a.t.hardy 2017-08-06 23:55 (unknown), webmaster 2017-08-07 4:49 (unknown), sorbisches.internat 2017-08-07 7:38 (unknown), simon.a.t.hardy 2017-08-07 11:50 (unknown), 1.10.0812112155390.21775 2017-08-07 18:38 (unknown), mitch_128 2017-08-07 18:42 (unknown), susan.christian 2017-08-07 19:03 (unknown), sm-yT/95SBIOhs 2017-08-07 20:25 (unknown), editor 2017-08-07 21:05 (unknown), sibolt.mulder-b60u5d1xRcFWk0Htik3J/w 2017-08-07 23:50 (unknown), wvhyvcm.abyxg 2017-08-08 4:57 (unknown), wesley.sydnor 2017-08-08 5:57 (unknown), befragung 2017-08-08 14:49 (unknown) catherine.verge 2017-08-08 17:09 (unknown), tchidrenplytoo 2017-08-08 19:14 (unknown), eaya 2017-08-08 19:40 (unknown), citydesk 2017-08-08 20:55 (unknown), h.gerritsen12 2017-08-08 21:31 (unknown), michele 2017-08-09 0:04 (unknown), h.piontek 2017-08-09 0:41 (unknown), natasha.glauser 2017-08-09 10:20 (unknown), системы администратор 2017-08-09 10:20 (unknown), системы администратор 2017-08-09 10:20 (unknown), системы администратор 2017-08-09 10:20 (unknown), системы администратор 2017-08-09 10:21 (unknown), системы администратор 2017-08-09 13:53 (unknown), Administrador 2017-08-09 14:34 (unknown), shwx002 2017-08-09 19:36 (unknown), tammyehood 2017-08-09 19:40 (unknown), tchidrenplytoo 2017-08-09 20:25 (unknown), sterrenplan.kampen 2017-08-09 21:55 (unknown), horizon 2017-08-09 22:05 (unknown), helga.brickl 2017-08-09 23:06 (unknown), editor 2017-08-09 23:15 (unknown), wvhyvcm.abyxg 2017-08-09 23:53 (unknown), nenep 2017-08-10 0:03 (unknown), michele 2017-08-10 3:32 (unknown), kholloway 2017-08-10 9:38 (unknown), asn-request-tfHHCSmtYoI 2017-08-10 18:16 (unknown), simon.a.t.hardy 2017-08-10 21:08 (unknown), mitch_128 2017-08-10 21:36 (unknown), shriyashah 2017-08-10 22:02 (unknown), stef.ryckmans 2017-08-11 4:42 (unknown), lizdebeth_ 2017-08-11 4:57 (unknown), nenep 2017-08-11 4:59 (unknown), Administrator 2017-08-11 6:08 (unknown), администратор 2017-08-11 6:14 (unknown), администратор 2017-08-11 6:14 (unknown), администратор 2017-08-11 6:14 (unknown), администратор 2017-08-11 6:14 (unknown), администратор 2017-08-11 8:54 (unknown), helga.brickl 2017-08-11 9:18 (unknown), jonathan.malihan 2017-08-11 15:50 (unknown), 1.10.0812112155390.21775 2017-08-11 17:28 (unknown), rhsinfo 2017-08-11 20:11 (unknown), tammyehood 2017-08-11 22:09 (unknown), Chris 2017-08-12 1:11 (unknown), lizdebeth_ 2017-08-12 1:27 (unknown), nenep 2017-08-12 12:05 (unknown), agar2000 2017-08-13 15:17 (unknown), bunny43200 2017-08-14 14:57 (unknown), linwoodrvsales 2017-08-14 15:35 (unknown), agar2000 2017-08-14 16:53 (unknown), durrant 2017-08-14 17:38 (unknown), amin 2017-08-14 19:30 (unknown), sterrenplan.kampen 2017-08-15 1:55 (unknown), richard 2017-08-15 2:57 (unknown), nfrankiyamu 2017-08-15 3:38 (unknown), rueggemann 2017-08-15 4:40 (unknown), mitch_128 2017-08-15 6:08 (unknown), eumann 2017-08-15 6:50 (unknown), demorton 2017-08-15 8:46 (unknown), ccc 2017-08-15 11:16 (unknown), wvhyvcm.abyxg 2017-08-15 14:23 (unknown), helga.brickl 2017-08-15 14:45 (unknown), een 2017-08-15 17:30 (unknown), simon.a.t.hardy 2017-08-15 17:31 (unknown), nnarroyo623 2017-08-16 2:03 (unknown), xa0ajutor 2017-08-16 5:46 (unknown), kim.frederiksen 2017-08-17 21:36 (unknown), Adam Richter 2017-08-18 17:42 (unknown) Rajneesh Bhardwaj 2017-08-20 2:58 (unknown), Solen win2 2017-08-22 13:31 (unknown), vinnakota chaitanya 2017-08-23 7:23 (unknown), Xuehan Xu 2017-08-25 0:32 (unknown), agiva 2017-08-26 5:43 (unknown), carol.dallstream-WaM/PvcBqAo 2017-08-26 14:48 (unknown), nfrankiyamu 2017-08-27 10:55 (unknown), agar2000 2017-08-28 6:48 (unknown), patientcentral 2017-08-28 13:22 (unknown), dengx 2017-08-28 17:29 (unknown), befragung 2017-08-29 3:02 (unknown) catherine.verge 2017-08-29 5:40 (unknown), morice.diane 2017-08-30 0:38 (unknown), ifalqi 2017-08-30 1:37 (unknown), municlerk 2017-08-30 18:32 [PATCH] default implementation for of_find_all_nodes(...) Artur Lorincz [not found] ` <1504117946-3958-1-git-send-email-larturus2-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 2017-09-24 15:50 ` (unknown), Artur Lorincz 2017-10-06 19:31 ` (unknown), Artur Lorincz 2017-10-08 16:28 ` (unknown), Artur Lorincz 2017-08-30 19:49 (unknown), susan.christian 2017-08-30 20:26 (unknown), anita.traylor 2017-08-31 0:58 (unknown), info 2017-08-31 1:39 (unknown) m.wierczynska 2017-08-31 4:52 (unknown), archerrp 2017-08-31 8:20 (unknown), jessica.jones-PnMVE5gNl/Vkbu+0n/iG1Q 2017-08-31 9:54 (unknown), info 2017-08-31 12:23 (unknown), mark.robinson 2017-08-31 15:40 (unknown), sterrenplan.kampen 2017-08-31 18:41 (unknown), helga.brickl 2017-09-01 1:48 (unknown), agar2000 2017-09-01 1:48 (unknown), doctornina 2017-09-01 2:30 (unknown), robert.berry 2017-09-01 4:05 (unknown), andrewf 2017-09-01 4:59 (unknown), adriix.addy 2017-09-01 6:21 (unknown), zita.latex 2017-09-01 8:16 (unknown), financialaid 2017-09-01 11:40 (unknown), witt.kohl 2017-09-01 15:00 (unknown), ujagu8185-Re5JQEeQqe8AvxtiuMwx3w 2017-09-01 15:30 (unknown), stef.ryckmans 2017-09-01 19:52 (unknown), sunaina 2017-09-01 20:58 (unknown), wvhyvcm.abyxg 2017-09-01 21:32 (unknown), nenep 2017-09-01 21:57 (unknown), umpvav-YDxpq3io04c 2017-09-01 22:51 (unknown), zumbalisa 2017-09-01 22:55 (unknown), redaccion 2017-09-02 0:58 (unknown), smallgroups 2017-09-02 1:59 (unknown), danielle.picarda2 2017-09-02 2:35 (unknown), jbmplupus-Mmb7MZpHnFY 2017-09-02 2:39 (unknown), een 2017-09-02 2:47 (unknown), nbensoncole81 2017-09-02 6:40 (unknown), simon.a.t.hardy 2017-09-02 23:56 (unknown), netgalley 2017-09-03 21:26 (unknown), cl_luzcc 2017-09-03 21:51 (unknown), xb028930336 2017-09-03 22:54 (unknown), sherrilyn 2017-09-04 2:13 (unknown), x1kn8fk 2017-09-04 2:33 (unknown), marketing 2017-09-04 5:14 (unknown), nelcastellodicarta 2017-09-04 12:17 (unknown), noord-holland 2017-09-04 23:46 (unknown), sterrenplan.kampen 2017-09-05 1:51 (unknown), halinajan-4Uo9UdwAbX8 2017-09-05 2:43 (unknown), xb028930336 2017-09-05 11:11 (unknown), inn 2017-09-05 12:51 (unknown), ifalqi 2017-09-05 14:02 (unknown), ecaterinasuciu09 2017-09-05 16:31 (unknown), mgriffit 2017-09-05 18:07 (unknown), bfoster 2017-09-05 18:38 (unknown), john.dahlberg 2017-09-05 23:34 (unknown), kkaplanidou 2017-09-06 3:57 (unknown), informationrequest 2017-09-07 4:02 (unknown), dengx 2017-09-07 7:05 (unknown), tabiadhawatef 2017-09-10 6:22 (unknown), Youichi Kanno 2017-09-11 19:35 (unknown) Helge Deller 2017-09-11 20:10 (unknown), roeper 2017-09-12 18:53 (unknown), pooks005 2017-09-12 19:16 (unknown), cl_luzcc 2017-09-12 19:45 (unknown), edo.hlaca 2017-09-12 22:07 (unknown), marketing 2017-09-13 4:21 (unknown), natasha.glauser 2017-09-13 8:56 (unknown), kindergartenchaos2 2017-09-15 17:01 (unknown), noreply 2017-09-15 17:29 (unknown), noreply 2017-09-15 17:30 (unknown), noreply 2017-09-19 7:47 (unknown), agar2000 2017-09-20 1:01 (unknown), ninfo 2017-09-21 7:47 (unknown), MAILER-DAEMON 2017-09-22 1:22 (unknown), unsubscribe.me 2017-09-22 1:55 (unknown), dengx 2017-09-22 3:39 (unknown), service 2017-09-22 8:41 (unknown), Adrian Gillian Bayford 2017-09-22 19:34 (unknown), John Michael 2017-09-27 17:41 (unknown), Michael Lyle 2017-09-27 19:12 (unknown), rlm85310 2017-09-27 19:30 (unknown), nbensoncole81 2017-09-28 0:21 (unknown), natasha.glauser 2017-09-28 15:08 (unknown), amin 2017-09-28 22:59 (unknown), rlm85310 2017-09-29 2:48 (unknown), Tina Aaron 2017-09-29 3:06 (unknown), jha 2017-09-29 7:26 (unknown), kelley 2017-09-29 7:44 (unknown), amin 2017-09-29 11:28 (unknown), cl_luzcc 2017-09-29 11:49 (unknown), roeper 2017-09-29 13:49 (unknown), marketing 2017-09-29 14:47 (unknown), nelcastellodicarta 2017-09-29 15:21 (unknown), natasha.glauser 2017-09-29 15:42 (unknown), noord-holland 2017-09-29 18:01 (unknown), clasico082 2017-09-29 21:29 (unknown), info 2017-09-30 14:07 (unknown), redaccion 2017-10-02 15:35 (unknown), nfrankiyamu 2017-10-02 17:38 (unknown), nbensoncole81 2017-10-02 18:00 (unknown), Solen win2 2017-10-02 18:06 (unknown), dengx 2017-10-02 20:31 (unknown), kchristopher 2017-10-03 0:03 (unknown), noord-holland 2017-10-03 0:14 (unknown), roeper 2017-10-03 0:55 (unknown), jbmplupus-Mmb7MZpHnFY 2017-10-03 7:38 (unknown), angers 2017-10-03 8:16 (unknown), morice.diane 2017-10-03 8:40 (unknown), koopk 2017-10-03 10:37 (unknown), edo.hlaca 2017-10-03 12:43 (unknown), marketing 2017-10-03 13:59 (unknown), nelcastellodicarta 2017-10-04 5:56 (unknown), morice.diane 2017-10-04 11:44 (unknown), susan.christian 2017-10-04 15:33 (unknown), membership 2017-10-04 16:11 (unknown), 1.10.0812112155390.21775 2017-10-05 6:53 (unknown), helga.brickl 2017-10-05 7:10 (unknown), mgriffit 2017-10-05 10:20 (unknown), jeffrey.faulkenberg 2017-10-05 14:24 (unknown), informationrequest 2017-10-05 15:34 (unknown), kindergartenchaos2 2017-10-06 1:43 (unknown), sophie.norman 2017-10-06 1:59 (unknown), edo.hlaca 2017-10-06 2:19 (unknown), sherrilyn 2017-10-06 5:16 (unknown), nelcastellodicarta 2017-10-06 8:31 (unknown), smallgroups 2017-10-06 11:55 (unknown), info 2017-10-07 0:31 (unknown), carmen.croonquist 2017-10-07 3:40 (unknown), agar2000 2017-10-07 4:45 (unknown), morice.diane 2017-10-08 1:26 (unknown), redaccion 2017-10-08 7:32 (unknown), cl_luzcc 2017-10-08 7:59 (unknown), edo.hlaca 2017-10-08 9:00 (unknown), pekka.enne 2017-10-08 9:52 (unknown), marketing 2017-10-08 11:08 (unknown), nelcastellodicarta 2017-10-08 14:15 (unknown), clasico082 2017-10-08 19:00 (unknown), matthias.foerster 2017-10-08 22:32 (unknown), natasha.glauser 2017-10-08 23:01 (unknown), susan.christian 2017-10-09 3:44 (unknown), roeper 2017-10-09 6:17 (unknown), durrant 2017-10-09 7:37 (unknown), Michael Lyle 2017-10-09 13:19 (unknown), carmen.croonquist 2017-10-09 15:06 (unknown), jha 2017-10-10 23:27 (unknown), editor 2017-10-11 4:11 (unknown), morice.diane 2017-10-11 7:34 (unknown), cl_luzcc 2017-10-11 8:20 (unknown), sherrilyn 2017-10-11 9:19 (unknown), pekka.enne 2017-10-11 11:49 (unknown), nelcastellodicarta 2017-10-11 19:29 (unknown), info 2017-10-11 19:55 (unknown), kindergartenchaos2 2017-10-11 22:32 (unknown), fwkz4811-DoVvmRvd3PAA2dtGD8cC2w 2017-10-12 3:08 (unknown), iker-KvP5wT2u2U0 2017-10-12 5:55 (unknown), xa0et.sirio 2017-10-12 8:17 (unknown), armouralumni 2017-10-12 11:46 (unknown), sophie.norman 2017-10-12 13:15 (unknown), mbalhoff 2017-10-12 13:53 (unknown), Andrew Clement 2017-10-12 14:09 (unknown), redaccion 2017-10-13 6:16 (unknown), nfrankiyamu 2017-10-13 17:15 (unknown), susan.christian 2017-10-14 6:44 (unknown), Ella Golan 2017-10-15 3:28 (unknown), redaccion 2017-10-15 11:15 (unknown), cl_luzcc 2017-10-15 11:49 (unknown), edo.hlaca 2017-10-15 12:04 (unknown), sherrilyn 2017-10-15 12:17 (unknown), Solen win2 2017-10-15 13:01 (unknown), pekka.enne 2017-10-15 13:57 (unknown), marketing 2017-10-15 15:13 (unknown), nelcastellodicarta 2017-10-15 18:29 (unknown), clasico082 2017-10-15 22:07 (unknown), info 2017-10-16 1:23 (unknown), fwkz4811-DoVvmRvd3PAA2dtGD8cC2w 2017-10-16 11:30 (unknown), kindergartenchaos2 2017-10-16 19:44 (unknown), iker-KvP5wT2u2U0 2017-10-17 0:33 (unknown), membership 2017-10-17 7:00 (unknown), lswedroe 2017-10-17 12:14 (unknown), dengx 2017-10-17 20:28 (unknown), kelley 2017-10-19 20:10 (unknown), pooks005 2017-10-19 22:54 (unknown), armouralumni 2017-10-20 3:19 (unknown), dengx 2017-10-20 8:42 (unknown), membership 2017-10-23 13:52 (unknown), Intl Agency 2017-10-25 12:10 (unknown), EG 2017-10-29 9:46 (unknown), Solen win 2017-11-01 23:35 (unknown), Roy Cockrum Foundation 2017-11-05 3:40 (unknown), Solen win 2017-11-06 19:51 (unknown), Qing Chang 2017-11-12 15:09 (unknown), Friedrich Mayrhofer 2017-11-12 15:09 (unknown), Friedrich Mayrhofer 2017-11-12 15:09 (unknown), Friedrich Mayrhofer 2017-11-12 15:10 (unknown), Mitesh Shah 2017-11-13 3:13 (unknown), Bounced mail 2017-11-15 9:18 (unknown) nanda_kishore_chinna 2017-11-15 14:44 (unknown), Qing Chang 2017-11-16 10:18 (unknown), Michal Hocko 2017-11-19 20:07 (unknown), Mitesh Shah 2017-11-20 2:36 (unknown), Robert Wang 2017-12-01 2:56 (unknown), Post Office 2017-12-01 14:22 (unknown), Rein Appeldoorn 2017-12-07 12:53 (unknown), Sistemas administrador 2017-12-12 16:06 (unknown), Solen win 2017-12-14 16:26 (unknown), Solen win 2017-12-17 17:28 (unknown), Solen win 2017-12-23 15:32 (unknown), 柯弼舜 2017-12-24 2:58 (unknown), 柯弼舜 2017-12-24 9:07 (unknown), Solen win 2017-12-30 2:10 (unknown), Arpit Patel 2017-12-30 4:37 (unknown), Adam Richter 2018-01-02 22:11 (unknown), Mr Sheng Li Hung 2018-01-09 21:23 (unknown), Emile Kenold 2018-01-10 10:27 (unknown), TimGuo 2018-01-11 3:22 (unknown), Active lender@ 2018-01-16 2:16 (unknown) Jack.Ma 2018-01-16 2:23 (unknown) Jack.Ma 2018-01-23 13:36 (unknown), Mr Sheng Li Hung 2018-01-23 13:54 (unknown), Mr Sheng Li Hung 2018-01-25 7:23 (unknown), tirumalareddy marri 2018-01-27 13:25 (unknown), Jones 2018-01-27 13:48 (unknown), Jones 2018-01-27 13:48 (unknown), Jones 2018-01-28 17:01 (unknown), whoisthis TG 2018-01-28 17:06 (unknown), whoisthis TG 2018-01-29 14:17 (unknown), Jones 2018-01-29 16:30 (unknown), Jones 2018-01-29 16:30 (unknown), Jones 2018-01-29 16:55 (unknown), Jones 2018-01-29 17:17 (unknown), Jones 2018-01-29 17:17 (unknown), Jones 2018-01-29 17:17 (unknown), Jones 2018-01-29 17:17 (unknown), Jones 2018-01-29 17:17 (unknown), Jones 2018-01-29 17:17 (unknown), Jones 2018-02-02 12:15 (unknown), Robert Vasek [not found] <CALfDnQ8aCTywvhqOBkFv3qQOoME9wvTrKbQq8i8PCPOx2iBp=A@mail.gmail.com> [not found] ` <CALfDnQ-NihbhS=8C+ZfiKepj5x+Zd5uS2zH82-VrwV40A55s0w@mail.gmail.com> 2018-02-07 10:50 ` (unknown), Solen win 2018-02-08 14:40 (unknown), Automatic Email Delivery Software 2018-02-11 7:19 (unknown), Alfred Cheuk Chow 2018-02-11 16:07 (unknown), glolariu 2018-02-12 1:39 (unknown), Alfred Cheuk Chow 2018-02-12 1:39 (unknown), Alfred Cheuk Chow 2018-02-12 1:39 (unknown), Alfred Cheuk Chow 2018-02-12 1:39 (unknown), Alfred Cheuk Chow 2018-02-13 11:58 (unknown), Solen win 2018-02-13 12:43 (unknown), mavis lilian wanczyk 2018-02-13 22:56 (unknown), Alfred Cheuk Chow 2018-02-13 22:57 (unknown), Alfred Cheuk Chow 2018-02-13 22:57 (unknown), Alfred Cheuk Chow 2018-02-13 22:57 (unknown), Alfred Cheuk Chow 2018-02-13 22:57 (unknown), Alfred Cheuk Chow 2018-02-13 22:59 (unknown), Mitesh Shah 2018-02-17 1:45 (unknown), Ryan Ellis 2018-02-17 8:41 (unknown), Solen win 2018-02-17 15:29 (unknown), Ahmed Soliman 2018-02-23 15:54 (unknown), Adam Richter [not found] <[PATCH xf86-video-amdgpu 0/3] Add non-desktop and leasing support> 2018-03-03 4:49 ` (unknown), Keith Packard 2018-03-05 17:06 (unknown) Meghana Madhyastha 2018-03-07 7:48 (unknown), Solen win 2018-03-23 3:05 (unknown), Mail Delivery Subsystem 2018-04-04 13:43 (unknown), системы администратор 2018-04-06 1:18 (unknown), venkatvenkatsubra 2018-04-16 1:22 (unknown), Andrew Worsley 2018-04-20 8:02 (unknown) Christoph Hellwig 2018-04-20 8:02 ` (unknown), Christoph Hellwig 2018-05-04 15:21 (unknown), Mark Henry 2018-05-05 22:07 (unknown), Shane Missler 2018-05-14 6:33 (unknown), системы администратор 2018-05-14 17:30 (unknown), Jessica 2018-05-18 12:04 (unknown) DaeRyong Jeong 2018-05-25 3:26 (unknown), Bounced mail 2018-05-29 7:26 (unknown), администратор 2018-05-31 17:11 (unknown), Adam Richter via Containers 2018-06-13 15:48 (unknown), Ubaithullah Masood 2018-06-16 8:15 (unknown) Mrs Mavis Wanczyk 2018-06-23 21:08 (unknown), David Lechner 2018-07-05 10:36 (unknown), rosdi ablatiff 2018-07-06 1:26 (unknown), Dave Airlie 2018-07-28 10:14 (unknown), Andrew Martinez 2018-07-28 10:46 (unknown), Andrew Martinez 2018-07-29 9:58 (unknown) Sumitomo Rubber 2018-08-09 9:23 (unknown), системы администратор 2018-08-22 9:07 (unknown), системы администратор 2018-08-24 4:59 (unknown), Dave Airlie 2018-08-27 14:50 (unknown), Christoph Hellwig 2018-09-16 13:39 (unknown), iluminati 2018-09-19 19:57 (unknown), Saif Hasan 2018-10-09 15:55 (unknown), Oliver Carter 2018-10-19 14:40 (unknown), David Howells 2018-10-19 17:46 ` (unknown) David Miller 2018-10-19 20:51 ` (unknown) David Howells 2018-10-19 20:58 ` (unknown) David Miller 2018-10-21 16:25 (unknown), Michael Tirado 2018-10-31 0:38 (unknown), Ubaithullah Masood 2018-11-11 8:05 (unknown), Oliver Carter 2018-11-18 9:11 (unknown), Mrs. Maureen Hinckley 2018-11-18 20:40 (unknown), Major Dennis Hornbeck 2018-11-27 0:07 (unknown), Offer 2019-01-02 12:25 (unknown), Frank Wunderlich 2019-01-15 2:55 (unknown), Jens Axboe 2019-02-28 3:36 (unknown) Post Office 2019-03-01 3:34 (unknown) Automatic Email Delivery Software 2019-03-04 3:42 (unknown) Automatic Email Delivery Software 2019-03-19 14:41 (unknown) Maxim Levitsky 2019-03-21 1:51 (unknown) zhuchangchun 2019-03-29 0:36 (unknown) 邀请函 2019-04-04 5:56 (unknown) Mail Delivery Subsystem 2019-04-05 2:38 (unknown) Changbin Du 2019-04-10 11:14 Norbert Lange 2019-04-10 13:37 ` (unknown) Jan Kiszka 2019-04-10 14:36 ` (unknown) Jan Kiszka [not found] ` <VI1PR05MB5917B5956F2E9365F10D6539F62E0@VI1PR05MB5917.eurprd05.prod.outlook.com> 2019-04-10 14:47 ` (unknown) Jan Kiszka 2019-04-10 15:02 ` (unknown) Lange Norbert 2019-04-10 16:46 ` (unknown) Jan Kiszka 2019-04-10 11:17 Norbert Lange 2019-04-10 14:15 ` (unknown) Jan Kiszka 2019-05-16 3:48 (unknown) Mail Delivery Subsystem 2019-05-26 11:51 (unknown) Thomas Meyer 2019-06-07 0:54 (unknown) Dave Airlie 2019-08-23 2:12 (unknown) Rob Herring 2019-09-12 8:09 (unknown) Gene Chen 2019-12-12 15:50 (unknown) 周琰杰 (Zhou Yanjie) [not found] <1187667350.235001.1580574902701.ref@mail.yahoo.com> 2020-02-01 16:35 ` (unknown) Mrs. Maureen Hinckley 2020-02-05 8:23 (unknown) Frau Huan Jlaying 2020-02-11 22:34 (unknown) Rajat Jain 2020-02-15 3:25 (unknown) mprim37 alcorta 2020-02-24 8:18 kernel panic: audit: backlog limit exceeded syzbot 2020-02-24 22:38 ` Paul Moore 2020-02-24 22:43 ` Eric Paris 2020-02-24 22:46 ` Paul Moore [not found] ` <CAHC9VhQnbdJprbdTa_XcgUJaiwhzbnGMWJqHczU54UMk0AFCtw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 2020-02-27 15:39 ` (unknown) Dmitry Vyukov via B.A.T.M.A.N 2020-03-04 9:42 (unknown) Julie Leach 2020-03-04 23:30 (unknown) Maria Alessandra Filippi 2020-03-05 0:26 (unknown) Maria Alessandra Filippi 2020-03-05 2:33 (unknown) Maria Alessandra Filippi 2020-03-05 10:46 (unknown) Juanito S. Galang 2020-03-05 10:46 (unknown) Juanito S. Galang 2020-03-05 10:46 (unknown) Juanito S. Galang 2020-03-05 10:46 (unknown) Juanito S. Galang 2020-03-05 10:46 (unknown) Juanito S. Galang 2020-03-05 10:46 (unknown) Juanito S. Galang 2020-03-05 10:47 (unknown) Juanito S. Galang 2020-03-09 7:34 (unknown) Michael J. Weirsky 2020-03-09 7:34 (unknown) Michael J. Weirsky 2020-03-09 7:34 (unknown) Michael J. Weirsky 2020-03-09 7:34 (unknown) Michael J. Weirsky 2020-03-09 7:37 (unknown) Michael J. Weirsky 2020-03-09 8:43 (unknown) Michael J. Weirsky 2020-03-17 0:11 (unknown) David Ibe 2020-03-17 0:11 (unknown) David Ibe 2020-03-27 8:36 (unknown) chenanqing 2020-03-27 9:20 (unknown) chenanqing 2020-04-23 23:06 (unknown) Azim Hashim Premji 2020-04-23 23:06 (unknown) Azim Hashim Premji 2020-05-08 22:58 (unknown) Barbara D Wilkins 2020-05-08 23:41 (unknown) Barbara D Wilkins 2020-05-08 23:51 (unknown) Barbara D Wilkins 2020-06-04 19:57 (unknown) David Shine [not found] <1327230475.528260.1591750200327.ref@mail.yahoo.com> 2020-06-10 0:50 ` (unknown) Celine Marchand 2020-06-27 21:52 (unknown) helen 2020-06-27 21:54 (unknown) helen 2020-06-27 21:58 (unknown) lookman joe 2020-06-27 21:58 (unknown) lookman joe 2020-06-27 21:58 (unknown) lookman joe 2020-06-30 17:56 (unknown) Vasiliy Kupriakov 2020-07-02 19:43 (unknown) Barr Anthony Calder 2020-07-22 4:45 (unknown) Darlehen Bedienung 2020-07-22 5:32 (unknown) Darlehen Bedienung 2020-07-22 5:32 (unknown) Darlehen Bedienung 2020-07-22 5:32 (unknown) Darlehen Bedienung
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: linkBe 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.