diff options
-rw-r--r-- | Documentation/00-INDEX | 8 | ||||
-rw-r--r-- | Documentation/laptops/00-INDEX | 10 | ||||
-rw-r--r-- | Documentation/laptops/acer-wmi.txt | 202 | ||||
-rw-r--r-- | Documentation/laptops/sony-laptop.txt (renamed from Documentation/sony-laptop.txt) | 1 | ||||
-rw-r--r-- | Documentation/laptops/sonypi.txt (renamed from Documentation/sonypi.txt) | 0 | ||||
-rw-r--r-- | Documentation/laptops/thinkpad-acpi.txt (renamed from Documentation/thinkpad-acpi.txt) | 0 | ||||
-rw-r--r-- | arch/x86/Kconfig | 3 | ||||
-rw-r--r-- | drivers/acpi/Makefile | 2 | ||||
-rw-r--r-- | drivers/acpi/sbs.c | 2 | ||||
-rw-r--r-- | drivers/acpi/sbshc.c | 6 | ||||
-rw-r--r-- | drivers/char/Kconfig | 2 | ||||
-rw-r--r-- | drivers/cpuidle/cpuidle.c | 13 | ||||
-rw-r--r-- | drivers/misc/Kconfig | 13 | ||||
-rw-r--r-- | drivers/misc/acer-wmi.c | 6 | ||||
-rw-r--r-- | include/linux/thermal.h | 23 |
15 files changed, 269 insertions, 22 deletions
diff --git a/Documentation/00-INDEX b/Documentation/00-INDEX index 6e9c405..8d55670 100644 --- a/Documentation/00-INDEX +++ b/Documentation/00-INDEX @@ -227,6 +227,8 @@ kref.txt - docs on adding reference counters (krefs) to kernel objects. laptop-mode.txt - how to conserve battery power using laptop-mode. +laptops/ + - directory with laptop related info and laptop driver documentation. ldm.txt - a brief description of LDM (Windows Dynamic Disks). leds-class.txt @@ -351,10 +353,6 @@ sh/ - directory with info on porting Linux to a new architecture. smart-config.txt - description of the Smart Config makefile feature. -sony-laptop.txt - - Sony Notebook Control Driver (SNC) Readme. -sonypi.txt - - info on Linux Sony Programmable I/O Device support. sound/ - directory with info on sound card support. sparc/ @@ -385,8 +383,6 @@ sysrq.txt - info on the magic SysRq key. telephony/ - directory with info on telephony (e.g. voice over IP) support. -thinkpad-acpi.txt - - information on the (IBM and Lenovo) ThinkPad ACPI Extras driver. time_interpolators.txt - info on time interpolators. tipar.txt diff --git a/Documentation/laptops/00-INDEX b/Documentation/laptops/00-INDEX new file mode 100644 index 0000000..729c2c0 --- /dev/null +++ b/Documentation/laptops/00-INDEX @@ -0,0 +1,10 @@ +00-INDEX + - This file +acer-wmi.txt + - information on the Acer Laptop WMI Extras driver. +sony-laptop.txt + - Sony Notebook Control Driver (SNC) Readme. +sonypi.txt + - info on Linux Sony Programmable I/O Device support. +thinkpad-acpi.txt + - information on the (IBM and Lenovo) ThinkPad ACPI Extras driver. diff --git a/Documentation/laptops/acer-wmi.txt b/Documentation/laptops/acer-wmi.txt new file mode 100644 index 0000000..b066963 --- /dev/null +++ b/Documentation/laptops/acer-wmi.txt @@ -0,0 +1,202 @@ +Acer Laptop WMI Extras Driver +http://code.google.com/p/aceracpi +Version 0.1 +9th February 2008 + +Copyright 2007-2008 Carlos Corbacho <carlos@strangeworlds.co.uk> + +acer-wmi is a driver to allow you to control various parts of your Acer laptop +hardware under Linux which are exposed via ACPI-WMI. + +This driver completely replaces the old out-of-tree acer_acpi, which I am +currently maintaining for bug fixes only on pre-2.6.25 kernels. All development +work is now focused solely on acer-wmi. + +Disclaimer +********** + +Acer and Wistron have provided nothing towards the development acer_acpi or +acer-wmi. All information we have has been through the efforts of the developers +and the users to discover as much as possible about the hardware. + +As such, I do warn that this could break your hardware - this is extremely +unlikely of course, but please bear this in mind. + +Background +********** + +acer-wmi is derived from acer_acpi, originally developed by Mark +Smith in 2005, then taken over by Carlos Corbacho in 2007, in order to activate +the wireless LAN card under a 64-bit version of Linux, as acerhk[1] (the +previous solution to the problem) relied on making 32 bit BIOS calls which are +not possible in kernel space from a 64 bit OS. + +[1] acerhk: http://www.cakey.de/acerhk/ + +Supported Hardware +****************** + +Please see the website for the current list of known working hardare: + +http://code.google.com/p/aceracpi/wiki/SupportedHardware + +If your laptop is not listed, or listed as unknown, and works with acer-wmi, +please contact me with a copy of the DSDT. + +If your Acer laptop doesn't work with acer-wmi, I would also like to see the +DSDT. + +To send me the DSDT, as root/sudo: + +cat /sys/firmware/acpi/DSDT > dsdt + +And send me the resulting 'dsdt' file. + +Usage +***** + +On Acer laptops, acer-wmi should already be autoloaded based on DMI matching. +For non-Acer laptops, until WMI based autoloading support is added, you will +need to manually load acer-wmi. + +acer-wmi creates /sys/devices/platform/acer-wmi, and fills it with various +files whose usage is detailed below, which enables you to control some of the +following (varies between models): + +* the wireless LAN card radio +* inbuilt Bluetooth adapter +* inbuilt 3G card +* mail LED of your laptop +* brightness of the LCD panel + +Wireless +******** + +With regards to wireless, all acer-wmi does is enable the radio on the card. It +is not responsible for the wireless LED - once the radio is enabled, this is +down to the wireless driver for your card. So the behaviour of the wireless LED, +once you enable the radio, will depend on your hardware and driver combination. + +e.g. With the BCM4318 on the Acer Aspire 5020 series: + +ndiswrapper: Light blinks on when transmitting +bcm43xx/b43: Solid light, blinks off when transmitting + +Wireless radio control is unconditionally enabled - all Acer laptops that support +acer-wmi come with built-in wireless. However, should you feel so inclined to +ever wish to remove the card, or swap it out at some point, please get in touch +with me, as we may well be able to gain some data on wireless card detection. + +To read the status of the wireless radio (0=off, 1=on): +cat /sys/devices/platform/acer-wmi/wireless + +To enable the wireless radio: +echo 1 > /sys/devices/platform/acer-wmi/wireless + +To disable the wireless radio: +echo 0 > /sys/devices/platform/acer-wmi/wireless + +To set the state of the wireless radio when loading acer-wmi, pass: +wireless=X (where X is 0 or 1) + +Bluetooth +********* + +For bluetooth, this is an internal USB dongle, so once enabled, you will get +a USB device connection event, and a new USB device appears. When you disable +bluetooth, you get the reverse - a USB device disconnect event, followed by the +device disappearing again. + +Bluetooth is autodetected by acer-wmi, so if you do not have a bluetooth module +installed in your laptop, this file won't exist (please be aware that it is +quite common for Acer not to fit bluetooth to their laptops - so just because +you have a bluetooth button on the laptop, doesn't mean that bluetooth is +installed). + +For the adventurously minded - if you want to buy an internal bluetooth +module off the internet that is compatible with your laptop and fit it, then +it will work just fine with acer-wmi. + +To read the status of the bluetooth module (0=off, 1=on): +cat /sys/devices/platform/acer-wmi/wireless + +To enable the bluetooth module: +echo 1 > /sys/devices/platform/acer-wmi/bluetooth + +To disable the bluetooth module: +echo 0 > /sys/devices/platform/acer-wmi/bluetooth + +To set the state of the bluetooth module when loading acer-wmi, pass: +bluetooth=X (where X is 0 or 1) + +3G +** + +3G is currently not autodetected, so the 'threeg' file is always created under +sysfs. So far, no-one in possession of an Acer laptop with 3G built-in appears to +have tried Linux, or reported back, so we don't have any information on this. + +If you have an Acer laptop that does have a 3G card in, please contact me so we +can properly detect these, and find out a bit more about them. + +To read the status of the 3G card (0=off, 1=on): +cat /sys/devices/platform/acer-wmi/threeg + +To enable the 3G card: +echo 1 > /sys/devices/platform/acer-wmi/threeg + +To disable the 3G card: +echo 0 > /sys/devices/platform/acer-wmi/threeg + +To set the state of the 3G card when loading acer-wmi, pass: +threeg=X (where X is 0 or 1) + +Mail LED +******** + +This can be found in most older Acer laptops supported by acer-wmi, and many +newer ones - it is built into the 'mail' button, and blinks when active. + +On newer (WMID) laptops though, we have no way of detecting the mail LED. If +your laptop identifies itself in dmesg as a WMID model, then please try loading +acer_acpi with: + +force_series=2490 + +This will use a known alternative method of reading/ writing the mail LED. If +it works, please report back to me with the DMI data from your laptop so this +can be added to acer-wmi. + +The LED is exposed through the LED subsystem, and can be found in: + +/sys/devices/platform/acer-wmi/leds/acer-mail:green/ + +The mail LED is autodetected, so if you don't have one, the LED device won't +be registered. + +If you have a mail LED that is not green, please report this to me. + +Backlight +********* + +The backlight brightness control is available on all acer-wmi supported +hardware. The maximum brightness level is usually 15, but on some newer laptops +it's 10 (this is again autodetected). + +The backlight is exposed through the backlight subsystem, and can be found in: + +/sys/devices/platform/acer-wmi/backlight/acer-wmi/ + +Credits +******* + +Olaf Tauber, who did the real hard work when he developed acerhk +http://www.informatik.hu-berlin.de/~tauber/acerhk +All the authors of laptop ACPI modules in the kernel, whose work +was an inspiration in the early days of acer_acpi +Mathieu Segaud, who solved the problem with having to modprobe the driver +twice in acer_acpi 0.2. +Jim Ramsay, who added support for the WMID interface +Mark Smith, who started the original acer_acpi + +And the many people who have used both acer_acpi and acer-wmi. diff --git a/Documentation/sony-laptop.txt b/Documentation/laptops/sony-laptop.txt index 7a5c1a8..8b2bc15 100644 --- a/Documentation/sony-laptop.txt +++ b/Documentation/laptops/sony-laptop.txt @@ -114,4 +114,3 @@ Bugs/Limitations: sonypi driver (through /dev/sonypi) does not try to use the sony-laptop driver. In the future, spicctrl could try sonypi first, and if it isn't present, try sony-laptop instead. - diff --git a/Documentation/sonypi.txt b/Documentation/laptops/sonypi.txt index 4857acf..4857acf 100644 --- a/Documentation/sonypi.txt +++ b/Documentation/laptops/sonypi.txt diff --git a/Documentation/thinkpad-acpi.txt b/Documentation/laptops/thinkpad-acpi.txt index 6c24777..6c24777 100644 --- a/Documentation/thinkpad-acpi.txt +++ b/Documentation/laptops/thinkpad-acpi.txt diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index 65a70b7..a64d532 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig @@ -102,6 +102,9 @@ config ARCH_HAS_ILOG2_U32 config ARCH_HAS_ILOG2_U64 def_bool n +config ARCH_HAS_CPU_IDLE_WAIT + def_bool y + config GENERIC_CALIBRATE_DELAY def_bool y diff --git a/drivers/acpi/Makefile b/drivers/acpi/Makefile index f29812a..40b0fca 100644 --- a/drivers/acpi/Makefile +++ b/drivers/acpi/Makefile @@ -60,5 +60,5 @@ obj-$(CONFIG_ACPI_ASUS) += asus_acpi.o obj-$(CONFIG_ACPI_TOSHIBA) += toshiba_acpi.o obj-$(CONFIG_ACPI_HOTPLUG_MEMORY) += acpi_memhotplug.o obj-$(CONFIG_ACPI_PROCFS_POWER) += cm_sbs.o -obj-$(CONFIG_ACPI_SBS) += sbs.o obj-$(CONFIG_ACPI_SBS) += sbshc.o +obj-$(CONFIG_ACPI_SBS) += sbs.o diff --git a/drivers/acpi/sbs.c b/drivers/acpi/sbs.c index 1194105..585ae3c 100644 --- a/drivers/acpi/sbs.c +++ b/drivers/acpi/sbs.c @@ -827,7 +827,7 @@ static int acpi_battery_add(struct acpi_sbs *sbs, int id) #endif printk(KERN_INFO PREFIX "%s [%s]: Battery Slot [%s] (battery %s)\n", ACPI_SBS_DEVICE_NAME, acpi_device_bid(sbs->device), - battery->name, sbs->battery->present ? "present" : "absent"); + battery->name, battery->present ? "present" : "absent"); return result; } diff --git a/drivers/acpi/sbshc.c b/drivers/acpi/sbshc.c index ae9a904..a2cf300 100644 --- a/drivers/acpi/sbshc.c +++ b/drivers/acpi/sbshc.c @@ -117,6 +117,11 @@ static int acpi_smbus_transaction(struct acpi_smb_hc *hc, u8 protocol, int ret = -EFAULT, i; u8 temp, sz = 0; + if (!hc) { + printk(KERN_ERR PREFIX "host controller is not configured\n"); + return ret; + } + mutex_lock(&hc->lock); if (smb_hc_read(hc, ACPI_SMB_PROTOCOL, &temp)) goto end; @@ -292,6 +297,7 @@ static int acpi_smbus_hc_remove(struct acpi_device *device, int type) hc = acpi_driver_data(device); acpi_ec_remove_query_handler(hc->ec, hc->query_bit); kfree(hc); + acpi_driver_data(device) = NULL; return 0; } diff --git a/drivers/char/Kconfig b/drivers/char/Kconfig index f01ac9a..47c6be8 100644 --- a/drivers/char/Kconfig +++ b/drivers/char/Kconfig @@ -875,7 +875,7 @@ config SONYPI Device which can be found in many (all ?) Sony Vaio laptops. If you have one of those laptops, read - <file:Documentation/sonypi.txt>, and say Y or M here. + <file:Documentation/laptops/sonypi.txt>, and say Y or M here. To compile this driver as a module, choose M here: the module will be called sonypi. diff --git a/drivers/cpuidle/cpuidle.c b/drivers/cpuidle/cpuidle.c index 2c4b2d4..60f71e6 100644 --- a/drivers/cpuidle/cpuidle.c +++ b/drivers/cpuidle/cpuidle.c @@ -27,6 +27,17 @@ static void (*pm_idle_old)(void); static int enabled_devices; +#if defined(CONFIG_ARCH_HAS_CPU_IDLE_WAIT) +static void cpuidle_kick_cpus(void) +{ + cpu_idle_wait(); +} +#elif defined(CONFIG_SMP) +# error "Arch needs cpu_idle_wait() equivalent here" +#else /* !CONFIG_ARCH_HAS_CPU_IDLE_WAIT && !CONFIG_SMP */ +static void cpuidle_kick_cpus(void) {} +#endif + /** * cpuidle_idle_call - the main idle loop * @@ -83,7 +94,7 @@ void cpuidle_uninstall_idle_handler(void) { if (enabled_devices && (pm_idle != pm_idle_old)) { pm_idle = pm_idle_old; - cpu_idle_wait(); + cpuidle_kick_cpus(); } } diff --git a/drivers/misc/Kconfig b/drivers/misc/Kconfig index c143a86..1abc95c 100644 --- a/drivers/misc/Kconfig +++ b/drivers/misc/Kconfig @@ -114,6 +114,9 @@ config ACER_WMI wireless radio and bluetooth control, and on some laptops, exposes the mail LED and LCD backlight. + For more information about this driver see + <file:Documentation/laptops/acer-wmi.txt> + If you have an ACPI-WMI compatible Acer/ Wistron laptop, say Y or M here. @@ -152,8 +155,9 @@ config FUJITSU_LAPTOP If you have a Fujitsu laptop, say Y or M here. config TC1100_WMI - tristate "HP Compaq TC1100 Tablet WMI Extras" + tristate "HP Compaq TC1100 Tablet WMI Extras (EXPERIMENTAL)" depends on X86 && !X86_64 + depends on EXPERIMENTAL depends on ACPI select ACPI_WMI ---help--- @@ -192,7 +196,7 @@ config SONY_LAPTOP screen brightness control, Fn keys and allows powering on/off some devices. - Read <file:Documentation/sony-laptop.txt> for more information. + Read <file:Documentation/laptops/sony-laptop.txt> for more information. config SONYPI_COMPAT bool "Sonypi compatibility" @@ -211,8 +215,9 @@ config THINKPAD_ACPI This is a driver for the IBM and Lenovo ThinkPad laptops. It adds support for Fn-Fx key combinations, Bluetooth control, video output switching, ThinkLight control, UltraBay eject and more. - For more information about this driver see - <file:Documentation/thinkpad-acpi.txt> and <http://ibm-acpi.sf.net/> . + For more information about this driver see + <file:Documentation/laptops/thinkpad-acpi.txt> and + <http://ibm-acpi.sf.net/> . This driver was formerly known as ibm-acpi. diff --git a/drivers/misc/acer-wmi.c b/drivers/misc/acer-wmi.c index a4d6775..d7aea93 100644 --- a/drivers/misc/acer-wmi.c +++ b/drivers/misc/acer-wmi.c @@ -428,11 +428,9 @@ static acpi_status AMW0_set_u32(u32 value, u32 cap, struct wmi_interface *iface) if (value > max_brightness) return AE_BAD_PARAMETER; switch (quirks->brightness) { - case 1: - return ec_write(0x83, value); default: - return AE_BAD_ADDRESS; - break; + return ec_write(0x83, value); + break; } default: return AE_BAD_ADDRESS; diff --git a/include/linux/thermal.h b/include/linux/thermal.h index bba7712..818ca1c 100644 --- a/include/linux/thermal.h +++ b/include/linux/thermal.h @@ -79,7 +79,9 @@ struct thermal_zone_device { }; struct thermal_zone_device *thermal_zone_device_register(char *, int, void *, - struct thermal_zone_device_ops *); + struct + thermal_zone_device_ops + *); void thermal_zone_device_unregister(struct thermal_zone_device *); int thermal_zone_bind_cooling_device(struct thermal_zone_device *, int, @@ -87,8 +89,23 @@ int thermal_zone_bind_cooling_device(struct thermal_zone_device *, int, int thermal_zone_unbind_cooling_device(struct thermal_zone_device *, int, struct thermal_cooling_device *); +#ifdef CONFIG_THERMAL struct thermal_cooling_device *thermal_cooling_device_register(char *, void *, - struct thermal_cooling_device_ops *); + struct + thermal_cooling_device_ops + *); void thermal_cooling_device_unregister(struct thermal_cooling_device *); +#else +static inline struct thermal_cooling_device +*thermal_cooling_device_register(char *c, void *v, + struct thermal_cooling_device_ops *t) +{ + return NULL; +} +static inline + void thermal_cooling_device_unregister(struct thermal_cooling_device *t) +{ +}; +#endif -#endif /* __THERMAL_H__ */ +#endif /* __THERMAL_H__ */ |