Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

[GIT PULL] x86 platform drivers tree

4 views
Skip to first unread message

Matthew Garrett

unread,
Feb 26, 2010, 10:30:01 AM2/26/10
to
Many of the x86 platform drivers are either entirely unrelated to ACPI, or
only barely so. So, with Len's blessing:

The following changes since commit baac35c4155a8aa826c70acee6553368ca5243a2:
Xiaotian Feng (1):
security: fix error return path in ima_inode_alloc

are available in the git repository at:

git://git.kernel.org/pub/scm/linux/kernel/git/mjg59/platform-drivers-x86.git for_linus

Erik Andren (1):
dell-laptop: Add another Dell laptop to the DMI whitelist

Mario Limonciello (4):
compal-laptop: Add support for known Compal made Dell laptops
compal-laptop: Replace sysfs support with rfkill support
dell-laptop: Block software state changes when rfkill hard blocked
dell-laptop: Blacklist machines not supporting dell-laptop

Matthew Garrett (7):
MAINTAINERS: update drivers/platform/x86 information
dell-laptop: Update rfkill state on kill switch
dell-laptop: Fix platform device unregistration
dell-laptop: Fix small memory leak
dell-laptop: Pay attention to which devices the hardware switch controls
hp-wmi: Add support for tablet rotation key
toshiba_acpi: Add full hotkey support

Stuart Hayes (1):
dell-laptop: Use buffer with 32-bit physical address

Thadeu Lima de Souza Cascardo (1):
classmate-laptop: use a single MODULE_DEVICE_TABLE to get correct aliases

MAINTAINERS | 29 +++-
drivers/platform/x86/Kconfig | 1 +
drivers/platform/x86/classmate-laptop.c | 31 +++--
drivers/platform/x86/compal-laptop.c | 247 +++++++++++++-----------------
drivers/platform/x86/dell-laptop.c | 256 ++++++++++++++++++++++++++-----
drivers/platform/x86/hp-wmi.c | 1 +
drivers/platform/x86/toshiba_acpi.c | 206 ++++++++++++++++++++++++-
7 files changed, 575 insertions(+), 196 deletions(-)

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majo...@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

Matthew Garrett

unread,
Feb 26, 2010, 10:30:03 AM2/26/10
to
From: Mario Limonciello <sup...@ubuntu.com>

The Mini family doesn't support smbios 17,11 although it reports it does.

Signed-off-by: Mario Limonciello <sup...@ubuntu.com>
Signed-off-by: Tim Gardner <tim.g...@canonical.com>
---
drivers/platform/x86/dell-laptop.c | 46 ++++++++++++++++++++++++++++++++++++
1 files changed, 46 insertions(+), 0 deletions(-)

diff --git a/drivers/platform/x86/dell-laptop.c b/drivers/platform/x86/dell-laptop.c
index 81213e8..d8b1b39 100644
--- a/drivers/platform/x86/dell-laptop.c
+++ b/drivers/platform/x86/dell-laptop.c
@@ -83,6 +83,46 @@ static const struct dmi_system_id __initdata dell_device_table[] = {
{ }
};

+static struct dmi_system_id __devinitdata dell_blacklist[] = {
+ /* Supported by compal-laptop */
+ {
+ .ident = "Dell Mini 9",
+ .matches = {
+ DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
+ DMI_MATCH(DMI_PRODUCT_NAME, "Inspiron 910"),
+ },
+ },
+ {
+ .ident = "Dell Mini 10",
+ .matches = {
+ DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
+ DMI_MATCH(DMI_PRODUCT_NAME, "Inspiron 1010"),
+ },
+ },
+ {
+ .ident = "Dell Mini 10v",
+ .matches = {
+ DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
+ DMI_MATCH(DMI_PRODUCT_NAME, "Inspiron 1011"),
+ },
+ },
+ {
+ .ident = "Dell Inspiron 11z",
+ .matches = {
+ DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
+ DMI_MATCH(DMI_PRODUCT_NAME, "Inspiron 1110"),
+ },
+ },
+ {
+ .ident = "Dell Mini 12",
+ .matches = {
+ DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
+ DMI_MATCH(DMI_PRODUCT_NAME, "Inspiron 1210"),
+ },
+ },
+ {}
+};
+
static void __init parse_da_table(const struct dmi_header *dm)
{
/* Final token is a terminator, so we don't want to copy it */
@@ -237,6 +277,12 @@ static int __init dell_setup_rfkill(void)
int status;
int ret;

+ if (dmi_check_system(dell_blacklist)) {
+ printk(KERN_INFO "dell-laptop: Blacklisted hardware detected - "
+ "not enabling rfkill\n");
+ return 0;
+ }
+
memset(&buffer, 0, sizeof(struct calling_interface_buffer));
dell_send_request(&buffer, 17, 11);
status = buffer.output[1];
--
1.6.6.1

Matthew Garrett

unread,
Feb 26, 2010, 10:30:02 AM2/26/10
to
da_tokens was not being freed by dell-laptop on unload. Fix that.

Signed-off-by: Matthew Garrett <m...@redhat.com>
---
drivers/platform/x86/dell-laptop.c | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/drivers/platform/x86/dell-laptop.c b/drivers/platform/x86/dell-laptop.c
index b4c2190..b13eb6a 100644
--- a/drivers/platform/x86/dell-laptop.c
+++ b/drivers/platform/x86/dell-laptop.c
@@ -478,6 +478,7 @@ static void __exit dell_exit(void)
platform_device_del(platform_device);
platform_driver_unregister(&platform_driver);
}
+ kfree(da_tokens);
}

module_init(dell_init);
--
1.6.6.1

Matthew Garrett

unread,
Feb 26, 2010, 10:30:03 AM2/26/10
to
Calling the ENAB method on Toshiba laptops results in notifications being
sent when laptop hotkeys are pressed. This patch simply calls that method
and sets up an input device if it's successful.

Signed-off-by: Matthew Garrett <m...@redhat.com>
Signed-off-by: Andrew Morton <ak...@linux-foundation.org>
Signed-off-by: Len Brown <len....@intel.com>
---
drivers/platform/x86/toshiba_acpi.c | 206 +++++++++++++++++++++++++++++++++-
1 files changed, 199 insertions(+), 7 deletions(-)

diff --git a/drivers/platform/x86/toshiba_acpi.c b/drivers/platform/x86/toshiba_acpi.c
index 77bf5d8..26c2117 100644
--- a/drivers/platform/x86/toshiba_acpi.c
+++ b/drivers/platform/x86/toshiba_acpi.c
@@ -46,6 +46,7 @@
#include <linux/backlight.h>
#include <linux/platform_device.h>
#include <linux/rfkill.h>
+#include <linux/input.h>

#include <asm/uaccess.h>

@@ -62,9 +63,10 @@ MODULE_LICENSE("GPL");

/* Toshiba ACPI method paths */
#define METHOD_LCD_BRIGHTNESS "\\_SB_.PCI0.VGA_.LCD_._BCM"
-#define METHOD_HCI_1 "\\_SB_.VALD.GHCI"
-#define METHOD_HCI_2 "\\_SB_.VALZ.GHCI"
+#define TOSH_INTERFACE_1 "\\_SB_.VALD"
+#define TOSH_INTERFACE_2 "\\_SB_.VALZ"
#define METHOD_VIDEO_OUT "\\_SB_.VALX.DSSX"
+#define GHCI_METHOD ".GHCI"

/* Toshiba HCI interface definitions
*
@@ -116,6 +118,36 @@ static const struct acpi_device_id toshiba_device_ids[] = {
};
MODULE_DEVICE_TABLE(acpi, toshiba_device_ids);

+struct key_entry {
+ char type;
+ u16 code;
+ u16 keycode;
+};
+
+enum {KE_KEY, KE_END};
+
+static struct key_entry toshiba_acpi_keymap[] = {
+ {KE_KEY, 0x101, KEY_MUTE},
+ {KE_KEY, 0x13b, KEY_COFFEE},
+ {KE_KEY, 0x13c, KEY_BATTERY},
+ {KE_KEY, 0x13d, KEY_SLEEP},
+ {KE_KEY, 0x13e, KEY_SUSPEND},
+ {KE_KEY, 0x13f, KEY_SWITCHVIDEOMODE},
+ {KE_KEY, 0x140, KEY_BRIGHTNESSDOWN},
+ {KE_KEY, 0x141, KEY_BRIGHTNESSUP},
+ {KE_KEY, 0x142, KEY_WLAN},
+ {KE_KEY, 0x143, KEY_PROG1},
+ {KE_KEY, 0xb05, KEY_PROG2},
+ {KE_KEY, 0xb06, KEY_WWW},
+ {KE_KEY, 0xb07, KEY_MAIL},
+ {KE_KEY, 0xb30, KEY_STOP},
+ {KE_KEY, 0xb31, KEY_PREVIOUSSONG},
+ {KE_KEY, 0xb32, KEY_NEXTSONG},
+ {KE_KEY, 0xb33, KEY_PLAYPAUSE},
+ {KE_KEY, 0xb5a, KEY_MEDIA},
+ {KE_END, 0, 0},
+};
+
/* utility
*/

