From patchwork Tue Apr 28 17:40:34 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mario Limonciello X-Patchwork-Id: 20504 Received: from vger.kernel.org (vger.kernel.org [209.132.176.167]) by demeter.kernel.org (8.14.2/8.14.2) with ESMTP id n3SHeQOC002967 for ; Tue, 28 Apr 2009 17:40:26 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752942AbZD1RkY (ORCPT ); Tue, 28 Apr 2009 13:40:24 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1754032AbZD1RkY (ORCPT ); Tue, 28 Apr 2009 13:40:24 -0400 Received: from ausxipps301.us.dell.com ([143.166.148.223]:4763 "EHLO ausxipps301.us.dell.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752942AbZD1RkX (ORCPT ); Tue, 28 Apr 2009 13:40:23 -0400 Message-ID: <49F73F92.9000201@dell.com> Date: Tue, 28 Apr 2009 12:40:34 -0500 From: Mario Limonciello User-Agent: Thunderbird 2.0.0.21 (X11/20090409) MIME-Version: 1.0 To: Matthew Garrett CC: linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH] Ignore garbage in dell-wmi events X-Enigmail-Version: 0.95.7 Sender: linux-acpi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-acpi@vger.kernel.org Hi: In debugging with some future machines that actually contain BIOS level support for dell-wmi, I've determined that the upper half of the data that comes back from wmi_get_event_data may sometimes contain extra information that isn't currently relevant when pulling scan codes out of the data. This causes dell-wmi to improperly respond to these events. I'm attaching a patch (Exchange would munge up the line breaks otherwise). Thanks, --- a/drivers/platform/x86/dell-wmi.c~ 2009-04-28 12:32:32.000000000 -0500 +++ b/drivers/platform/x86/dell-wmi.c 2009-04-28 12:33:02.000000000 -0500 @@ -182,7 +182,7 @@ if (obj && obj->type == ACPI_TYPE_BUFFER) { int *buffer = (int *)obj->buffer.pointer; - key = dell_wmi_get_entry_by_scancode(buffer[1]); + key = dell_wmi_get_entry_by_scancode(0xFFFF & buffer[1]); if (key) { input_report_key(dell_wmi_input_dev, key->keycode, 1); input_sync(dell_wmi_input_dev); @@ -190,7 +190,7 @@ input_sync(dell_wmi_input_dev); } else printk(KERN_INFO "dell-wmi: Unknown key %x pressed\n", - buffer[1]); + 0xFFFF & buffer[1]); } }