Merge branch 'eeepc-laptop' into release

Len Brown fee807e8 f63a9048

+21 -10
+21 -10
drivers/platform/x86/eeepc-laptop.c
··· 150 150 /* The actual device the driver binds to */ 151 151 static struct eeepc_hotk *ehotk; 152 152 153 + static void eeepc_rfkill_hotplug(bool real); 154 + 153 155 /* Platform device/driver */ 154 156 static int eeepc_hotk_thaw(struct device *device); 155 157 static int eeepc_hotk_restore(struct device *device); ··· 345 343 static int eeepc_rfkill_set(void *data, bool blocked) 346 344 { 347 345 unsigned long asl = (unsigned long)data; 348 - return set_acpi(asl, !blocked); 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; 349 356 } 350 357 351 358 static const struct rfkill_ops eeepc_rfkill_ops = { 352 359 .set_block = eeepc_rfkill_set, 353 360 }; 354 361 355 - static void __init eeepc_enable_camera(void) 362 + static void __devinit eeepc_enable_camera(void) 356 363 { 357 364 /* 358 365 * If the following call to set_acpi() fails, it's because there's no ··· 654 643 return 0; 655 644 } 656 645 657 - static void eeepc_rfkill_hotplug(void) 646 + static void eeepc_rfkill_hotplug(bool real) 658 647 { 659 648 struct pci_dev *dev; 660 649 struct pci_bus *bus; 661 - bool blocked = eeepc_wlan_rfkill_blocked(); 650 + bool blocked = real ? eeepc_wlan_rfkill_blocked() : true; 662 651 663 - if (ehotk->wlan_rfkill) 652 + if (real && ehotk->wlan_rfkill) 664 653 rfkill_set_sw_state(ehotk->wlan_rfkill, blocked); 665 654 666 655 mutex_lock(&ehotk->hotplug_lock); ··· 703 692 if (event != ACPI_NOTIFY_BUS_CHECK) 704 693 return; 705 694 706 - eeepc_rfkill_hotplug(); 695 + eeepc_rfkill_hotplug(true); 707 696 } 708 697 709 698 static void eeepc_hotk_notify(struct acpi_device *device, u32 event) ··· 861 850 { 862 851 /* Refresh both wlan rfkill state and pci hotplug */ 863 852 if (ehotk->wlan_rfkill) 864 - eeepc_rfkill_hotplug(); 853 + eeepc_rfkill_hotplug(true); 865 854 866 855 if (ehotk->bluetooth_rfkill) 867 856 rfkill_set_sw_state(ehotk->bluetooth_rfkill, ··· 1004 993 * Refresh pci hotplug in case the rfkill state was changed after 1005 994 * eeepc_unregister_rfkill_notifier() 1006 995 */ 1007 - eeepc_rfkill_hotplug(); 996 + eeepc_rfkill_hotplug(true); 1008 997 if (ehotk->hotplug_slot) 1009 998 pci_hp_deregister(ehotk->hotplug_slot); 1010 999 ··· 1120 1109 * Refresh pci hotplug in case the rfkill state was changed during 1121 1110 * setup. 1122 1111 */ 1123 - eeepc_rfkill_hotplug(); 1112 + eeepc_rfkill_hotplug(true); 1124 1113 1125 1114 exit: 1126 1115 if (result && result != -ENODEV) ··· 1200 1189 return 0; 1201 1190 } 1202 1191 1203 - static int eeepc_hotk_add(struct acpi_device *device) 1192 + static int __devinit eeepc_hotk_add(struct acpi_device *device) 1204 1193 { 1205 1194 struct device *dev; 1206 1195 int result;