• Home
  • Raw
  • Download

Lines Matching full:asus

2  * Asus PC WMI hotkey driver
52 #include "asus-wmi.h"
56 MODULE_DESCRIPTION("Asus Generic WMI Driver");
218 struct asus_wmi *asus; member
268 static int asus_wmi_input_init(struct asus_wmi *asus) in asus_wmi_input_init() argument
272 asus->inputdev = input_allocate_device(); in asus_wmi_input_init()
273 if (!asus->inputdev) in asus_wmi_input_init()
276 asus->inputdev->name = asus->driver->input_name; in asus_wmi_input_init()
277 asus->inputdev->phys = asus->driver->input_phys; in asus_wmi_input_init()
278 asus->inputdev->id.bustype = BUS_HOST; in asus_wmi_input_init()
279 asus->inputdev->dev.parent = &asus->platform_device->dev; in asus_wmi_input_init()
280 set_bit(EV_REP, asus->inputdev->evbit); in asus_wmi_input_init()
282 err = sparse_keymap_setup(asus->inputdev, asus->driver->keymap, NULL); in asus_wmi_input_init()
286 err = input_register_device(asus->inputdev); in asus_wmi_input_init()
293 input_free_device(asus->inputdev); in asus_wmi_input_init()
297 static void asus_wmi_input_exit(struct asus_wmi *asus) in asus_wmi_input_exit() argument
299 if (asus->inputdev) in asus_wmi_input_exit()
300 input_unregister_device(asus->inputdev); in asus_wmi_input_exit()
302 asus->inputdev = NULL; in asus_wmi_input_exit()
373 static int asus_wmi_get_devstate(struct asus_wmi *asus, u32 dev_id, u32 *retval) in asus_wmi_get_devstate() argument
375 return asus_wmi_evaluate_method(asus->dsts_id, dev_id, 0, retval); in asus_wmi_get_devstate()
386 static int asus_wmi_get_devstate_bits(struct asus_wmi *asus, in asus_wmi_get_devstate_bits() argument
392 err = asus_wmi_get_devstate(asus, dev_id, &retval); in asus_wmi_get_devstate_bits()
408 static int asus_wmi_get_devstate_simple(struct asus_wmi *asus, u32 dev_id) in asus_wmi_get_devstate_simple() argument
410 return asus_wmi_get_devstate_bits(asus, dev_id, in asus_wmi_get_devstate_simple()
420 * subsystem asks, we avoid messing with the Asus ACPI stuff during a
426 struct asus_wmi *asus; in tpd_led_update() local
428 asus = container_of(work, struct asus_wmi, tpd_led_work); in tpd_led_update()
430 ctrl_param = asus->tpd_led_wk; in tpd_led_update()
437 struct asus_wmi *asus; in tpd_led_set() local
439 asus = container_of(led_cdev, struct asus_wmi, tpd_led); in tpd_led_set()
441 asus->tpd_led_wk = !!value; in tpd_led_set()
442 queue_work(asus->led_workqueue, &asus->tpd_led_work); in tpd_led_set()
445 static int read_tpd_led_state(struct asus_wmi *asus) in read_tpd_led_state() argument
447 return asus_wmi_get_devstate_simple(asus, ASUS_WMI_DEVID_TOUCHPAD_LED); in read_tpd_led_state()
452 struct asus_wmi *asus; in tpd_led_get() local
454 asus = container_of(led_cdev, struct asus_wmi, tpd_led); in tpd_led_get()
456 return read_tpd_led_state(asus); in tpd_led_get()
462 struct asus_wmi *asus; in kbd_led_update() local
464 asus = container_of(work, struct asus_wmi, kbd_led_work); in kbd_led_update()
466 ctrl_param = 0x80 | (asus->kbd_led_wk & 0x7F); in kbd_led_update()
468 led_classdev_notify_brightness_hw_changed(&asus->kbd_led, asus->kbd_led_wk); in kbd_led_update()
471 static int kbd_led_read(struct asus_wmi *asus, int *level, int *env) in kbd_led_read() argument
481 retval = asus_wmi_get_devstate_bits(asus, ASUS_WMI_DEVID_KBD_BACKLIGHT, in kbd_led_read()
501 struct asus_wmi *asus; in do_kbd_led_set() local
504 asus = container_of(led_cdev, struct asus_wmi, kbd_led); in do_kbd_led_set()
505 max_level = asus->kbd_led.max_brightness; in do_kbd_led_set()
512 asus->kbd_led_wk = value; in do_kbd_led_set()
513 queue_work(asus->led_workqueue, &asus->kbd_led_work); in do_kbd_led_set()
524 struct asus_wmi *asus; in kbd_led_get() local
527 asus = container_of(led_cdev, struct asus_wmi, kbd_led); in kbd_led_get()
529 retval = kbd_led_read(asus, &value, NULL); in kbd_led_get()
537 static int wlan_led_unknown_state(struct asus_wmi *asus) in wlan_led_unknown_state() argument
541 asus_wmi_get_devstate(asus, ASUS_WMI_DEVID_WIRELESS_LED, &result); in wlan_led_unknown_state()
546 static int wlan_led_presence(struct asus_wmi *asus) in wlan_led_presence() argument
550 asus_wmi_get_devstate(asus, ASUS_WMI_DEVID_WIRELESS_LED, &result); in wlan_led_presence()
558 struct asus_wmi *asus; in wlan_led_update() local
560 asus = container_of(work, struct asus_wmi, wlan_led_work); in wlan_led_update()
562 ctrl_param = asus->wlan_led_wk; in wlan_led_update()
569 struct asus_wmi *asus; in wlan_led_set() local
571 asus = container_of(led_cdev, struct asus_wmi, wlan_led); in wlan_led_set()
573 asus->wlan_led_wk = !!value; in wlan_led_set()
574 queue_work(asus->led_workqueue, &asus->wlan_led_work); in wlan_led_set()
579 struct asus_wmi *asus; in wlan_led_get() local
582 asus = container_of(led_cdev, struct asus_wmi, wlan_led); in wlan_led_get()
583 asus_wmi_get_devstate(asus, ASUS_WMI_DEVID_WIRELESS_LED, &result); in wlan_led_get()
590 struct asus_wmi *asus; in lightbar_led_update() local
593 asus = container_of(work, struct asus_wmi, lightbar_led_work); in lightbar_led_update()
595 ctrl_param = asus->lightbar_led_wk; in lightbar_led_update()
602 struct asus_wmi *asus; in lightbar_led_set() local
604 asus = container_of(led_cdev, struct asus_wmi, lightbar_led); in lightbar_led_set()
606 asus->lightbar_led_wk = !!value; in lightbar_led_set()
607 queue_work(asus->led_workqueue, &asus->lightbar_led_work); in lightbar_led_set()
612 struct asus_wmi *asus; in lightbar_led_get() local
615 asus = container_of(led_cdev, struct asus_wmi, lightbar_led); in lightbar_led_get()
616 asus_wmi_get_devstate(asus, ASUS_WMI_DEVID_LIGHTBAR, &result); in lightbar_led_get()
621 static int lightbar_led_presence(struct asus_wmi *asus) in lightbar_led_presence() argument
625 asus_wmi_get_devstate(asus, ASUS_WMI_DEVID_LIGHTBAR, &result); in lightbar_led_presence()
630 static void asus_wmi_led_exit(struct asus_wmi *asus) in asus_wmi_led_exit() argument
632 if (!IS_ERR_OR_NULL(asus->kbd_led.dev)) in asus_wmi_led_exit()
633 led_classdev_unregister(&asus->kbd_led); in asus_wmi_led_exit()
634 if (!IS_ERR_OR_NULL(asus->tpd_led.dev)) in asus_wmi_led_exit()
635 led_classdev_unregister(&asus->tpd_led); in asus_wmi_led_exit()
636 if (!IS_ERR_OR_NULL(asus->wlan_led.dev)) in asus_wmi_led_exit()
637 led_classdev_unregister(&asus->wlan_led); in asus_wmi_led_exit()
638 if (!IS_ERR_OR_NULL(asus->lightbar_led.dev)) in asus_wmi_led_exit()
639 led_classdev_unregister(&asus->lightbar_led); in asus_wmi_led_exit()
640 if (asus->led_workqueue) in asus_wmi_led_exit()
641 destroy_workqueue(asus->led_workqueue); in asus_wmi_led_exit()
644 static int asus_wmi_led_init(struct asus_wmi *asus) in asus_wmi_led_init() argument
648 asus->led_workqueue = create_singlethread_workqueue("led_workqueue"); in asus_wmi_led_init()
649 if (!asus->led_workqueue) in asus_wmi_led_init()
652 if (read_tpd_led_state(asus) >= 0) { in asus_wmi_led_init()
653 INIT_WORK(&asus->tpd_led_work, tpd_led_update); in asus_wmi_led_init()
655 asus->tpd_led.name = "asus::touchpad"; in asus_wmi_led_init()
656 asus->tpd_led.brightness_set = tpd_led_set; in asus_wmi_led_init()
657 asus->tpd_led.brightness_get = tpd_led_get; in asus_wmi_led_init()
658 asus->tpd_led.max_brightness = 1; in asus_wmi_led_init()
660 rv = led_classdev_register(&asus->platform_device->dev, in asus_wmi_led_init()
661 &asus->tpd_led); in asus_wmi_led_init()
666 led_val = kbd_led_read(asus, NULL, NULL); in asus_wmi_led_init()
668 INIT_WORK(&asus->kbd_led_work, kbd_led_update); in asus_wmi_led_init()
670 asus->kbd_led_wk = led_val; in asus_wmi_led_init()
671 asus->kbd_led.name = "asus::kbd_backlight"; in asus_wmi_led_init()
672 asus->kbd_led.flags = LED_BRIGHT_HW_CHANGED; in asus_wmi_led_init()
673 asus->kbd_led.brightness_set = kbd_led_set; in asus_wmi_led_init()
674 asus->kbd_led.brightness_get = kbd_led_get; in asus_wmi_led_init()
675 asus->kbd_led.max_brightness = 3; in asus_wmi_led_init()
677 rv = led_classdev_register(&asus->platform_device->dev, in asus_wmi_led_init()
678 &asus->kbd_led); in asus_wmi_led_init()
683 if (wlan_led_presence(asus) && (asus->driver->quirks->wapf > 0)) { in asus_wmi_led_init()
684 INIT_WORK(&asus->wlan_led_work, wlan_led_update); in asus_wmi_led_init()
686 asus->wlan_led.name = "asus::wlan"; in asus_wmi_led_init()
687 asus->wlan_led.brightness_set = wlan_led_set; in asus_wmi_led_init()
688 if (!wlan_led_unknown_state(asus)) in asus_wmi_led_init()
689 asus->wlan_led.brightness_get = wlan_led_get; in asus_wmi_led_init()
690 asus->wlan_led.flags = LED_CORE_SUSPENDRESUME; in asus_wmi_led_init()
691 asus->wlan_led.max_brightness = 1; in asus_wmi_led_init()
692 asus->wlan_led.default_trigger = "asus-wlan"; in asus_wmi_led_init()
694 rv = led_classdev_register(&asus->platform_device->dev, in asus_wmi_led_init()
695 &asus->wlan_led); in asus_wmi_led_init()
700 if (lightbar_led_presence(asus)) { in asus_wmi_led_init()
701 INIT_WORK(&asus->lightbar_led_work, lightbar_led_update); in asus_wmi_led_init()
703 asus->lightbar_led.name = "asus::lightbar"; in asus_wmi_led_init()
704 asus->lightbar_led.brightness_set = lightbar_led_set; in asus_wmi_led_init()
705 asus->lightbar_led.brightness_get = lightbar_led_get; in asus_wmi_led_init()
706 asus->lightbar_led.max_brightness = 1; in asus_wmi_led_init()
708 rv = led_classdev_register(&asus->platform_device->dev, in asus_wmi_led_init()
709 &asus->lightbar_led); in asus_wmi_led_init()
714 asus_wmi_led_exit(asus); in asus_wmi_led_init()
723 static bool asus_wlan_rfkill_blocked(struct asus_wmi *asus) in asus_wlan_rfkill_blocked() argument
725 int result = asus_wmi_get_devstate_simple(asus, ASUS_WMI_DEVID_WLAN); in asus_wlan_rfkill_blocked()
732 static void asus_rfkill_hotplug(struct asus_wmi *asus) in asus_rfkill_hotplug() argument
740 mutex_lock(&asus->wmi_lock); in asus_rfkill_hotplug()
741 blocked = asus_wlan_rfkill_blocked(asus); in asus_rfkill_hotplug()
742 mutex_unlock(&asus->wmi_lock); in asus_rfkill_hotplug()
744 mutex_lock(&asus->hotplug_lock); in asus_rfkill_hotplug()
747 if (asus->wlan.rfkill) in asus_rfkill_hotplug()
748 rfkill_set_sw_state(asus->wlan.rfkill, blocked); in asus_rfkill_hotplug()
750 if (asus->hotplug_slot) { in asus_rfkill_hotplug()
796 mutex_unlock(&asus->hotplug_lock); in asus_rfkill_hotplug()
801 struct asus_wmi *asus = data; in asus_rfkill_notify() local
813 queue_work(asus->hotplug_workqueue, &asus->hotplug_work); in asus_rfkill_notify()
816 static int asus_register_rfkill_notifier(struct asus_wmi *asus, char *node) in asus_register_rfkill_notifier() argument
826 asus_rfkill_notify, asus); in asus_register_rfkill_notifier()
835 static void asus_unregister_rfkill_notifier(struct asus_wmi *asus, char *node) in asus_unregister_rfkill_notifier() argument
855 struct asus_wmi *asus = hotplug_slot->private; in asus_get_adapter_status() local
856 int result = asus_wmi_get_devstate_simple(asus, ASUS_WMI_DEVID_WLAN); in asus_get_adapter_status()
873 struct asus_wmi *asus; in asus_hotplug_work() local
875 asus = container_of(work, struct asus_wmi, hotplug_work); in asus_hotplug_work()
876 asus_rfkill_hotplug(asus); in asus_hotplug_work()
879 static int asus_setup_pci_hotplug(struct asus_wmi *asus) in asus_setup_pci_hotplug() argument
889 asus->hotplug_workqueue = in asus_setup_pci_hotplug()
891 if (!asus->hotplug_workqueue) in asus_setup_pci_hotplug()
894 INIT_WORK(&asus->hotplug_work, asus_hotplug_work); in asus_setup_pci_hotplug()
896 asus->hotplug_slot = kzalloc(sizeof(struct hotplug_slot), GFP_KERNEL); in asus_setup_pci_hotplug()
897 if (!asus->hotplug_slot) in asus_setup_pci_hotplug()
900 asus->hotplug_slot->info = kzalloc(sizeof(struct hotplug_slot_info), in asus_setup_pci_hotplug()
902 if (!asus->hotplug_slot->info) in asus_setup_pci_hotplug()
905 asus->hotplug_slot->private = asus; in asus_setup_pci_hotplug()
906 asus->hotplug_slot->ops = &asus_hotplug_slot_ops; in asus_setup_pci_hotplug()
907 asus_get_adapter_status(asus->hotplug_slot, in asus_setup_pci_hotplug()
908 &asus->hotplug_slot->info->adapter_status); in asus_setup_pci_hotplug()
910 ret = pci_hp_register(asus->hotplug_slot, bus, 0, "asus-wifi"); in asus_setup_pci_hotplug()
919 kfree(asus->hotplug_slot->info); in asus_setup_pci_hotplug()
921 kfree(asus->hotplug_slot); in asus_setup_pci_hotplug()
922 asus->hotplug_slot = NULL; in asus_setup_pci_hotplug()
924 destroy_workqueue(asus->hotplug_workqueue); in asus_setup_pci_hotplug()
947 priv->asus->driver->wlan_ctrl_by_user) in asus_rfkill_set()
958 result = asus_wmi_get_devstate_simple(priv->asus, priv->dev_id); in asus_rfkill_query()
969 struct asus_wmi *asus = priv->asus; in asus_rfkill_wlan_set() local
979 mutex_lock(&asus->wmi_lock); in asus_rfkill_wlan_set()
981 mutex_unlock(&asus->wmi_lock); in asus_rfkill_wlan_set()
995 static int asus_new_rfkill(struct asus_wmi *asus, in asus_new_rfkill() argument
999 int result = asus_wmi_get_devstate_simple(asus, dev_id); in asus_new_rfkill()
1006 arfkill->asus = asus; in asus_new_rfkill()
1009 asus->driver->quirks->hotplug_wireless) in asus_new_rfkill()
1010 *rfkill = rfkill_alloc(name, &asus->platform_device->dev, type, in asus_new_rfkill()
1013 *rfkill = rfkill_alloc(name, &asus->platform_device->dev, type, in asus_new_rfkill()
1020 (asus->driver->quirks->wapf > 0)) in asus_new_rfkill()
1021 rfkill_set_led_trigger_name(*rfkill, "asus-wlan"); in asus_new_rfkill()
1033 static void asus_wmi_rfkill_exit(struct asus_wmi *asus) in asus_wmi_rfkill_exit() argument
1035 if (asus->driver->wlan_ctrl_by_user && ashs_present()) in asus_wmi_rfkill_exit()
1038 asus_unregister_rfkill_notifier(asus, "\\_SB.PCI0.P0P5"); in asus_wmi_rfkill_exit()
1039 asus_unregister_rfkill_notifier(asus, "\\_SB.PCI0.P0P6"); in asus_wmi_rfkill_exit()
1040 asus_unregister_rfkill_notifier(asus, "\\_SB.PCI0.P0P7"); in asus_wmi_rfkill_exit()
1041 if (asus->wlan.rfkill) { in asus_wmi_rfkill_exit()
1042 rfkill_unregister(asus->wlan.rfkill); in asus_wmi_rfkill_exit()
1043 rfkill_destroy(asus->wlan.rfkill); in asus_wmi_rfkill_exit()
1044 asus->wlan.rfkill = NULL; in asus_wmi_rfkill_exit()
1050 asus_rfkill_hotplug(asus); in asus_wmi_rfkill_exit()
1051 if (asus->hotplug_slot) { in asus_wmi_rfkill_exit()
1052 pci_hp_deregister(asus->hotplug_slot); in asus_wmi_rfkill_exit()
1053 kfree(asus->hotplug_slot->info); in asus_wmi_rfkill_exit()
1054 kfree(asus->hotplug_slot); in asus_wmi_rfkill_exit()
1056 if (asus->hotplug_workqueue) in asus_wmi_rfkill_exit()
1057 destroy_workqueue(asus->hotplug_workqueue); in asus_wmi_rfkill_exit()
1059 if (asus->bluetooth.rfkill) { in asus_wmi_rfkill_exit()
1060 rfkill_unregister(asus->bluetooth.rfkill); in asus_wmi_rfkill_exit()
1061 rfkill_destroy(asus->bluetooth.rfkill); in asus_wmi_rfkill_exit()
1062 asus->bluetooth.rfkill = NULL; in asus_wmi_rfkill_exit()
1064 if (asus->wimax.rfkill) { in asus_wmi_rfkill_exit()
1065 rfkill_unregister(asus->wimax.rfkill); in asus_wmi_rfkill_exit()
1066 rfkill_destroy(asus->wimax.rfkill); in asus_wmi_rfkill_exit()
1067 asus->wimax.rfkill = NULL; in asus_wmi_rfkill_exit()
1069 if (asus->wwan3g.rfkill) { in asus_wmi_rfkill_exit()
1070 rfkill_unregister(asus->wwan3g.rfkill); in asus_wmi_rfkill_exit()
1071 rfkill_destroy(asus->wwan3g.rfkill); in asus_wmi_rfkill_exit()
1072 asus->wwan3g.rfkill = NULL; in asus_wmi_rfkill_exit()
1074 if (asus->gps.rfkill) { in asus_wmi_rfkill_exit()
1075 rfkill_unregister(asus->gps.rfkill); in asus_wmi_rfkill_exit()
1076 rfkill_destroy(asus->gps.rfkill); in asus_wmi_rfkill_exit()
1077 asus->gps.rfkill = NULL; in asus_wmi_rfkill_exit()
1079 if (asus->uwb.rfkill) { in asus_wmi_rfkill_exit()
1080 rfkill_unregister(asus->uwb.rfkill); in asus_wmi_rfkill_exit()
1081 rfkill_destroy(asus->uwb.rfkill); in asus_wmi_rfkill_exit()
1082 asus->uwb.rfkill = NULL; in asus_wmi_rfkill_exit()
1086 static int asus_wmi_rfkill_init(struct asus_wmi *asus) in asus_wmi_rfkill_init() argument
1090 mutex_init(&asus->hotplug_lock); in asus_wmi_rfkill_init()
1091 mutex_init(&asus->wmi_lock); in asus_wmi_rfkill_init()
1093 result = asus_new_rfkill(asus, &asus->wlan, "asus-wlan", in asus_wmi_rfkill_init()
1099 result = asus_new_rfkill(asus, &asus->bluetooth, in asus_wmi_rfkill_init()
1100 "asus-bluetooth", RFKILL_TYPE_BLUETOOTH, in asus_wmi_rfkill_init()
1106 result = asus_new_rfkill(asus, &asus->wimax, "asus-wimax", in asus_wmi_rfkill_init()
1112 result = asus_new_rfkill(asus, &asus->wwan3g, "asus-wwan3g", in asus_wmi_rfkill_init()
1118 result = asus_new_rfkill(asus, &asus->gps, "asus-gps", in asus_wmi_rfkill_init()
1124 result = asus_new_rfkill(asus, &asus->uwb, "asus-uwb", in asus_wmi_rfkill_init()
1130 if (!asus->driver->quirks->hotplug_wireless) in asus_wmi_rfkill_init()
1133 result = asus_setup_pci_hotplug(asus); in asus_wmi_rfkill_init()
1141 asus_register_rfkill_notifier(asus, "\\_SB.PCI0.P0P5"); in asus_wmi_rfkill_init()
1142 asus_register_rfkill_notifier(asus, "\\_SB.PCI0.P0P6"); in asus_wmi_rfkill_init()
1143 asus_register_rfkill_notifier(asus, "\\_SB.PCI0.P0P7"); in asus_wmi_rfkill_init()
1148 asus_rfkill_hotplug(asus); in asus_wmi_rfkill_init()
1152 asus_wmi_rfkill_exit(asus); in asus_wmi_rfkill_init()
1160 static void asus_wmi_set_xusb2pr(struct asus_wmi *asus) in asus_wmi_set_xusb2pr() argument
1164 u32 ports_available = asus->driver->quirks->xusb2pr; in asus_wmi_set_xusb2pr()
1195 static int asus_hwmon_agfn_fan_speed_read(struct asus_wmi *asus, int fan, in asus_hwmon_agfn_fan_speed_read() argument
1222 static int asus_hwmon_agfn_fan_speed_write(struct asus_wmi *asus, int fan, in asus_hwmon_agfn_fan_speed_write() argument
1245 asus->asus_hwmon_pwm = *speed; in asus_hwmon_agfn_fan_speed_write()
1254 static int asus_hwmon_get_fan_number(struct asus_wmi *asus, int *num_fans) in asus_hwmon_get_fan_number() argument
1261 status = asus_hwmon_agfn_fan_speed_read(asus, 1, &speed); in asus_hwmon_get_fan_number()
1268 static int asus_hwmon_fan_set_auto(struct asus_wmi *asus) in asus_hwmon_fan_set_auto() argument
1272 status = asus_hwmon_agfn_fan_speed_write(asus, 0, NULL); in asus_hwmon_fan_set_auto()
1276 asus->asus_hwmon_fan_manual_mode = false; in asus_hwmon_fan_set_auto()
1283 struct asus_wmi *asus = dev_get_drvdata(dev); in asus_hwmon_fan_rpm_show() local
1288 if (asus->asus_hwmon_fan_manual_mode) in asus_hwmon_fan_rpm_show()
1291 ret = asus_hwmon_agfn_fan_speed_read(asus, fan+1, &value); in asus_hwmon_fan_rpm_show()
1300 static void asus_hwmon_pwm_show(struct asus_wmi *asus, int fan, int *value) in asus_hwmon_pwm_show() argument
1304 if (asus->asus_hwmon_pwm >= 0) { in asus_hwmon_pwm_show()
1305 *value = asus->asus_hwmon_pwm; in asus_hwmon_pwm_show()
1309 err = asus_wmi_get_devstate(asus, ASUS_WMI_DEVID_FAN_CTRL, value); in asus_hwmon_pwm_show()
1331 struct asus_wmi *asus = dev_get_drvdata(dev); in pwm1_show() local
1334 asus_hwmon_pwm_show(asus, 0, &value); in pwm1_show()
1342 struct asus_wmi *asus = dev_get_drvdata(dev); in pwm1_store() local
1354 state = asus_hwmon_agfn_fan_speed_write(asus, 1, &value); in pwm1_store()
1358 asus->asus_hwmon_fan_manual_mode = true; in pwm1_store()
1377 struct asus_wmi *asus = dev_get_drvdata(dev); in pwm1_enable_show() local
1379 if (asus->asus_hwmon_fan_manual_mode) in pwm1_enable_show()
1389 struct asus_wmi *asus = dev_get_drvdata(dev); in pwm1_enable_store() local
1400 asus->asus_hwmon_fan_manual_mode = true; in pwm1_enable_store()
1402 status = asus_hwmon_fan_set_auto(asus); in pwm1_enable_store()
1421 struct asus_wmi *asus = dev_get_drvdata(dev); in asus_hwmon_temp1() local
1425 err = asus_wmi_get_devstate(asus, ASUS_WMI_DEVID_THERMAL_CTRL, &value); in asus_hwmon_temp1()
1459 struct asus_wmi *asus = platform_get_drvdata(pdev); in asus_hwmon_sysfs_is_visible() local
1479 int err = asus_wmi_get_devstate(asus, dev_id, &value); in asus_hwmon_sysfs_is_visible()
1495 || (!asus->sfun && !(value & ASUS_WMI_DSTS_PRESENCE_BIT))) in asus_hwmon_sysfs_is_visible()
1498 ok = fan_attr <= asus->asus_hwmon_num_fans; in asus_hwmon_sysfs_is_visible()
1503 } else if (fan_attr <= asus->asus_hwmon_num_fans && fan_attr != -1) { in asus_hwmon_sysfs_is_visible()
1518 static int asus_wmi_hwmon_init(struct asus_wmi *asus) in asus_wmi_hwmon_init() argument
1522 hwmon = hwmon_device_register_with_groups(&asus->platform_device->dev, in asus_wmi_hwmon_init()
1523 "asus", asus, in asus_wmi_hwmon_init()
1526 pr_err("Could not register asus hwmon device\n"); in asus_wmi_hwmon_init()
1535 static int read_backlight_power(struct asus_wmi *asus) in read_backlight_power() argument
1538 if (asus->driver->quirks->store_backlight_power) in read_backlight_power()
1539 ret = !asus->driver->panel_power; in read_backlight_power()
1541 ret = asus_wmi_get_devstate_simple(asus, in read_backlight_power()
1550 static int read_brightness_max(struct asus_wmi *asus) in read_brightness_max() argument
1555 err = asus_wmi_get_devstate(asus, ASUS_WMI_DEVID_BRIGHTNESS, &retval); in read_brightness_max()
1571 struct asus_wmi *asus = bl_get_data(bd); in read_brightness() local
1575 err = asus_wmi_get_devstate(asus, ASUS_WMI_DEVID_BRIGHTNESS, &retval); in read_brightness()
1585 struct asus_wmi *asus = bl_get_data(bd); in get_scalar_command() local
1588 if ((asus->driver->brightness < bd->props.brightness) || in get_scalar_command()
1591 else if ((asus->driver->brightness > bd->props.brightness) || in get_scalar_command()
1595 asus->driver->brightness = bd->props.brightness; in get_scalar_command()
1602 struct asus_wmi *asus = bl_get_data(bd); in update_bl_status() local
1606 power = read_backlight_power(asus); in update_bl_status()
1611 if (asus->driver->quirks->store_backlight_power) in update_bl_status()
1612 asus->driver->panel_power = bd->props.power; in update_bl_status()
1616 if (asus->driver->quirks->scalar_panel_brightness) in update_bl_status()
1620 if (asus->driver->quirks->scalar_panel_brightness) in update_bl_status()
1636 static int asus_wmi_backlight_notify(struct asus_wmi *asus, int code) in asus_wmi_backlight_notify() argument
1638 struct backlight_device *bd = asus->backlight_device; in asus_wmi_backlight_notify()
1654 static int asus_wmi_backlight_init(struct asus_wmi *asus) in asus_wmi_backlight_init() argument
1661 max = read_brightness_max(asus); in asus_wmi_backlight_init()
1665 power = read_backlight_power(asus); in asus_wmi_backlight_init()
1675 bd = backlight_device_register(asus->driver->name, in asus_wmi_backlight_init()
1676 &asus->platform_device->dev, asus, in asus_wmi_backlight_init()
1683 asus->backlight_device = bd; in asus_wmi_backlight_init()
1685 if (asus->driver->quirks->store_backlight_power) in asus_wmi_backlight_init()
1686 asus->driver->panel_power = power; in asus_wmi_backlight_init()
1692 asus->driver->brightness = bd->props.brightness; in asus_wmi_backlight_init()
1697 static void asus_wmi_backlight_exit(struct asus_wmi *asus) in asus_wmi_backlight_exit() argument
1699 backlight_device_unregister(asus->backlight_device); in asus_wmi_backlight_exit()
1701 asus->backlight_device = NULL; in asus_wmi_backlight_exit()
1718 struct asus_wmi *asus = context; in asus_wmi_notify() local
1741 if (asus->driver->key_filter) { in asus_wmi_notify()
1742 asus->driver->key_filter(asus->driver, &code, &key_value, in asus_wmi_notify()
1756 asus_wmi_backlight_notify(asus, orig_code); in asus_wmi_notify()
1762 do_kbd_led_set(&asus->kbd_led, asus->kbd_led_wk + 1); in asus_wmi_notify()
1766 do_kbd_led_set(&asus->kbd_led, asus->kbd_led_wk - 1); in asus_wmi_notify()
1770 if (asus->kbd_led_wk == asus->kbd_led.max_brightness) in asus_wmi_notify()
1771 do_kbd_led_set(&asus->kbd_led, 0); in asus_wmi_notify()
1773 do_kbd_led_set(&asus->kbd_led, asus->kbd_led_wk + 1); in asus_wmi_notify()
1778 asus->driver->quirks->no_display_toggle) in asus_wmi_notify()
1781 if (!sparse_keymap_report_event(asus->inputdev, code, in asus_wmi_notify()
1801 static ssize_t store_sys_wmi(struct asus_wmi *asus, int devid, in store_sys_wmi() argument
1807 value = asus_wmi_get_devstate_simple(asus, devid); in store_sys_wmi()
1820 static ssize_t show_sys_wmi(struct asus_wmi *asus, int devid, char *buf) in show_sys_wmi() argument
1822 int value = asus_wmi_get_devstate_simple(asus, devid); in show_sys_wmi()
1835 struct asus_wmi *asus = dev_get_drvdata(dev); \
1837 return show_sys_wmi(asus, _cm, buf); \
1843 struct asus_wmi *asus = dev_get_drvdata(dev); \
1845 return store_sys_wmi(asus, _cm, buf, count); \
1894 struct asus_wmi *asus = dev_get_drvdata(dev); in asus_sysfs_is_visible() local
1910 ok = !(asus_wmi_get_devstate_simple(asus, devid) < 0); in asus_sysfs_is_visible()
1933 static int asus_wmi_platform_init(struct asus_wmi *asus) in asus_wmi_platform_init() argument
1944 asus->spec = rv; in asus_wmi_platform_init()
1955 asus->sfun = rv; in asus_wmi_platform_init()
1966 asus->dsts_id = ASUS_WMI_METHODID_DSTS; in asus_wmi_platform_init()
1968 asus->dsts_id = ASUS_WMI_METHODID_DSTS2; in asus_wmi_platform_init()
1972 if (asus->driver->quirks->wapf >= 0) in asus_wmi_platform_init()
1974 asus->driver->quirks->wapf, NULL); in asus_wmi_platform_init()
1976 return asus_wmi_sysfs_init(asus->platform_device); in asus_wmi_platform_init()
1979 static void asus_wmi_platform_exit(struct asus_wmi *asus) in asus_wmi_platform_exit() argument
1981 asus_wmi_sysfs_exit(asus->platform_device); in asus_wmi_platform_exit()
1988 struct asus_wmi *asus; member
1995 struct asus_wmi *asus = m->private; in show_dsts() local
1999 err = asus_wmi_get_devstate(asus, asus->debug.dev_id, &retval); in show_dsts()
2004 seq_printf(m, "DSTS(%#x) = %#x\n", asus->debug.dev_id, retval); in show_dsts()
2011 struct asus_wmi *asus = m->private; in show_devs() local
2015 err = asus_wmi_set_devstate(asus->debug.dev_id, asus->debug.ctrl_param, in show_devs()
2021 seq_printf(m, "DEVS(%#x, %#x) = %#x\n", asus->debug.dev_id, in show_devs()
2022 asus->debug.ctrl_param, retval); in show_devs()
2029 struct asus_wmi *asus = m->private; in show_call() local
2031 .arg0 = asus->debug.dev_id, in show_call()
2032 .arg1 = asus->debug.ctrl_param, in show_call()
2040 0, asus->debug.method_id, in show_call()
2048 seq_printf(m, "%#x(%#x, %#x) = %#x\n", asus->debug.method_id, in show_call()
2049 asus->debug.dev_id, asus->debug.ctrl_param, in show_call()
2052 seq_printf(m, "%#x(%#x, %#x) = t:%d\n", asus->debug.method_id, in show_call()
2053 asus->debug.dev_id, asus->debug.ctrl_param, in show_call()
2071 return single_open(file, node->show, node->asus); in asus_wmi_debugfs_open()
2082 static void asus_wmi_debugfs_exit(struct asus_wmi *asus) in asus_wmi_debugfs_exit() argument
2084 debugfs_remove_recursive(asus->debug.root); in asus_wmi_debugfs_exit()
2087 static int asus_wmi_debugfs_init(struct asus_wmi *asus) in asus_wmi_debugfs_init() argument
2092 asus->debug.root = debugfs_create_dir(asus->driver->name, NULL); in asus_wmi_debugfs_init()
2093 if (!asus->debug.root) { in asus_wmi_debugfs_init()
2099 asus->debug.root, &asus->debug.method_id); in asus_wmi_debugfs_init()
2104 asus->debug.root, &asus->debug.dev_id); in asus_wmi_debugfs_init()
2109 asus->debug.root, &asus->debug.ctrl_param); in asus_wmi_debugfs_init()
2116 node->asus = asus; in asus_wmi_debugfs_init()
2118 asus->debug.root, node, in asus_wmi_debugfs_init()
2129 asus_wmi_debugfs_exit(asus); in asus_wmi_debugfs_init()
2133 static int asus_wmi_fan_init(struct asus_wmi *asus) in asus_wmi_fan_init() argument
2137 asus->asus_hwmon_pwm = -1; in asus_wmi_fan_init()
2138 asus->asus_hwmon_num_fans = -1; in asus_wmi_fan_init()
2139 asus->asus_hwmon_fan_manual_mode = false; in asus_wmi_fan_init()
2141 status = asus_hwmon_get_fan_number(asus, &asus->asus_hwmon_num_fans); in asus_wmi_fan_init()
2143 asus->asus_hwmon_num_fans = 0; in asus_wmi_fan_init()
2148 pr_info("Number of fans: %d\n", asus->asus_hwmon_num_fans); in asus_wmi_fan_init()
2159 struct asus_wmi *asus; in asus_wmi_add() local
2165 asus = kzalloc(sizeof(struct asus_wmi), GFP_KERNEL); in asus_wmi_add()
2166 if (!asus) in asus_wmi_add()
2169 asus->driver = wdrv; in asus_wmi_add()
2170 asus->platform_device = pdev; in asus_wmi_add()
2172 platform_set_drvdata(asus->platform_device, asus); in asus_wmi_add()
2175 wdrv->detect_quirks(asus->driver); in asus_wmi_add()
2177 err = asus_wmi_platform_init(asus); in asus_wmi_add()
2181 err = asus_wmi_input_init(asus); in asus_wmi_add()
2185 err = asus_wmi_fan_init(asus); /* probably no problems on error */ in asus_wmi_add()
2186 asus_hwmon_fan_set_auto(asus); in asus_wmi_add()
2188 err = asus_wmi_hwmon_init(asus); in asus_wmi_add()
2192 err = asus_wmi_led_init(asus); in asus_wmi_add()
2196 asus_wmi_get_devstate(asus, ASUS_WMI_DEVID_WLAN, &result); in asus_wmi_add()
2198 asus->driver->wlan_ctrl_by_user = 1; in asus_wmi_add()
2200 if (!(asus->driver->wlan_ctrl_by_user && ashs_present())) { in asus_wmi_add()
2201 err = asus_wmi_rfkill_init(asus); in asus_wmi_add()
2206 if (asus->driver->quirks->wmi_force_als_set) in asus_wmi_add()
2209 /* Some Asus desktop boards export an acpi-video backlight interface, in asus_wmi_add()
2215 if (asus->driver->quirks->wmi_backlight_power) in asus_wmi_add()
2218 if (asus->driver->quirks->wmi_backlight_native) in asus_wmi_add()
2221 if (asus->driver->quirks->xusb2pr) in asus_wmi_add()
2222 asus_wmi_set_xusb2pr(asus); in asus_wmi_add()
2225 err = asus_wmi_backlight_init(asus); in asus_wmi_add()
2228 } else if (asus->driver->quirks->wmi_backlight_set_devstate) in asus_wmi_add()
2231 status = wmi_install_notify_handler(asus->driver->event_guid, in asus_wmi_add()
2232 asus_wmi_notify, asus); in asus_wmi_add()
2239 err = asus_wmi_debugfs_init(asus); in asus_wmi_add()
2246 wmi_remove_notify_handler(asus->driver->event_guid); in asus_wmi_add()
2248 asus_wmi_backlight_exit(asus); in asus_wmi_add()
2250 asus_wmi_rfkill_exit(asus); in asus_wmi_add()
2252 asus_wmi_led_exit(asus); in asus_wmi_add()
2255 asus_wmi_input_exit(asus); in asus_wmi_add()
2257 asus_wmi_platform_exit(asus); in asus_wmi_add()
2259 kfree(asus); in asus_wmi_add()
2265 struct asus_wmi *asus; in asus_wmi_remove() local
2267 asus = platform_get_drvdata(device); in asus_wmi_remove()
2268 wmi_remove_notify_handler(asus->driver->event_guid); in asus_wmi_remove()
2269 asus_wmi_backlight_exit(asus); in asus_wmi_remove()
2270 asus_wmi_input_exit(asus); in asus_wmi_remove()
2271 asus_wmi_led_exit(asus); in asus_wmi_remove()
2272 asus_wmi_rfkill_exit(asus); in asus_wmi_remove()
2273 asus_wmi_debugfs_exit(asus); in asus_wmi_remove()
2274 asus_wmi_platform_exit(asus); in asus_wmi_remove()
2275 asus_hwmon_fan_set_auto(asus); in asus_wmi_remove()
2277 kfree(asus); in asus_wmi_remove()
2286 struct asus_wmi *asus = dev_get_drvdata(device); in asus_hotk_thaw() local
2288 if (asus->wlan.rfkill) { in asus_hotk_thaw()
2296 wlan = asus_wmi_get_devstate_simple(asus, ASUS_WMI_DEVID_WLAN); in asus_hotk_thaw()
2305 struct asus_wmi *asus = dev_get_drvdata(device); in asus_hotk_resume() local
2307 if (!IS_ERR_OR_NULL(asus->kbd_led.dev)) in asus_hotk_resume()
2308 queue_work(asus->led_workqueue, &asus->kbd_led_work); in asus_hotk_resume()
2315 struct asus_wmi *asus = dev_get_drvdata(device); in asus_hotk_restore() local
2319 if (asus->wlan.rfkill) in asus_hotk_restore()
2320 asus_rfkill_hotplug(asus); in asus_hotk_restore()
2322 if (asus->bluetooth.rfkill) { in asus_hotk_restore()
2323 bl = !asus_wmi_get_devstate_simple(asus, in asus_hotk_restore()
2325 rfkill_set_sw_state(asus->bluetooth.rfkill, bl); in asus_hotk_restore()
2327 if (asus->wimax.rfkill) { in asus_hotk_restore()
2328 bl = !asus_wmi_get_devstate_simple(asus, ASUS_WMI_DEVID_WIMAX); in asus_hotk_restore()
2329 rfkill_set_sw_state(asus->wimax.rfkill, bl); in asus_hotk_restore()
2331 if (asus->wwan3g.rfkill) { in asus_hotk_restore()
2332 bl = !asus_wmi_get_devstate_simple(asus, ASUS_WMI_DEVID_WWAN3G); in asus_hotk_restore()
2333 rfkill_set_sw_state(asus->wwan3g.rfkill, bl); in asus_hotk_restore()
2335 if (asus->gps.rfkill) { in asus_hotk_restore()
2336 bl = !asus_wmi_get_devstate_simple(asus, ASUS_WMI_DEVID_GPS); in asus_hotk_restore()
2337 rfkill_set_sw_state(asus->gps.rfkill, bl); in asus_hotk_restore()
2339 if (asus->uwb.rfkill) { in asus_hotk_restore()
2340 bl = !asus_wmi_get_devstate_simple(asus, ASUS_WMI_DEVID_UWB); in asus_hotk_restore()
2341 rfkill_set_sw_state(asus->uwb.rfkill, bl); in asus_hotk_restore()
2343 if (!IS_ERR_OR_NULL(asus->kbd_led.dev)) in asus_hotk_restore()
2344 queue_work(asus->led_workqueue, &asus->kbd_led_work); in asus_hotk_restore()
2418 pr_info("Asus Management GUID not found\n"); in asus_wmi_init()
2422 pr_info("ASUS WMI generic driver loaded\n"); in asus_wmi_init()
2428 pr_info("ASUS WMI generic driver unloaded\n"); in asus_wmi_exit()