@@ -251,6 +283,8 @@ static acpi_status hci_read2(u32 reg, u32 *out1, u32 *out2, u32 *result)
struct toshiba_acpi_dev {
struct platform_device *p_dev;
struct rfkill *bt_rfk;
+ struct input_dev *hotkey_dev;
+ acpi_handle handle;

const char *bt_name;

@@ -711,8 +745,159 @@ static struct backlight_ops toshiba_backlight_data = {
.update_status = set_lcd_status,
};

+static struct key_entry *toshiba_acpi_get_entry_by_scancode(int code)
+{
+ struct key_entry *key;
+
+ for (key = toshiba_acpi_keymap; key->type != KE_END; key++)
+ if (code == key->code)
+ return key;
+
+ return NULL;
+}
+
+static struct key_entry *toshiba_acpi_get_entry_by_keycode(int code)
+{
+ struct key_entry *key;
+
+ for (key = toshiba_acpi_keymap; key->type != KE_END; key++)
+ if (code == key->keycode && key->type == KE_KEY)
+ return key;
+
+ return NULL;
+}
+
+static int toshiba_acpi_getkeycode(struct input_dev *dev, int scancode,
+ int *keycode)
+{
+ struct key_entry *key = toshiba_acpi_get_entry_by_scancode(scancode);
+
+ if (key && key->type == KE_KEY) {
+ *keycode = key->keycode;


+ return 0;
+ }
+

+ return -EINVAL;
+}
+
+static int toshiba_acpi_setkeycode(struct input_dev *dev, int scancode,
+ int keycode)
+{
+ struct key_entry *key;
+ int old_keycode;
+
+ if (keycode < 0 || keycode > KEY_MAX)
+ return -EINVAL;
+
+ key = toshiba_acpi_get_entry_by_scancode(scancode);
+ if (key && key->type == KE_KEY) {
+ old_keycode = key->keycode;
+ key->keycode = keycode;
+ set_bit(keycode, dev->keybit);
+ if (!toshiba_acpi_get_entry_by_keycode(old_keycode))
+ clear_bit(old_keycode, dev->keybit);


+ return 0;
+ }
+

+ return -EINVAL;
+}
+
+static void toshiba_acpi_notify(acpi_handle handle, u32 event, void *context)
+{
+ u32 hci_result, value;
+ struct key_entry *key;
+
+ if (event != 0x80)
+ return;
+ do {
+ hci_read1(HCI_SYSTEM_EVENT, &value, &hci_result);
+ if (hci_result == HCI_SUCCESS) {
+ if (value == 0x100)
+ continue;
+ else if (value & 0x80) {
+ key = toshiba_acpi_get_entry_by_scancode
+ (value & ~0x80);
+ if (!key) {
+ printk(MY_INFO "Unknown key %x\n",
+ value & ~0x80);
+ continue;
+ }
+ input_report_key(toshiba_acpi.hotkey_dev,
+ key->keycode, 1);
+ input_sync(toshiba_acpi.hotkey_dev);
+ input_report_key(toshiba_acpi.hotkey_dev,
+ key->keycode, 0);
+ input_sync(toshiba_acpi.hotkey_dev);
+ }
+ } else if (hci_result == HCI_NOT_SUPPORTED) {
+ /* This is a workaround for an unresolved issue on
+ * some machines where system events sporadically
+ * become disabled. */
+ hci_write1(HCI_SYSTEM_EVENT, 1, &hci_result);
+ printk(MY_NOTICE "Re-enabled hotkeys\n");
+ }
+ } while (hci_result != HCI_EMPTY);
+}
+
+static int toshiba_acpi_setup_keyboard(char *device)
+{
+ acpi_status status;
+ acpi_handle handle;
+ int result;
+ const struct key_entry *key;
+
+ status = acpi_get_handle(NULL, device, &handle);
+ if (ACPI_FAILURE(status)) {
+ printk(MY_INFO "Unable to get notification device\n");
+ return -ENODEV;
+ }
+
+ toshiba_acpi.handle = handle;
+
+ status = acpi_evaluate_object(handle, "ENAB", NULL, NULL);
+ if (ACPI_FAILURE(status)) {
+ printk(MY_INFO "Unable to enable hotkeys\n");
+ return -ENODEV;
+ }
+
+ status = acpi_install_notify_handler(handle, ACPI_DEVICE_NOTIFY,
+ toshiba_acpi_notify, NULL);
+ if (ACPI_FAILURE(status)) {
+ printk(MY_INFO "Unable to install hotkey notification\n");
+ return -ENODEV;
+ }
+
+ toshiba_acpi.hotkey_dev = input_allocate_device();
+ if (!toshiba_acpi.hotkey_dev) {
+ printk(MY_INFO "Unable to register input device\n");
+ return -ENOMEM;
+ }
+
+ toshiba_acpi.hotkey_dev->name = "Toshiba input device";
+ toshiba_acpi.hotkey_dev->phys = device;
+ toshiba_acpi.hotkey_dev->id.bustype = BUS_HOST;
+ toshiba_acpi.hotkey_dev->getkeycode = toshiba_acpi_getkeycode;
+ toshiba_acpi.hotkey_dev->setkeycode = toshiba_acpi_setkeycode;
+
+ for (key = toshiba_acpi_keymap; key->type != KE_END; key++) {
+ set_bit(EV_KEY, toshiba_acpi.hotkey_dev->evbit);
+ set_bit(key->keycode, toshiba_acpi.hotkey_dev->keybit);
+ }
+
+ result = input_register_device(toshiba_acpi.hotkey_dev);
+ if (result) {
+ printk(MY_INFO "Unable to register input device\n");
+ return result;
+ }
+


+ return 0;
+}
+

static void toshiba_acpi_exit(void)
{
+ if (toshiba_acpi.hotkey_dev)
+ input_unregister_device(toshiba_acpi.hotkey_dev);
+
if (toshiba_acpi.bt_rfk) {
rfkill_unregister(toshiba_acpi.bt_rfk);
rfkill_destroy(toshiba_acpi.bt_rfk);
@@ -726,6 +911,9 @@ static void toshiba_acpi_exit(void)
if (toshiba_proc_dir)
remove_proc_entry(PROC_TOSHIBA, acpi_root_dir);

+ acpi_remove_notify_handler(toshiba_acpi.handle, ACPI_DEVICE_NOTIFY,
+ toshiba_acpi_notify);
+
platform_device_unregister(toshiba_acpi.p_dev);

return;
@@ -742,11 +930,15 @@ static int __init toshiba_acpi_init(void)
return -ENODEV;

/* simple device detection: look for HCI method */
- if (is_valid_acpi_path(METHOD_HCI_1))
- method_hci = METHOD_HCI_1;
- else if (is_valid_acpi_path(METHOD_HCI_2))
- method_hci = METHOD_HCI_2;
- else
+ if (is_valid_acpi_path(TOSH_INTERFACE_1 GHCI_METHOD)) {
+ method_hci = TOSH_INTERFACE_1 GHCI_METHOD;
+ if (toshiba_acpi_setup_keyboard(TOSH_INTERFACE_1))
+ printk(MY_INFO "Unable to activate hotkeys\n");
+ } else if (is_valid_acpi_path(TOSH_INTERFACE_2 GHCI_METHOD)) {
+ method_hci = TOSH_INTERFACE_2 GHCI_METHOD;
+ if (toshiba_acpi_setup_keyboard(TOSH_INTERFACE_2))
+ printk(MY_INFO "Unable to activate hotkeys\n");
+ } else
return -ENODEV;

printk(MY_INFO "Toshiba Laptop ACPI Extras version %s\n",
--
1.6.6.1

Matthew Garrett

unread,
Feb 26, 2010, 10:30:03 AM2/26/10
to
The HP touchsmart tablet has a key for rotating the UI from landscape to
portrait. Add support for it.

Signed-off-by: Matthew Garrett <m...@redhat.com>
---

drivers/platform/x86/hp-wmi.c | 1 +


1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/drivers/platform/x86/hp-wmi.c b/drivers/platform/x86/hp-wmi.c
index ad4c414..3aa57da 100644
--- a/drivers/platform/x86/hp-wmi.c
+++ b/drivers/platform/x86/hp-wmi.c
@@ -89,6 +89,7 @@ static struct key_entry hp_wmi_keymap[] = {
{KE_KEY, 0x20e6, KEY_PROG1},
{KE_KEY, 0x2142, KEY_MEDIA},
{KE_KEY, 0x213b, KEY_INFO},
+ {KE_KEY, 0x2169, KEY_DIRECTION},
{KE_KEY, 0x231b, KEY_HELP},
{KE_END, 0}
};
--
1.6.6.1

Matthew Garrett

unread,
Feb 26, 2010, 10:30:02 AM2/26/10
to
Many of the drivers/platform/x86 drivers have nothing to do with ACPI, so
it's kind of inappropriate for them to be stuck under the ACPI mailing
list. Add a new mailing list (platform-...@vger.kernel.org) and,
with Len's blessing, add myself as subsystem maintainer.

Signed-off-by: Matthew Garrett <m...@redhat.com>
Cc: Anisse Astier <ani...@astier.eu>
Cc: Carlos Corbacho <car...@strangeworlds.co.uk>
Cc: Cezary Jackiewicz <cezary.j...@gmail.com>
Cc: Corentin Chary <coren...@iksaif.net>
Cc: Daniel Oliveira Nascimento <d...@syst.com.br>
Cc: Harald Welte <laf...@gnumonks.org>
Cc: Henrique de Moraes Holschuh <ibm-...@hmh.eng.br>
Cc: Herton Ronaldo Krzesinski <her...@mandriva.com.br>
Cc: Jonathan Woithe <jwo...@physics.adelaide.edu.au>
Cc: Karol Kozimor <szi...@users.sourceforge.net>
Cc: Len Brown <le...@kernel.org>
Cc: Lennart Poettering <mzxr...@0pointer.de>
Cc: Mattia Dongili <mala...@linux.it>
Cc: Peter Feuerer <pe...@piie.net>
Cc: Sujith Thomas <sujith...@intel.com>
Cc: Thadeu Lima de Souza Cascardo <casc...@holoscopio.com>
---
MAINTAINERS | 29 +++++++++++++++++++++++++----
1 files changed, 25 insertions(+), 4 deletions(-)

diff --git a/MAINTAINERS b/MAINTAINERS
index 2533fc4..f355d11 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -221,6 +221,7 @@ F: drivers/net/acenic*

ACER ASPIRE ONE TEMPERATURE AND FAN DRIVER
M: Peter Feuerer <pe...@piie.net>
+L: platform-...@vger.kernel.org
W: http://piie.net/?section=acerhdf
S: Maintained
F: drivers/platform/x86/acerhdf.c
@@ -228,6 +229,7 @@ F: drivers/platform/x86/acerhdf.c
ACER WMI LAPTOP EXTRAS
M: Carlos Corbacho <car...@strangeworlds.co.uk>
L: acer...@googlegroups.com (subscribers-only)
+L: platform-...@vger.kernel.org
W: http://code.google.com/p/aceracpi
S: Maintained
F: drivers/platform/x86/acer-wmi.c
@@ -288,7 +290,7 @@ F: drivers/acpi/video.c

ACPI WMI DRIVER
M: Carlos Corbacho <car...@strangeworlds.co.uk>
-L: linux...@vger.kernel.org
+L: platform-...@vger.kernel.org
W: http://www.lesswatts.org/projects/acpi/
S: Maintained
F: drivers/platform/x86/wmi.c
@@ -968,6 +970,7 @@ ASUS ACPI EXTRAS DRIVER
M: Corentin Chary <coren...@iksaif.net>
M: Karol Kozimor <szi...@users.sourceforge.net>
L: acpi4as...@lists.sourceforge.net
+L: platform-...@vger.kernel.org
W: http://acpi4asus.sf.net
S: Maintained
F: drivers/platform/x86/asus_acpi.c
@@ -981,6 +984,7 @@ F: drivers/hwmon/asb100.c
ASUS LAPTOP EXTRAS DRIVER
M: Corentin Chary <coren...@iksaif.net>
L: acpi4as...@lists.sourceforge.net
+L: platform-...@vger.kernel.org
W: http://acpi4asus.sf.net
S: Maintained
F: drivers/platform/x86/asus-laptop.c
@@ -1473,6 +1477,7 @@ F: drivers/scsi/fnic/
CMPC ACPI DRIVER
M: Thadeu Lima de Souza Cascardo <casc...@holoscopio.com>
M: Daniel Oliveira Nascimento <d...@syst.com.br>
+L: platform-...@vger.kernel.org
S: Supported
F: drivers/platform/x86/classmate-laptop.c

@@ -1516,6 +1521,7 @@ F: drivers/pci/hotplug/cpcihp_generic.c

COMPAL LAPTOP SUPPORT
M: Cezary Jackiewicz <cezary.j...@gmail.com>
+L: platform-...@vger.kernel.org
S: Maintained
F: drivers/platform/x86/compal-laptop.c

@@ -1746,6 +1752,7 @@ F: drivers/net/defxx.*

DELL LAPTOP DRIVER
M: Matthew Garrett <mj...@srcf.ucam.org>
+L: platform-...@vger.kernel.org
S: Maintained
F: drivers/platform/x86/dell-laptop.c

@@ -2028,6 +2035,7 @@ F: drivers/edac/r82600_edac.c
EEEPC LAPTOP EXTRAS DRIVER
M: Corentin Chary <coren...@iksaif.net>
L: acpi4as...@lists.sourceforge.net
+L: platform-...@vger.kernel.org
W: http://acpi4asus.sf.net
S: Maintained
F: drivers/platform/x86/eeepc-laptop.c
@@ -2295,7 +2303,7 @@ F: arch/frv/

FUJITSU LAPTOP EXTRAS
M: Jonathan Woithe <jwo...@physics.adelaide.edu.au>
-L: linux...@vger.kernel.org
+L: platform-...@vger.kernel.org
S: Maintained
F: drivers/platform/x86/fujitsu-laptop.c

@@ -2561,6 +2569,7 @@ F: drivers/net/wireless/hostap/

HP COMPAQ TC1100 TABLET WMI EXTRAS DRIVER
M: Carlos Corbacho <car...@strangeworlds.co.uk>
+L: platform-...@vger.kernel.org
S: Odd Fixes
F: drivers/platform/x86/tc1100-wmi.c

@@ -2771,7 +2780,7 @@ F: drivers/video/i810/

INTEL MENLOW THERMAL DRIVER
M: Sujith Thomas <sujith...@intel.com>
-L: linux...@vger.kernel.org
+L: platform-...@vger.kernel.org
W: http://www.lesswatts.org/projects/acpi/
S: Supported
F: drivers/platform/x86/intel_menlow.c
@@ -3637,6 +3646,7 @@ F: drivers/char/mxser.*

MSI LAPTOP SUPPORT
M: Lennart Poettering <mzxr...@0pointer.de>
+L: platform-...@vger.kernel.org
W: https://tango.0pointer.de/mailman/listinfo/s270-linux
W: http://0pointer.de/lennart/tchibo.html
S: Maintained
@@ -3644,6 +3654,7 @@ F: drivers/platform/x86/msi-laptop.c

MSI WMI SUPPORT
M: Anisse Astier <ani...@astier.eu>
+L: platform-...@vger.kernel.org
S: Supported
F: drivers/platform/x86/msi-wmi.c

@@ -4096,6 +4107,7 @@ F: drivers/i2c/busses/i2c-pasemi.c

PANASONIC LAPTOP ACPI EXTRAS DRIVER
M: Harald Welte <laf...@gnumonks.org>
+L: platform-...@vger.kernel.org
S: Maintained
F: drivers/platform/x86/panasonic-laptop.c

@@ -5034,7 +5046,7 @@ F: include/linux/ssb/

SONY VAIO CONTROL DEVICE DRIVER
M: Mattia Dongili <mala...@linux.it>
-L: linux...@vger.kernel.org
+L: platform-...@vger.kernel.org
W: http://www.linux.it/~malattia/wiki/index.php/Sony_drivers
S: Maintained
F: Documentation/laptops/sony-laptop.txt
@@ -5240,6 +5252,7 @@ F: arch/xtensa/
THINKPAD ACPI EXTRAS DRIVER
M: Henrique de Moraes Holschuh <ibm-...@hmh.eng.br>
L: ibm-acp...@lists.sourceforge.net
+L: platform-...@vger.kernel.org
W: http://ibm-acpi.sourceforge.net
W: http://thinkwiki.org/wiki/Ibm-acpi
T: git git://repo.or.cz/linux-2.6/linux-acpi-2.6/ibm-acpi-2.6.git
@@ -5293,10 +5306,12 @@ F: security/tomoyo/

TOPSTAR LAPTOP EXTRAS DRIVER
M: Herton Ronaldo Krzesinski <her...@mandriva.com.br>
+L: platform-...@vger.kernel.org
S: Maintained
F: drivers/platform/x86/topstar-laptop.c

TOSHIBA ACPI EXTRAS DRIVER
+L: platform-...@vger.kernel.org
S: Orphan
F: drivers/platform/x86/toshiba_acpi.c

@@ -6024,6 +6039,12 @@ S: Maintained
F: Documentation/x86/
F: arch/x86/

+X86 PLATFORM DRIVERS
+M: Matthew Garrett <m...@redhat.com>
+L: platform-...@vger.kernel.org
+S: Maintained
+F: drivers/platform/x86
+
XEN HYPERVISOR INTERFACE
M: Jeremy Fitzhardinge <jer...@xensource.com>
M: Chris Wright <chr...@sous-sol.org>
--
1.6.6.1

Matthew Garrett

unread,
Feb 26, 2010, 10:30:02 AM2/26/10
to
From: Mario Limonciello <Mario_Li...@Dell.com>

This drops the support for manually groking the files in sysfs
to turn on and off the WLAN and BT for Compal laptops in favor
of platform rfkill support.

It has been combined into a single patch to not introduce regressions
in the process of simply adding rfkill support

Signed-off-by: Mario Limonciello <Mario_Li...@Dell.com>
Signed-off-by: Tim Gardner <tim.g...@canonical.com>
Signed-off-by: Matthew Garrett <m...@redhat.com>
Cc: Cezary Jackiewicz <cezary.j...@gmail.com>
---
drivers/platform/x86/compal-laptop.c | 201 +++++++++++-----------------------
1 files changed, 63 insertions(+), 138 deletions(-)

diff --git a/drivers/platform/x86/compal-laptop.c b/drivers/platform/x86/compal-laptop.c
index c78d254..2740b40 100644
--- a/drivers/platform/x86/compal-laptop.c
+++ b/drivers/platform/x86/compal-laptop.c
@@ -26,17 +26,8 @@
/*
* comapl-laptop.c - Compal laptop support.
*
- * This driver exports a few files in /sys/devices/platform/compal-laptop/:
- *
- * wlan - wlan subsystem state: contains 0 or 1 (rw)
- *
- * bluetooth - Bluetooth subsystem state: contains 0 or 1 (rw)
- *
- * raw - raw value taken from embedded controller register (ro)
- *
- * In addition to these platform device attributes the driver
- * registers itself in the Linux backlight control subsystem and is
- * available to userspace under /sys/class/backlight/compal-laptop/.
+ * The driver registers itself with the rfkill subsystem and
+ * the Linux backlight control subsystem.
*
* This driver might work on other laptops produced by Compal. If you
* want to try it you can pass force=1 as argument to the module which
@@ -51,6 +42,7 @@
#include <linux/dmi.h>
#include <linux/backlight.h>
#include <linux/platform_device.h>
+#include <linux/rfkill.h>

#define COMPAL_DRIVER_VERSION "0.2.6"

@@ -63,6 +55,10 @@
#define WLAN_MASK 0x01
#define BT_MASK 0x02

+static struct rfkill *wifi_rfkill;
+static struct rfkill *bt_rfkill;
+static struct platform_device *compal_device;
+
static int force;
module_param(force, bool, 0);
MODULE_PARM_DESC(force, "Force driver load, ignore DMI data");
@@ -88,65 +84,75 @@ static int get_lcd_level(void)
return (int) result;
}

-static int set_wlan_state(int state)
+static int compal_rfkill_set(void *data, bool blocked)
{
+ unsigned long radio = (unsigned long) data;
u8 result, value;

ec_read(COMPAL_EC_COMMAND_WIRELESS, &result);

- if ((result & KILLSWITCH_MASK) == 0)
- return -EINVAL;
- else {
- if (state)
- value = (u8) (result | WLAN_MASK);
- else
- value = (u8) (result & ~WLAN_MASK);
- ec_write(COMPAL_EC_COMMAND_WIRELESS, value);
- }
+ if (!blocked)
+ value = (u8) (result | radio);
+ else
+ value = (u8) (result & ~radio);
+ ec_write(COMPAL_EC_COMMAND_WIRELESS, value);

return 0;
}

-static int set_bluetooth_state(int state)
+static void compal_rfkill_poll(struct rfkill *rfkill, void *data)
{
- u8 result, value;
+ u8 result;
+ bool hw_blocked;

ec_read(COMPAL_EC_COMMAND_WIRELESS, &result);

- if ((result & KILLSWITCH_MASK) == 0)
- return -EINVAL;
- else {
- if (state)
- value = (u8) (result | BT_MASK);
- else
- value = (u8) (result & ~BT_MASK);
- ec_write(COMPAL_EC_COMMAND_WIRELESS, value);
- }
-
- return 0;
+ hw_blocked = !(result & KILLSWITCH_MASK);
+ rfkill_set_hw_state(rfkill, hw_blocked);
}

-static int get_wireless_state(int *wlan, int *bluetooth)
+static const struct rfkill_ops compal_rfkill_ops = {
+ .poll = compal_rfkill_poll,
+ .set_block = compal_rfkill_set,
+};
+
+static int setup_rfkill(void)
{
- u8 result;
+ int ret;

- ec_read(COMPAL_EC_COMMAND_WIRELESS, &result);
+ wifi_rfkill = rfkill_alloc("compal-wifi", &compal_device->dev,
+ RFKILL_TYPE_WLAN, &compal_rfkill_ops,
+ (void *) WLAN_MASK);
+ if (!wifi_rfkill)
+ return -ENOMEM;

- if (wlan) {
- if ((result & KILLSWITCH_MASK) == 0)
- *wlan = 0;
- else
- *wlan = result & WLAN_MASK;
- }
+ ret = rfkill_register(wifi_rfkill);
+ if (ret)
+ goto err_wifi;

- if (bluetooth) {
- if ((result & KILLSWITCH_MASK) == 0)
- *bluetooth = 0;
- else
- *bluetooth = (result & BT_MASK) >> 1;
+ bt_rfkill = rfkill_alloc("compal-bluetooth", &compal_device->dev,
+ RFKILL_TYPE_BLUETOOTH, &compal_rfkill_ops,
+ (void *) BT_MASK);
+ if (!bt_rfkill) {
+ ret = -ENOMEM;
+ goto err_allocate_bt;
}
+ ret = rfkill_register(bt_rfkill);
+ if (ret)
+ goto err_register_bt;

return 0;
+
+err_register_bt:
+ rfkill_destroy(bt_rfkill);
+
+err_allocate_bt:
+ rfkill_unregister(wifi_rfkill);
+
+err_wifi:
+ rfkill_destroy(wifi_rfkill);
+
+ return ret;
}

/* Backlight device stuff */
@@ -169,86 +175,6 @@ static struct backlight_ops compalbl_ops = {

static struct backlight_device *compalbl_device;

-/* Platform device */
-
-static ssize_t show_wlan(struct device *dev,
- struct device_attribute *attr, char *buf)
-{
- int ret, enabled;
-
- ret = get_wireless_state(&enabled, NULL);
- if (ret < 0)
- return ret;
-
- return sprintf(buf, "%i\n", enabled);
-}
-
-static ssize_t show_raw(struct device *dev,
- struct device_attribute *attr, char *buf)
-{
- u8 result;
-
- ec_read(COMPAL_EC_COMMAND_WIRELESS, &result);
-
- return sprintf(buf, "%i\n", result);
-}
-
-static ssize_t show_bluetooth(struct device *dev,
- struct device_attribute *attr, char *buf)
-{
- int ret, enabled;
-
- ret = get_wireless_state(NULL, &enabled);
- if (ret < 0)
- return ret;
-
- return sprintf(buf, "%i\n", enabled);
-}
-
-static ssize_t store_wlan_state(struct device *dev,
- struct device_attribute *attr, const char *buf, size_t count)
-{
- int state, ret;
-
- if (sscanf(buf, "%i", &state) != 1 || (state < 0 || state > 1))
- return -EINVAL;
-
- ret = set_wlan_state(state);
- if (ret < 0)
- return ret;
-
- return count;
-}
-
-static ssize_t store_bluetooth_state(struct device *dev,
- struct device_attribute *attr, const char *buf, size_t count)
-{
- int state, ret;
-
- if (sscanf(buf, "%i", &state) != 1 || (state < 0 || state > 1))
- return -EINVAL;
-
- ret = set_bluetooth_state(state);
- if (ret < 0)
- return ret;
-
- return count;
-}
-
-static DEVICE_ATTR(bluetooth, 0644, show_bluetooth, store_bluetooth_state);
-static DEVICE_ATTR(wlan, 0644, show_wlan, store_wlan_state);
-static DEVICE_ATTR(raw, 0444, show_raw, NULL);
-
-static struct attribute *compal_attributes[] = {
- &dev_attr_bluetooth.attr,
- &dev_attr_wlan.attr,
- &dev_attr_raw.attr,
- NULL
-};
-
-static struct attribute_group compal_attribute_group = {
- .attrs = compal_attributes
-};

static struct platform_driver compal_driver = {
.driver = {
@@ -257,8 +183,6 @@ static struct platform_driver compal_driver = {
}
};

-static struct platform_device *compal_device;
-
/* Initialization */

static int dmi_check_cb(const struct dmi_system_id *id)
@@ -389,23 +313,21 @@ static int __init compal_init(void)

ret = platform_device_add(compal_device);
if (ret)
- goto fail_platform_device1;
+ goto fail_platform_device;

- ret = sysfs_create_group(&compal_device->dev.kobj,
- &compal_attribute_group);
+ ret = setup_rfkill();
if (ret)
- goto fail_platform_device2;
+ goto fail_rfkill;

printk(KERN_INFO "compal-laptop: driver "COMPAL_DRIVER_VERSION
" successfully loaded.\n");

return 0;

-fail_platform_device2:
-
+fail_rfkill:
platform_device_del(compal_device);

-fail_platform_device1:
+fail_platform_device:

platform_device_put(compal_device);

@@ -423,10 +345,13 @@ fail_backlight:
static void __exit compal_cleanup(void)
{

- sysfs_remove_group(&compal_device->dev.kobj, &compal_attribute_group);
platform_device_unregister(compal_device);
platform_driver_unregister(&compal_driver);
backlight_device_unregister(compalbl_device);
+ rfkill_unregister(wifi_rfkill);
+ rfkill_destroy(wifi_rfkill);
+ rfkill_unregister(bt_rfkill);
+ rfkill_destroy(bt_rfkill);

printk(KERN_INFO "compal-laptop: driver unloaded.\n");
}
--
1.6.6.1

Matthew Garrett

unread,
Feb 26, 2010, 10:30:02 AM2/26/10
to
From: Stuart Hayes <stuart...@dell.com>

Calls to communicate with system firmware via a SMI (using dcdbas)
need to use a buffer that has a physical address of 4GB or less.
Currently the dell-laptop driver does not guarantee this, and when the
buffer address is higher than 4GB, the address is truncated to 32 bits
and the SMI handler writes to the wrong memory address.

Signed-off-by: Stuart Hayes <stuart...@dell.com>
Acked-by: Matthew Garrett <m...@redhat.com>
---
drivers/platform/x86/dell-laptop.c | 122 ++++++++++++++++++++++++-----------
1 files changed, 83 insertions(+), 39 deletions(-)

diff --git a/drivers/platform/x86/dell-laptop.c b/drivers/platform/x86/dell-laptop.c
index d8b1b39..1a0bfd4 100644
--- a/drivers/platform/x86/dell-laptop.c
+++ b/drivers/platform/x86/dell-laptop.c
@@ -22,6 +22,7 @@
#include <linux/rfkill.h>
#include <linux/power_supply.h>
#include <linux/acpi.h>
+#include <linux/mm.h>
#include <linux/i8042.h>
#include "../../firmware/dcdbas.h"

@@ -123,6 +124,21 @@ static struct dmi_system_id __devinitdata dell_blacklist[] = {
{}
};

+static struct calling_interface_buffer *buffer;
+struct page *bufferpage;
+DEFINE_MUTEX(buffer_mutex);
+
+static void get_buffer(void)
+{
+ mutex_lock(&buffer_mutex);
+ memset(buffer, 0, sizeof(struct calling_interface_buffer));
+}
+
+static void release_buffer(void)
+{
+ mutex_unlock(&buffer_mutex);


+}
+
static void __init parse_da_table(const struct dmi_header *dm)
{
/* Final token is a terminator, so we don't want to copy it */

@@ -225,30 +241,35 @@ dell_send_request(struct calling_interface_buffer *buffer, int class,

static int dell_rfkill_set(void *data, bool blocked)
{
- struct calling_interface_buffer buffer;
int disable = blocked ? 1 : 0;


unsigned long radio = (unsigned long)data;

+ int ret = 0;

- memset(&buffer, 0, sizeof(struct calling_interface_buffer));
- dell_send_request(&buffer, 17, 11);
- if (!(buffer.output[1] & BIT(16)))
- return -EINVAL;
+ get_buffer();
+ dell_send_request(buffer, 17, 11);

- buffer.input[0] = (1 | (radio<<8) | (disable << 16));
- dell_send_request(&buffer, 17, 11);
+ if (!(buffer->output[1] & BIT(16))) {
+ ret = -EINVAL;
+ goto out;
+ }

- return 0;
+ buffer->input[0] = (1 | (radio<<8) | (disable << 16));
+ dell_send_request(buffer, 17, 11);
+
+out:
+ release_buffer();
+ return ret;
}

static void dell_rfkill_query(struct rfkill *rfkill, void *data)
{
- struct calling_interface_buffer buffer;
int status;
int bit = (unsigned long)data + 16;

- memset(&buffer, 0, sizeof(struct calling_interface_buffer));
- dell_send_request(&buffer, 17, 11);
- status = buffer.output[1];
+ get_buffer();
+ dell_send_request(buffer, 17, 11);
+ status = buffer->output[1];
+ release_buffer();

rfkill_set_sw_state(rfkill, !!(status & BIT(bit)));
rfkill_set_hw_state(rfkill, !(status & BIT(16)));
@@ -273,7 +294,6 @@ static DECLARE_DELAYED_WORK(dell_rfkill_work, dell_update_rfkill);

static int __init dell_setup_rfkill(void)
{
- struct calling_interface_buffer buffer;
int status;
int ret;

@@ -283,9 +303,10 @@ static int __init dell_setup_rfkill(void)
return 0;
}

- memset(&buffer, 0, sizeof(struct calling_interface_buffer));
- dell_send_request(&buffer, 17, 11);
- status = buffer.output[1];
+ get_buffer();
+ dell_send_request(buffer, 17, 11);
+ status = buffer->output[1];
+ release_buffer();

if ((status & (1<<2|1<<8)) == (1<<2|1<<8)) {
wifi_rfkill = rfkill_alloc("dell-wifi", &platform_device->dev,
@@ -361,39 +382,49 @@ static void dell_cleanup_rfkill(void)

static int dell_send_intensity(struct backlight_device *bd)
{
- struct calling_interface_buffer buffer;
+ int ret = 0;

- memset(&buffer, 0, sizeof(struct calling_interface_buffer));
- buffer.input[0] = find_token_location(BRIGHTNESS_TOKEN);
- buffer.input[1] = bd->props.brightness;
+ get_buffer();
+ buffer->input[0] = find_token_location(BRIGHTNESS_TOKEN);
+ buffer->input[1] = bd->props.brightness;

- if (buffer.input[0] == -1)
- return -ENODEV;
+ if (buffer->input[0] == -1) {
+ ret = -ENODEV;
+ goto out;
+ }

if (power_supply_is_system_supplied() > 0)
- dell_send_request(&buffer, 1, 2);
+ dell_send_request(buffer, 1, 2);
else
- dell_send_request(&buffer, 1, 1);
+ dell_send_request(buffer, 1, 1);

+out:
+ release_buffer();
return 0;
}

static int dell_get_intensity(struct backlight_device *bd)
{
- struct calling_interface_buffer buffer;
+ int ret = 0;

- memset(&buffer, 0, sizeof(struct calling_interface_buffer));
- buffer.input[0] = find_token_location(BRIGHTNESS_TOKEN);
+ get_buffer();
+ buffer->input[0] = find_token_location(BRIGHTNESS_TOKEN);

- if (buffer.input[0] == -1)
- return -ENODEV;
+ if (buffer->input[0] == -1) {
+ ret = -ENODEV;
+ goto out;
+ }

if (power_supply_is_system_supplied() > 0)
- dell_send_request(&buffer, 0, 2);
+ dell_send_request(buffer, 0, 2);
else
- dell_send_request(&buffer, 0, 1);
+ dell_send_request(buffer, 0, 1);

- return buffer.output[1];
+out:
+ release_buffer();
+ if (ret)
+ return ret;
+ return buffer->output[1];
}

static struct backlight_ops dell_ops = {
@@ -427,7 +458,6 @@ bool dell_laptop_i8042_filter(unsigned char data, unsigned char str,

static int __init dell_init(void)
{
- struct calling_interface_buffer buffer;
int max_intensity = 0;
int ret;

@@ -453,6 +483,17 @@ static int __init dell_init(void)
if (ret)
goto fail_platform_device2;

+ /*
+ * Allocate buffer below 4GB for SMI data--only 32-bit physical addr
+ * is passed to SMI handler.
+ */
+ bufferpage = alloc_page(GFP_KERNEL | GFP_DMA32);
+
+ if (!bufferpage)
+ goto fail_buffer;
+ buffer = page_address(bufferpage);
+ mutex_init(&buffer_mutex);
+
ret = dell_setup_rfkill();

if (ret) {
@@ -475,13 +516,13 @@ static int __init dell_init(void)
return 0;
#endif

- memset(&buffer, 0, sizeof(struct calling_interface_buffer));
- buffer.input[0] = find_token_location(BRIGHTNESS_TOKEN);
-
- if (buffer.input[0] != -1) {
- dell_send_request(&buffer, 0, 2);
- max_intensity = buffer.output[3];
+ get_buffer();
+ buffer->input[0] = find_token_location(BRIGHTNESS_TOKEN);
+ if (buffer->input[0] != -1) {
+ dell_send_request(buffer, 0, 2);
+ max_intensity = buffer->output[3];
}
+ release_buffer();

if (max_intensity) {
dell_backlight_device = backlight_device_register(
@@ -508,6 +549,8 @@ fail_backlight:
fail_filter:
dell_cleanup_rfkill();
fail_rfkill:
+ free_page((unsigned long)bufferpage);
+fail_buffer:
platform_device_del(platform_device);
fail_platform_device2:
platform_device_put(platform_device);
@@ -529,6 +572,7 @@ static void __exit dell_exit(void)
platform_driver_unregister(&platform_driver);
}
kfree(da_tokens);
+ free_page((unsigned long)buffer);
}

module_init(dell_init);
--
1.6.6.1

Matthew Garrett

unread,
Feb 26, 2010, 10:30:03 AM2/26/10
to
From: Erik Andren <erik....@gmail.com>

The Latitude C640 has another variation of dell in its DMI vendor entry.
Add it to the whitelist in order to enjoy the sweet fruits of software
backlight toggling.

Signed-off-by: Erik Andren <erik....@gmail.com>
---
drivers/platform/x86/dell-laptop.c | 8 ++++++++
1 files changed, 8 insertions(+), 0 deletions(-)

diff --git a/drivers/platform/x86/dell-laptop.c b/drivers/platform/x86/dell-laptop.c
index 04b2ddb..b7f4d27 100644
--- a/drivers/platform/x86/dell-laptop.c
+++ b/drivers/platform/x86/dell-laptop.c
@@ -81,6 +81,13 @@ static const struct dmi_system_id __initdata dell_device_table[] = {
DMI_MATCH(DMI_CHASSIS_TYPE, "8"),
},
},
+ {
+ .ident = "Dell Computer Corporation",
+ .matches = {
+ DMI_MATCH(DMI_SYS_VENDOR, "Dell Computer Corporation"),
+ DMI_MATCH(DMI_CHASSIS_TYPE, "8"),
+ },
+ },
{ }
};

@@ -609,3 +616,4 @@ MODULE_AUTHOR("Matthew Garrett <m...@redhat.com>");
MODULE_DESCRIPTION("Dell laptop driver");
MODULE_LICENSE("GPL");
MODULE_ALIAS("dmi:*svnDellInc.:*:ct8:*");
+MODULE_ALIAS("dmi:*svnDellComputerCorporation.:*:ct8:*");
--
1.6.6.1

Matthew Garrett

unread,
Feb 26, 2010, 10:30:02 AM2/26/10
to
The rfkill interface on Dells only sends a notification that the switch
has been changed via the keyboard controller. Add a filter so we can
pick these notifications up and update the rfkill state appropriately.

Signed-off-by: Matthew Garrett <m...@redhat.com>
---

drivers/platform/x86/Kconfig | 1 +
drivers/platform/x86/dell-laptop.c | 48 ++++++++++++++++++++++++++++++++++++
2 files changed, 49 insertions(+), 0 deletions(-)

diff --git a/drivers/platform/x86/Kconfig b/drivers/platform/x86/Kconfig
index f526e73..6848f21 100644
--- a/drivers/platform/x86/Kconfig
+++ b/drivers/platform/x86/Kconfig
@@ -79,6 +79,7 @@ config DELL_LAPTOP
depends on BACKLIGHT_CLASS_DEVICE
depends on RFKILL || RFKILL = n
depends on POWER_SUPPLY
+ depends on SERIO_I8042
default n
---help---
This driver adds support for rfkill and backlight control to Dell
diff --git a/drivers/platform/x86/dell-laptop.c b/drivers/platform/x86/dell-laptop.c
index 3780994..9d7e0be 100644
--- a/drivers/platform/x86/dell-laptop.c
+++ b/drivers/platform/x86/dell-laptop.c


@@ -22,6 +22,7 @@
#include <linux/rfkill.h>
#include <linux/power_supply.h>
#include <linux/acpi.h>

+#include <linux/i8042.h>
#include "../../firmware/dcdbas.h"

#define BRIGHTNESS_TOKEN 0x7d
@@ -214,6 +215,18 @@ static const struct rfkill_ops dell_rfkill_ops = {
.query = dell_rfkill_query,
};

+static void dell_update_rfkill(struct work_struct *ignored)
+{
+ if (wifi_rfkill)
+ dell_rfkill_query(wifi_rfkill, (void *)1);
+ if (bluetooth_rfkill)
+ dell_rfkill_query(bluetooth_rfkill, (void *)2);
+ if (wwan_rfkill)
+ dell_rfkill_query(wwan_rfkill, (void *)3);
+}
+static DECLARE_DELAYED_WORK(dell_rfkill_work, dell_update_rfkill);
+
+
static int __init dell_setup_rfkill(void)
{
struct calling_interface_buffer buffer;
@@ -338,6 +351,30 @@ static struct backlight_ops dell_ops = {
.update_status = dell_send_intensity,
};

+bool dell_laptop_i8042_filter(unsigned char data, unsigned char str,
+ struct serio *port)
+{
+ static bool extended;
+
+ if (str & 0x20)
+ return false;
+
+ if (unlikely(data == 0xe0)) {
+ extended = true;
+ return false;
+ } else if (unlikely(extended)) {
+ switch (data) {
+ case 0x8:
+ schedule_delayed_work(&dell_rfkill_work,
+ round_jiffies_relative(HZ));
+ break;
+ }
+ extended = false;
+ }
+
+ return false;
+}
+
static int __init dell_init(void)
{
struct calling_interface_buffer buffer;
@@ -373,6 +410,13 @@ static int __init dell_init(void)
goto fail_rfkill;
}

+ ret = i8042_install_filter(dell_laptop_i8042_filter);
+ if (ret) {
+ printk(KERN_WARNING
+ "dell-laptop: Unable to install key filter\n");
+ goto fail_filter;
+ }
+
#ifdef CONFIG_ACPI
/* In the event of an ACPI backlight being available, don't
* register the platform controller.
@@ -410,6 +454,8 @@ static int __init dell_init(void)
return 0;

fail_backlight:
+ i8042_remove_filter(dell_laptop_i8042_filter);
+fail_filter:
dell_cleanup_rfkill();
fail_rfkill:
platform_device_del(platform_device);
@@ -424,6 +470,8 @@ fail_platform_driver:

static void __exit dell_exit(void)
{
+ cancel_delayed_work_sync(&dell_rfkill_work);
+ i8042_remove_filter(dell_laptop_i8042_filter);
backlight_device_unregister(dell_backlight_device);
dell_cleanup_rfkill();
}
--
1.6.6.1

Matthew Garrett

unread,
Feb 26, 2010, 10:30:02 AM2/26/10
to
From: Thadeu Lima de Souza Cascardo <casc...@holoscopio.com>

Instead of a MODULE_DEVICE_TABLE for every acpi_driver ids table, we
create a table containing all ids to export to get a module alias for
each one.

This will fix automatic loading of the driver when one of the ACPI
devices is not present (like the accelerometer, which is not present in
some models).

Signed-off-by: Thadeu Lima de Souza Cascardo <casc...@holoscopio.com>
---
drivers/platform/x86/classmate-laptop.c | 31 +++++++++++++++++++++----------
1 files changed, 21 insertions(+), 10 deletions(-)

diff --git a/drivers/platform/x86/classmate-laptop.c b/drivers/platform/x86/classmate-laptop.c
index ed90082..8cb20e4 100644
--- a/drivers/platform/x86/classmate-laptop.c
+++ b/drivers/platform/x86/classmate-laptop.c
@@ -34,6 +34,11 @@ struct cmpc_accel {
#define CMPC_ACCEL_SENSITIVITY_DEFAULT 5


+#define CMPC_ACCEL_HID "ACCE0000"
+#define CMPC_TABLET_HID "TBLT0000"
+#define CMPC_BL_HID "IPML200"
+#define CMPC_KEYS_HID "FnBT0000"
+
/*
* Generic input device code.
*/
@@ -282,10 +287,9 @@ static int cmpc_accel_remove(struct acpi_device *acpi, int type)
}

static const struct acpi_device_id cmpc_accel_device_ids[] = {
- {"ACCE0000", 0},
+ {CMPC_ACCEL_HID, 0},
{"", 0}
};
-MODULE_DEVICE_TABLE(acpi, cmpc_accel_device_ids);

static struct acpi_driver cmpc_accel_acpi_driver = {
.owner = THIS_MODULE,
@@ -366,10 +370,9 @@ static int cmpc_tablet_resume(struct acpi_device *acpi)
}

static const struct acpi_device_id cmpc_tablet_device_ids[] = {
- {"TBLT0000", 0},
+ {CMPC_TABLET_HID, 0},
{"", 0}
};
-MODULE_DEVICE_TABLE(acpi, cmpc_tablet_device_ids);

static struct acpi_driver cmpc_tablet_acpi_driver = {
.owner = THIS_MODULE,
@@ -477,17 +480,16 @@ static int cmpc_bl_remove(struct acpi_device *acpi, int type)
return 0;
}

-static const struct acpi_device_id cmpc_device_ids[] = {
- {"IPML200", 0},
+static const struct acpi_device_id cmpc_bl_device_ids[] = {
+ {CMPC_BL_HID, 0},
{"", 0}
};
-MODULE_DEVICE_TABLE(acpi, cmpc_device_ids);

static struct acpi_driver cmpc_bl_acpi_driver = {
.owner = THIS_MODULE,
.name = "cmpc",
.class = "cmpc",
- .ids = cmpc_device_ids,
+ .ids = cmpc_bl_device_ids,
.ops = {
.add = cmpc_bl_add,
.remove = cmpc_bl_remove
@@ -540,10 +542,9 @@ static int cmpc_keys_remove(struct acpi_device *acpi, int type)
}

static const struct acpi_device_id cmpc_keys_device_ids[] = {
- {"FnBT0000", 0},
+ {CMPC_KEYS_HID, 0},
{"", 0}
};
-MODULE_DEVICE_TABLE(acpi, cmpc_keys_device_ids);

static struct acpi_driver cmpc_keys_acpi_driver = {
.owner = THIS_MODULE,
@@ -607,3 +608,13 @@ static void cmpc_exit(void)

module_init(cmpc_init);
module_exit(cmpc_exit);
+
+static const struct acpi_device_id cmpc_device_ids[] = {
+ {CMPC_ACCEL_HID, 0},
+ {CMPC_TABLET_HID, 0},
+ {CMPC_BL_HID, 0},
+ {CMPC_KEYS_HID, 0},
+ {"", 0}
+};
+
+MODULE_DEVICE_TABLE(acpi, cmpc_device_ids);
--
1.6.6.1

Matthew Garrett

unread,
Feb 26, 2010, 10:30:02 AM2/26/10
to
From: Mario Limonciello <Mario_Li...@Dell.com>

The "hardware" switch is tied directly to a BIOS interface that will
connect and disconnect the hardware from the bus.

If you use the software interface to request the BIOS to make these
changes, the HW switch will be in an inconsistent state and LEDs may not
reflect the state of the HW.

Signed-off-by: Mario Limonciello <Mario_Li...@Dell.com>
---
drivers/platform/x86/dell-laptop.c | 4 ++++
1 files changed, 4 insertions(+), 0 deletions(-)

diff --git a/drivers/platform/x86/dell-laptop.c b/drivers/platform/x86/dell-laptop.c
index b13eb6a..81213e8 100644
--- a/drivers/platform/x86/dell-laptop.c
+++ b/drivers/platform/x86/dell-laptop.c
@@ -190,6 +190,10 @@ static int dell_rfkill_set(void *data, bool blocked)


unsigned long radio = (unsigned long)data;

memset(&buffer, 0, sizeof(struct calling_interface_buffer));
+ dell_send_request(&buffer, 17, 11);
+ if (!(buffer.output[1] & BIT(16)))
+ return -EINVAL;
+


buffer.input[0] = (1 | (radio<<8) | (disable << 16));

dell_send_request(&buffer, 17, 11);

--
1.6.6.1

Matthew Garrett

unread,
Feb 26, 2010, 10:30:03 AM2/26/10
to
From: Mario Limonciello <Mario_Li...@Dell.com>

The following Dell laptops are known to have been manufacturer by Compal
and are supported by the compal-laptop platform driver
- Mini 9
- Mini 10
- Mini 12
- Mini 10v
- Inspiron 11z

Signed-off-by: Mario Limonciello <Mario_Li...@Dell.com>
Signed-off-by: Tim Gardner <tim.g...@canonical.com>
Signed-off-by: Matthew Garrett <m...@redhat.com>
Cc: Cezary Jackiewicz <cezary.j...@gmail.com>
---

drivers/platform/x86/compal-laptop.c | 46 ++++++++++++++++++++++++++++++++++
1 files changed, 46 insertions(+), 0 deletions(-)

diff --git a/drivers/platform/x86/compal-laptop.c b/drivers/platform/x86/compal-laptop.c
index 1a387e7..c78d254 100644
--- a/drivers/platform/x86/compal-laptop.c
+++ b/drivers/platform/x86/compal-laptop.c
@@ -310,6 +310,47 @@ static struct dmi_system_id __initdata compal_dmi_table[] = {
},
.callback = dmi_check_cb
},
+ {
+ .ident = "Dell Mini 9",
+ .matches = {


+ DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
+ DMI_MATCH(DMI_PRODUCT_NAME, "Inspiron 910"),
+ },

+ .callback = dmi_check_cb
+ },
+ {
+ .ident = "Dell Mini 10",
+ .matches = {


+ DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
+ DMI_MATCH(DMI_PRODUCT_NAME, "Inspiron 1010"),
+ },

+ .callback = dmi_check_cb
+ },
+ {
+ .ident = "Dell Mini 10v",
+ .matches = {


+ DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
+ DMI_MATCH(DMI_PRODUCT_NAME, "Inspiron 1011"),
+ },

+ .callback = dmi_check_cb
+ },
+ {
+ .ident = "Dell Inspiron 11z",
+ .matches = {


+ DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
+ DMI_MATCH(DMI_PRODUCT_NAME, "Inspiron 1110"),
+ },

+ .callback = dmi_check_cb
+ },
+ {
+ .ident = "Dell Mini 12",
+ .matches = {


+ DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
+ DMI_MATCH(DMI_PRODUCT_NAME, "Inspiron 1210"),
+ },

+ .callback = dmi_check_cb
+ },
+
{ }
};

@@ -403,3 +444,8 @@ MODULE_ALIAS("dmi:*:rnIFL90:rvrREFERENCE:*");
MODULE_ALIAS("dmi:*:rnIFL91:rvrIFT00:*");
MODULE_ALIAS("dmi:*:rnJFL92:rvrIFT00:*");
MODULE_ALIAS("dmi:*:rnIFT00:rvrIFT00:*");
+MODULE_ALIAS("dmi:*:svnDellInc.:pnInspiron910:*");
+MODULE_ALIAS("dmi:*:svnDellInc.:pnInspiron1010:*");
+MODULE_ALIAS("dmi:*:svnDellInc.:pnInspiron1011:*");
+MODULE_ALIAS("dmi:*:svnDellInc.:pnInspiron1110:*");
+MODULE_ALIAS("dmi:*:svnDellInc.:pnInspiron1210:*");
--
1.6.6.1

Thadeu Lima de Souza Cascardo

unread,
Feb 26, 2010, 11:30:02 AM2/26/10
to

Acked-by: Thadeu Lima de Souza Cascardo <casc...@holoscopio.com>

Thank you very much for this. I was hoping for something like that.

signature.asc

Anisse Astier

unread,
Feb 26, 2010, 11:50:02 AM2/26/10
to

> On Fri, 26 Feb 2010 10:18:34 -0500, Matthew Garrett <m...@redhat.com> wrote :
>
> >
> > +X86 PLATFORM DRIVERS
> > +M: Matthew Garrett <m...@redhat.com>
> > +L: platform-...@vger.kernel.org

By the way I noticed while registering on
http://vger.kernel.org/vger-lists.html#platform-driver-x86 that the list
does not have an archive yet.
Is it planned?

--
Anisse

Anisse Astier

unread,
Feb 26, 2010, 11:50:03 AM2/26/10
to
Hi,

On Fri, 26 Feb 2010 10:18:34 -0500, Matthew Garrett <m...@redhat.com> wrote :

>

> MSI WMI SUPPORT
> M: Anisse Astier <ani...@astier.eu>
> +L: platform-...@vger.kernel.org
> S: Supported
> F: drivers/platform/x86/msi-wmi.c
>

Great, thanks!


>
> @@ -6024,6 +6039,12 @@ S: Maintained
> F: Documentation/x86/
> F: arch/x86/
>
> +X86 PLATFORM DRIVERS
> +M: Matthew Garrett <m...@redhat.com>
> +L: platform-...@vger.kernel.org
> +S: Maintained
> +F: drivers/platform/x86
> +
> XEN HYPERVISOR INTERFACE
> M: Jeremy Fitzhardinge <jer...@xensource.com>
> M: Chris Wright <chr...@sous-sol.org>


--
Anisse

Corentin Chary

unread,
Feb 26, 2010, 5:00:02 PM2/26/10
to
On Fri, Feb 26, 2010 at 4:18 PM, Matthew Garrett <m...@redhat.com> wrote:
> Many of the drivers/platform/x86 drivers have nothing to do with ACPI, so
> it's kind of inappropriate for them to be stuck under the ACPI mailing
> list. Add a new mailing list (platform-...@vger.kernel.org) and,
> with Len's blessing, add myself as subsystem maintainer.

Ok,
Should I re-send the big asus-laptop series I sent to Len (not already
in acpi tree)
and send it back to you so it can be merged in platform-driver-x86 ?

--
Corentin Chary
http://xf.iksaif.net

Henrique de Moraes Holschuh

unread,
Feb 26, 2010, 7:00:02 PM2/26/10
to
On Fri, 26 Feb 2010, Anisse Astier wrote:
> > On Fri, 26 Feb 2010 10:18:34 -0500, Matthew Garrett <m...@redhat.com> wrote :
> > > +X86 PLATFORM DRIVERS
> > > +M: Matthew Garrett <m...@redhat.com>
> > > +L: platform-...@vger.kernel.org
>
> By the way I noticed while registering on
> http://vger.kernel.org/vger-lists.html#platform-driver-x86 that the list
> does not have an archive yet.
> Is it planned?

I have requested archival at gmane.org, which will also forward a request to
the www.mail-archive.com so it should start being archived on both these
places soon.

--
"One disk to rule them all, One disk to find them. One disk to bring
them all and in the darkness grind them. In the Land of Redmond
where the shadows lie." -- The Silicon Valley Tarot
Henrique Holschuh

Peter Feuerer

unread,
Feb 26, 2010, 7:00:02 PM2/26/10
to
Matthew Garrett writes:

Acked-by: Peter Feuerer <pe...@piie.net>

Henrique de Moraes Holschuh

unread,
Feb 26, 2010, 7:10:01 PM2/26/10
to
I send yesterday a patchset (six patches) for thinkpad-acpi, which should
also go to stable. Since it looks like you'll be thinkpad-acpi upstream,
will you pick them off linux-acpi and send them to Linus, or do you want me
to resend them to you?

Also, do you plan to use patchwork like we used to in linux-acpi?

--
"One disk to rule them all, One disk to find them. One disk to bring
them all and in the darkness grind them. In the Land of Redmond
where the shadows lie." -- The Silicon Valley Tarot
Henrique Holschuh

Jonathan Woithe

unread,
Feb 26, 2010, 11:20:02 PM2/26/10
to
Hi Matthew

> Many of the drivers/platform/x86 drivers have nothing to do with ACPI, so
> it's kind of inappropriate for them to be stuck under the ACPI mailing
> list. Add a new mailing list (platform-...@vger.kernel.org) and,
> with Len's blessing, add myself as subsystem maintainer.
>
> Signed-off-by: Matthew Garrett <m...@redhat.com>

> :


> FUJITSU LAPTOP EXTRAS
> M: Jonathan Woithe <jwo...@physics.adelaide.edu.au>
> -L: linux...@vger.kernel.org
> +L: platform-...@vger.kernel.org
> S: Maintained
> F: drivers/platform/x86/fujitsu-laptop.c

Sounds fine to me.

Acked-by: Jonathan Woithe <jwo...@physics.adelaide.edu.au>

Regards
jonathan

Harald Welte

unread,
Feb 27, 2010, 12:40:01 AM2/27/10
to
On Fri, Feb 26, 2010 at 10:18:34AM -0500, Matthew Garrett wrote:

> PANASONIC LAPTOP ACPI EXTRAS DRIVER
> M: Harald Welte <laf...@gnumonks.org>
> +L: platform-...@vger.kernel.org
> S: Maintained
> F: drivers/platform/x86/panasonic-laptop.c

fine with me, thanks.

--
- Harald Welte <laf...@gnumonks.org> http://laforge.gnumonks.org/
============================================================================
"Privacy in residential applications is a desirable marketing option."
(ETSI EN 300 175-7 Ch. A6)

Dmitry Torokhov

unread,
Feb 27, 2010, 3:10:01 AM2/27/10
to
Hi Matthew,

On Fri, Feb 26, 2010 at 10:18:37AM -0500, Matthew Garrett wrote:
> +
> static int __init dell_init(void)
> {
> struct calling_interface_buffer buffer;
> @@ -373,6 +410,13 @@ static int __init dell_init(void)
> goto fail_rfkill;
> }
>
> + ret = i8042_install_filter(dell_laptop_i8042_filter);
> + if (ret) {
> + printk(KERN_WARNING
> + "dell-laptop: Unable to install key filter\n");
> + goto fail_filter;
> + }
> +
> #ifdef CONFIG_ACPI
> /* In the event of an ACPI backlight being available, don't
> * register the platform controller.
> @@ -410,6 +454,8 @@ static int __init dell_init(void)
> return 0;
>
> fail_backlight:
> + i8042_remove_filter(dell_laptop_i8042_filter);

cancel_delayed_work_sync() is missing.

> +fail_filter:
> dell_cleanup_rfkill();
> fail_rfkill:
> platform_device_del(platform_device);
> @@ -424,6 +470,8 @@ fail_platform_driver:
>
> static void __exit dell_exit(void)
> {
> + cancel_delayed_work_sync(&dell_rfkill_work);
> + i8042_remove_filter(dell_laptop_i8042_filter);

Wrong order, you need to unregister filter first.

> backlight_device_unregister(dell_backlight_device);
> dell_cleanup_rfkill();

Thanks.

--
Dmitry

Dmitry Torokhov

unread,
Feb 27, 2010, 3:20:01 AM2/27/10
to
On Fri, Feb 26, 2010 at 10:18:46AM -0500, Matthew Garrett wrote:
> The HP touchsmart tablet has a key for rotating the UI from landscape to
> portrait. Add support for it.
>
> Signed-off-by: Matthew Garrett <m...@redhat.com>
> ---
> drivers/platform/x86/hp-wmi.c | 1 +
> 1 files changed, 1 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/platform/x86/hp-wmi.c b/drivers/platform/x86/hp-wmi.c
> index ad4c414..3aa57da 100644
> --- a/drivers/platform/x86/hp-wmi.c
> +++ b/drivers/platform/x86/hp-wmi.c
> @@ -89,6 +89,7 @@ static struct key_entry hp_wmi_keymap[] = {
> {KE_KEY, 0x20e6, KEY_PROG1},
> {KE_KEY, 0x2142, KEY_MEDIA},
> {KE_KEY, 0x213b, KEY_INFO},
> + {KE_KEY, 0x2169, KEY_DIRECTION},

I'd appreciate a patch for input.h commenting on intended use of
KEY_DIRECTION.

Thanks.

--
Dmitry

Dmitry Torokhov

unread,
Feb 27, 2010, 3:20:01 AM2/27/10
to

static ?

> +DEFINE_MUTEX(buffer_mutex);

static?

--
Dmitry

Ingo Molnar

unread,
Feb 28, 2010, 3:00:02 PM2/28/10
to

* Matthew Garrett <m...@redhat.com> wrote:

> dell-laptop: Use buffer with 32-bit physical address

Hi, this commit introduced an allyesconfig build bug - fixed via the patch
below.

Thanks,

Ingo

------------------>
From 03894dc8462f82c145ec1c3aced9b0718ae4e9ed Mon Sep 17 00:00:00 2001
From: Ingo Molnar <mi...@elte.hu>
Date: Sun, 28 Feb 2010 20:55:41 +0100
Subject: [PATCH] dell-laptop: Fix build error by making buffer_mutex static

The following build bug (x86, allyesconfig):

arch/x86/oprofile/built-in.o:(.data+0x250): multiple definition of `buffer_mutex'

Was triggered in -tip testing, caused by this upstream commit:

116ee77: dell-laptop: Use buffer with 32-bit physical address

There's multiple buffer_mutex's in the kernel. Make this new one
static.

Signed-off-by: Ingo Molnar <mi...@elte.hu>
---
drivers/platform/x86/dell-laptop.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/platform/x86/dell-laptop.c b/drivers/platform/x86/dell-laptop.c
index b7f4d27..29d96a4 100644
--- a/drivers/platform/x86/dell-laptop.c
+++ b/drivers/platform/x86/dell-laptop.c
@@ -132,8 +132,8 @@ static struct dmi_system_id __devinitdata dell_blacklist[] = {
};

static struct calling_interface_buffer *buffer;
-struct page *bufferpage;
-DEFINE_MUTEX(buffer_mutex);
+static struct page *bufferpage;
+static DEFINE_MUTEX(buffer_mutex);

static int hwswitch_state;

Matthew Garrett

unread,
Mar 1, 2010, 9:50:01 AM3/1/10
to
I'll pick those up off linux-acpi. Thanks!

--
Matthew Garrett | mj...@srcf.ucam.org

Len Brown

unread,
Mar 1, 2010, 1:00:03 PM3/1/10
to
On Fri, 26 Feb 2010, Corentin Chary wrote:

> On Fri, Feb 26, 2010 at 4:18 PM, Matthew Garrett <m...@redhat.com> wrote:

> > Add a new mailing list (platform-...@vger.kernel.org)

> Ok,


> Should I re-send the big asus-laptop series I sent to Len (not already
> in acpi tree) and send it back to you so it can be merged in platform-driver-x86 ?

It looks like Matthew didn't send this up, so I've appended it
to an asus branch in my tree (I had Roel Kluin's "remove duplicate
comparison" patch sitting in there).

Matthew,
Unless you object, I'll send Corentin's asus-laptop cleanup
upstream with my treek.

thanks,
Len Brown, Intel Open Source Technology Center

Matthew Garrett

unread,
Mar 1, 2010, 1:10:02 PM3/1/10
to
On Mon, Mar 01, 2010 at 12:59:03PM -0500, Len Brown wrote:

> Matthew,
> Unless you object, I'll send Corentin's asus-laptop cleanup
> upstream with my treek.

I've just pulled this in (along with a couple of other minor fixes) -
I'm just waiting to make sure I get the right set of Thinkpad fixes
before sending another pull request.

--
Matthew Garrett | mj...@srcf.ucam.org

Len Brown

unread,
Mar 1, 2010, 1:30:02 PM3/1/10
to

thanks,
Len Brown, Intel Open Source Technology Center

On Mon, 1 Mar 2010, Matthew Garrett wrote:

> On Mon, Mar 01, 2010 at 12:59:03PM -0500, Len Brown wrote:
>
> > Matthew,
> > Unless you object, I'll send Corentin's asus-laptop cleanup
> > upstream with my treek.
>
> I've just pulled this in (along with a couple of other minor fixes) -
> I'm just waiting to make sure I get the right set of Thinkpad fixes
> before sending another pull request.

excellent.

please pick up this one too, and I'll delete my asus branch.

thanks,
-Len


From 6204ff7f967d68b6c3b830b6df2cf2a3081b77a8 Mon Sep 17 00:00:00 2001
From: Roel Kluin <roel....@gmail.com>
Date: Tue, 2 Feb 2010 14:37:57 -0800
Subject: [PATCH] asus-acpi: remove duplicate comparison of asus_model strings
X-Patchwork-Hint: ignore

These tests already occur elsewhere

Signed-off-by: Roel Kluin <roel....@gmail.com>
Signed-off-by: Andrew Morton <ak...@linux-foundation.org>
Acked-by: Corentin Chary <corenti...@gmail.com>
Signed-off-by: Len Brown <len....@intel.com>
---
drivers/platform/x86/asus_acpi.c | 3 +--
1 files changed, 1 insertions(+), 2 deletions(-)

diff --git a/drivers/platform/x86/asus_acpi.c b/drivers/platform/x86/asus_acpi.c
index c1d2aee..1381430 100644
--- a/drivers/platform/x86/asus_acpi.c
+++ b/drivers/platform/x86/asus_acpi.c
@@ -1225,9 +1225,8 @@ static int asus_model_match(char *model)
else if (strncmp(model, "M2N", 3) == 0 ||
strncmp(model, "M3N", 3) == 0 ||
strncmp(model, "M5N", 3) == 0 ||
- strncmp(model, "M6N", 3) == 0 ||
strncmp(model, "S1N", 3) == 0 ||
- strncmp(model, "S5N", 3) == 0 || strncmp(model, "W1N", 3) == 0)
+ strncmp(model, "S5N", 3) == 0)
return xxN;
else if (strncmp(model, "M1", 2) == 0)
return M1A;
--
1.7.0.87.g0901d

Ingo Molnar

unread,
Mar 2, 2010, 9:00:02 AM3/2/10
to

Hi,

* Matthew Garrett <m...@redhat.com> wrote:

> compal-laptop: Add support for known Compal made Dell laptops
> compal-laptop: Replace sysfs support with rfkill support

FYI, -tip testing found a (relatively rare) build failure introduced by these
commits, which occurs with certain .config's - see the fix below. Please
apply.

Thanks,

Ingo

--------------------------->
From a6e5fbf2d4b6e9f78abcc5784f23403aa7972369 Mon Sep 17 00:00:00 2001
From: Ingo Molnar <mi...@elte.hu>
Date: Tue, 2 Mar 2010 14:51:16 +0100
Subject: [PATCH] compal-laptop: Make it depend on CONFIG_RFKILL

-tip testing found this build failure (x86 randconfig):

drivers/built-in.o: In function `setup_rfkill':
compal-laptop.c:(.text+0x36abe8): undefined reference to `rfkill_alloc'
compal-laptop.c:(.text+0x36abfc): undefined reference to `rfkill_register'
compal-laptop.c:(.text+0x36ac30): undefined reference to `rfkill_alloc'
compal-laptop.c:(.text+0x36ac44): undefined reference to `rfkill_register'

Which can happen with CONFIG_COMPAL_LAPTOP=y but COMPAL_LAPTOP=m.

Signed-off-by: Ingo Molnar <mi...@elte.hu>
---

drivers/platform/x86/Kconfig | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/drivers/platform/x86/Kconfig b/drivers/platform/x86/Kconfig
index 89da3e2..56076ee 100644
--- a/drivers/platform/x86/Kconfig
+++ b/drivers/platform/x86/Kconfig
@@ -178,6 +178,7 @@ config COMPAL_LAPTOP
tristate "Compal Laptop Extras"
depends on ACPI
depends on BACKLIGHT_CLASS_DEVICE
+ depends on RFKILL
---help---
This is a driver for laptops built by Compal:

Matthew Garrett

unread,
Mar 2, 2010, 10:10:02 AM3/2/10
to
Hi Linus,

Here's some misc fixes (including a couple of build fixes), along with
updates to the asus and Thinkpad drivers.

The following changes since commit 30ff056c42c665b9ea535d8515890857ae382540:
Linus Torvalds (1):
Merge branch 'x86-uv-for-linus' of git://git.kernel.org/.../tip/linux-2.6-tip

are available in the git repository at:

git://git.kernel.org/pub/scm/linux/kernel/git/mjg59/platform-drivers-x86.git for_linus

Alan Jenkins (2):
eeepc-laptop: disable wireless hotplug for 1005PE
eeepc-laptop: check wireless hotplug events

Corentin Chary (30):
eeepc-laptop: set the right paths in the documentation
asus-laptop: add wireless and bluetooth status parameter
asus-laptop: set the right paths in the documentation
asus-laptop: no need to check argument of set_brightness()
asus-laptop: simplify write_acpi_int
asus-laptop: use tabs to indent macros and remove unused ones
asus-laptop: remove unecessary hotk != NULL check
asus-laptop: change initialization order
asus-laptop: revise names
asus-laptop: move backlight and dsdt info inside asus_laptop struct
asus-laptop: callbacks should use "driver data" parameter or field
asus-laptop: code movement
asus-laptop: stop using read_status for bluetooth and wlan
asus-laptop: stop using read_status and store_status for GPS
asus-laptop: stop using read_status for lcd
asus-laptop: removing read_status/store_status/write_status and asus->status
asus-laptop: rename function talking directly to acpi with asus_xxx scheme
asus-laptop: stop using ASUS_HANDLE and use relative methods instead
asus-laptop: add error check for write_acpi_int calls
asus-laptop: rename wireless_status to wlan_status to avoid confusion
asus-laptop: switch to sparse keymap library
asus-laptop: add bluetooth keys found on M9V
asus-laptop: add backlight changes notifications
asus-laptop: leds, remove dead code and fix asus_led_exit()/asus_led_init()
asus-laptop: set initial lcd state
asus-laptop: add gps rfkill
asus-laptop: clean led code
asus-laptop: use device_create_file() instead of platform_group
asus-laptop: fix style problems reported by checkpath.pl
Merge branch 'eeepc-laptop' into acpi4asus

Frans Pop (1):
toshiba-acpi: fix multimedia keys on some machines

Henrique de Moraes Holschuh (7):
thinkpad-acpi: document HKEY event 3006
thinkpad-acpi: R52 brightness_mode has been confirmed
thinkpad-acpi: fix poll thread auto-start
thinkpad-acpi: make driver events work in NVRAM poll mode
thinkpad-acpi: fix bluetooth/wwan resume
thinkpad-acpi: lock down video output state access
thinkpad-acpi: fix ALSA callback return status

Ingo Molnar (2):


dell-laptop: Fix build error by making buffer_mutex static

compal-laptop: Make it depend on CONFIG_RFKILL

Matthew Garrett (3):
dell-laptop: Fix errors on failure and exit paths
Merge git://git.iksaif.net/acpi4asus into x86-platform
Merge branch 'for-upstream/platform-x86_tpacpi' of git://repo.or.cz/linux-2.6/linux-acpi-2.6/ibm-acpi-2.6 into x86-platform

Roel Kluin (1):


asus-acpi: remove duplicate comparison of asus_model strings

Thadeu Lima de Souza Cascardo (2):
MAINTAINERS: Add git tree to x86 Platform Drivers
classmate-laptop: Added some keys present in other devices

.../ABI/testing/sysfs-platform-asus-laptop | 12 +-
.../ABI/testing/sysfs-platform-eeepc-laptop | 10 +-
Documentation/laptops/thinkpad-acpi.txt | 4 +
MAINTAINERS | 1 +
drivers/platform/x86/Kconfig | 13 +-
drivers/platform/x86/asus-laptop.c | 1741 ++++++++++----------
drivers/platform/x86/asus_acpi.c | 3 +-
drivers/platform/x86/classmate-laptop.c | 4 +
drivers/platform/x86/dell-laptop.c | 9 +-
drivers/platform/x86/eeepc-laptop.c | 21 +-
drivers/platform/x86/thinkpad_acpi.c | 116 +-
drivers/platform/x86/toshiba_acpi.c | 30 +-
12 files changed, 1058 insertions(+), 906 deletions(-)

--
Matthew Garrett | mj...@srcf.ucam.org

Matthew Garrett

unread,
Mar 2, 2010, 10:10:02 AM3/2/10
to
0 new messages