Merge branch 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6

* 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6:
ACPI button: don't try to use a non-existent lid device
ACPI: video: Loosen strictness of video bus detection code
eeepc-laptop: Prevent a panic when disabling RT2860 wireless when associated
eeepc-laptop: Properly annote eeepc_enable_camera().
ACPI / PCI: Fix NULL pointer dereference in acpi_get_pci_dev() (rev. 2)
fujitsu-laptop: address missed led-class ifdef fixup
ACPI: Kconfig, fix proc aggregator text
ACPI: add AC/DC notifier

+46 -15
+2 -2
drivers/acpi/Kconfig
··· 218 depends on X86 219 help 220 ACPI 4.0 defines processor Aggregator, which enables OS to perform 221 - specfic processor configuration and control that applies to all 222 processors in the platform. Currently only logical processor idling 223 is defined, which is to reduce power consumption. This driver 224 - support the new device. 225 226 config ACPI_THERMAL 227 tristate "Thermal Zone"
··· 218 depends on X86 219 help 220 ACPI 4.0 defines processor Aggregator, which enables OS to perform 221 + specific processor configuration and control that applies to all 222 processors in the platform. Currently only logical processor idling 223 is defined, which is to reduce power consumption. This driver 224 + supports the new device. 225 226 config ACPI_THERMAL 227 tristate "Thermal Zone"
+1
drivers/acpi/ac.c
··· 245 acpi_bus_generate_netlink_event(device->pnp.device_class, 246 dev_name(&device->dev), event, 247 (u32) ac->state); 248 #ifdef CONFIG_ACPI_SYSFS_POWER 249 kobject_uevent(&ac->charger.dev->kobj, KOBJ_CHANGE); 250 #endif
··· 245 acpi_bus_generate_netlink_event(device->pnp.device_class, 246 dev_name(&device->dev), event, 247 (u32) ac->state); 248 + acpi_notifier_call_chain(device, event, (u32) ac->state); 249 #ifdef CONFIG_ACPI_SYSFS_POWER 250 kobject_uevent(&ac->charger.dev->kobj, KOBJ_CHANGE); 251 #endif
+3
drivers/acpi/button.c
··· 251 acpi_status status; 252 unsigned long long state; 253 254 status = acpi_evaluate_integer(lid_device->handle, "_LID", NULL, 255 &state); 256 if (ACPI_FAILURE(status))
··· 251 acpi_status status; 252 unsigned long long state; 253 254 + if (!lid_device) 255 + return -ENODEV; 256 + 257 status = acpi_evaluate_integer(lid_device->handle, "_LID", NULL, 258 &state); 259 if (ACPI_FAILURE(status))
+11
drivers/acpi/pci_root.c
··· 389 390 pbus = pdev->subordinate; 391 pci_dev_put(pdev); 392 } 393 out: 394 list_for_each_entry_safe(node, tmp, &device_list, node)
··· 389 390 pbus = pdev->subordinate; 391 pci_dev_put(pdev); 392 + 393 + /* 394 + * This function may be called for a non-PCI device that has a 395 + * PCI parent (eg. a disk under a PCI SATA controller). In that 396 + * case pdev->subordinate will be NULL for the parent. 397 + */ 398 + if (!pbus) { 399 + dev_dbg(&pdev->dev, "Not a PCI-to-PCI bridge\n"); 400 + pdev = NULL; 401 + break; 402 + } 403 } 404 out: 405 list_for_each_entry_safe(node, tmp, &device_list, node)
+6 -1
drivers/acpi/video.c
··· 1109 */ 1110 1111 /* Does this device support video switching? */ 1112 - if (video->cap._DOS) { 1113 video->flags.multihead = 1; 1114 status = 0; 1115 }
··· 1109 */ 1110 1111 /* Does this device support video switching? */ 1112 + if (video->cap._DOS || video->cap._DOD) { 1113 + if (!video->cap._DOS) { 1114 + printk(KERN_WARNING FW_BUG 1115 + "ACPI(%s) defines _DOD but not _DOS\n", 1116 + acpi_device_bid(video->device)); 1117 + } 1118 video->flags.multihead = 1; 1119 status = 0; 1120 }
+1 -1
drivers/acpi/video_detect.c
··· 84 return 0; 85 86 /* Does this device able to support video switching ? */ 87 - if (ACPI_SUCCESS(acpi_get_handle(device->handle, "_DOD", &h_dummy)) && 88 ACPI_SUCCESS(acpi_get_handle(device->handle, "_DOS", &h_dummy))) 89 video_caps |= ACPI_VIDEO_OUTPUT_SWITCHING; 90
··· 84 return 0; 85 86 /* Does this device able to support video switching ? */ 87 + if (ACPI_SUCCESS(acpi_get_handle(device->handle, "_DOD", &h_dummy)) || 88 ACPI_SUCCESS(acpi_get_handle(device->handle, "_DOS", &h_dummy))) 89 video_caps |= ACPI_VIDEO_OUTPUT_SWITCHING; 90
+21 -10
drivers/platform/x86/eeepc-laptop.c
··· 150 /* The actual device the driver binds to */ 151 static struct eeepc_hotk *ehotk; 152 153 /* Platform device/driver */ 154 static int eeepc_hotk_thaw(struct device *device); 155 static int eeepc_hotk_restore(struct device *device); ··· 345 static int eeepc_rfkill_set(void *data, bool blocked) 346 { 347 unsigned long asl = (unsigned long)data; 348 - return set_acpi(asl, !blocked); 349 } 350 351 static const struct rfkill_ops eeepc_rfkill_ops = { 352 .set_block = eeepc_rfkill_set, 353 }; 354 355 - static void __init eeepc_enable_camera(void) 356 { 357 /* 358 * If the following call to set_acpi() fails, it's because there's no ··· 654 return 0; 655 } 656 657 - static void eeepc_rfkill_hotplug(void) 658 { 659 struct pci_dev *dev; 660 struct pci_bus *bus; 661 - bool blocked = eeepc_wlan_rfkill_blocked(); 662 663 - if (ehotk->wlan_rfkill) 664 rfkill_set_sw_state(ehotk->wlan_rfkill, blocked); 665 666 mutex_lock(&ehotk->hotplug_lock); ··· 703 if (event != ACPI_NOTIFY_BUS_CHECK) 704 return; 705 706 - eeepc_rfkill_hotplug(); 707 } 708 709 static void eeepc_hotk_notify(struct acpi_device *device, u32 event) ··· 861 { 862 /* Refresh both wlan rfkill state and pci hotplug */ 863 if (ehotk->wlan_rfkill) 864 - eeepc_rfkill_hotplug(); 865 866 if (ehotk->bluetooth_rfkill) 867 rfkill_set_sw_state(ehotk->bluetooth_rfkill, ··· 1004 * Refresh pci hotplug in case the rfkill state was changed after 1005 * eeepc_unregister_rfkill_notifier() 1006 */ 1007 - eeepc_rfkill_hotplug(); 1008 if (ehotk->hotplug_slot) 1009 pci_hp_deregister(ehotk->hotplug_slot); 1010 ··· 1120 * Refresh pci hotplug in case the rfkill state was changed during 1121 * setup. 1122 */ 1123 - eeepc_rfkill_hotplug(); 1124 1125 exit: 1126 if (result && result != -ENODEV) ··· 1200 return 0; 1201 } 1202 1203 - static int eeepc_hotk_add(struct acpi_device *device) 1204 { 1205 struct device *dev; 1206 int result;
··· 150 /* The actual device the driver binds to */ 151 static struct eeepc_hotk *ehotk; 152 153 + static void eeepc_rfkill_hotplug(bool real); 154 + 155 /* Platform device/driver */ 156 static int eeepc_hotk_thaw(struct device *device); 157 static int eeepc_hotk_restore(struct device *device); ··· 343 static int eeepc_rfkill_set(void *data, bool blocked) 344 { 345 unsigned long asl = (unsigned long)data; 346 + int ret; 347 + 348 + if (asl != CM_ASL_WLAN) 349 + return set_acpi(asl, !blocked); 350 + 351 + /* hack to avoid panic with rt2860sta */ 352 + if (blocked) 353 + eeepc_rfkill_hotplug(false); 354 + ret = set_acpi(asl, !blocked); 355 + return ret; 356 } 357 358 static const struct rfkill_ops eeepc_rfkill_ops = { 359 .set_block = eeepc_rfkill_set, 360 }; 361 362 + static void __devinit eeepc_enable_camera(void) 363 { 364 /* 365 * If the following call to set_acpi() fails, it's because there's no ··· 643 return 0; 644 } 645 646 + static void eeepc_rfkill_hotplug(bool real) 647 { 648 struct pci_dev *dev; 649 struct pci_bus *bus; 650 + bool blocked = real ? eeepc_wlan_rfkill_blocked() : true; 651 652 + if (real && ehotk->wlan_rfkill) 653 rfkill_set_sw_state(ehotk->wlan_rfkill, blocked); 654 655 mutex_lock(&ehotk->hotplug_lock); ··· 692 if (event != ACPI_NOTIFY_BUS_CHECK) 693 return; 694 695 + eeepc_rfkill_hotplug(true); 696 } 697 698 static void eeepc_hotk_notify(struct acpi_device *device, u32 event) ··· 850 { 851 /* Refresh both wlan rfkill state and pci hotplug */ 852 if (ehotk->wlan_rfkill) 853 + eeepc_rfkill_hotplug(true); 854 855 if (ehotk->bluetooth_rfkill) 856 rfkill_set_sw_state(ehotk->bluetooth_rfkill, ··· 993 * Refresh pci hotplug in case the rfkill state was changed after 994 * eeepc_unregister_rfkill_notifier() 995 */ 996 + eeepc_rfkill_hotplug(true); 997 if (ehotk->hotplug_slot) 998 pci_hp_deregister(ehotk->hotplug_slot); 999 ··· 1109 * Refresh pci hotplug in case the rfkill state was changed during 1110 * setup. 1111 */ 1112 + eeepc_rfkill_hotplug(true); 1113 1114 exit: 1115 if (result && result != -ENODEV) ··· 1189 return 0; 1190 } 1191 1192 + static int __devinit eeepc_hotk_add(struct acpi_device *device) 1193 { 1194 struct device *dev; 1195 int result;
+1 -1
drivers/platform/x86/fujitsu-laptop.c
··· 944 struct fujitsu_hotkey_t *fujitsu_hotkey = acpi_driver_data(device); 945 struct input_dev *input = fujitsu_hotkey->input; 946 947 - #ifdef CONFIG_LEDS_CLASS 948 if (fujitsu_hotkey->logolamp_registered) 949 led_classdev_unregister(&logolamp_led); 950
··· 944 struct fujitsu_hotkey_t *fujitsu_hotkey = acpi_driver_data(device); 945 struct input_dev *input = fujitsu_hotkey->input; 946 947 + #if defined(CONFIG_LEDS_CLASS) || defined(CONFIG_LEDS_CLASS_MODULE) 948 if (fujitsu_hotkey->logolamp_registered) 949 led_classdev_unregister(&logolamp_led); 950