Lines Matching +full:battery +full:- +full:profile
1 // SPDX-License-Identifier: GPL-2.0-or-later
6 * Copyright(C) 2010-2011 Corentin Chary <corentin.chary@gmail.com>
22 #include <linux/input/sparse-keymap.h>
32 #include <linux/hwmon-sysfs.h>
35 #include <linux/platform_data/x86/asus-wmi.h>
41 #include <acpi/battery.h>
44 #include "asus-wmi.h"
57 #define ASUS_WMI_MGMT_GUID "97845ED0-4E6D-11DE-8A39-0800200C9A66"
134 u16 mfun; /* probably "Multi-function" to be called */
135 u16 sfun; /* probably "Sub-function" to be called */
145 u32 speed; /* read: RPM/100 - write: 0-255 */
149 * <platform>/ - debugfs root directory
150 * dev_id - current dev_id
151 * ctrl_param - current ctrl_param
152 * method_id - current method_id
153 * devs - call DEVS(dev_id, ctrl_param) and print result
154 * dsts - call DSTS(dev_id) and print result
155 * call - call method_id(dev_id, ctrl_param) and print result
265 return -EIO; in asus_wmi_evaluate_method3()
268 if (obj && obj->type == ACPI_TYPE_INTEGER) in asus_wmi_evaluate_method3()
269 tmp = (u32) obj->integer.value; in asus_wmi_evaluate_method3()
277 return -ENODEV; in asus_wmi_evaluate_method3()
302 return -ENOMEM; in asus_wmi_evaluate_method_agfn()
312 return -ENXIO; in asus_wmi_evaluate_method_agfn()
319 return asus_wmi_evaluate_method(asus->dsts_id, dev_id, 0, retval); in asus_wmi_get_devstate()
341 return -ENODEV; in asus_wmi_get_devstate_bits()
345 return -ENODEV; in asus_wmi_get_devstate_bits()
371 asus->inputdev = input_allocate_device(); in asus_wmi_input_init()
372 if (!asus->inputdev) in asus_wmi_input_init()
373 return -ENOMEM; in asus_wmi_input_init()
375 asus->inputdev->name = asus->driver->input_name; in asus_wmi_input_init()
376 asus->inputdev->phys = asus->driver->input_phys; in asus_wmi_input_init()
377 asus->inputdev->id.bustype = BUS_HOST; in asus_wmi_input_init()
378 asus->inputdev->dev.parent = &asus->platform_device->dev; in asus_wmi_input_init()
379 set_bit(EV_REP, asus->inputdev->evbit); in asus_wmi_input_init()
381 err = sparse_keymap_setup(asus->inputdev, asus->driver->keymap, NULL); in asus_wmi_input_init()
385 if (asus->driver->quirks->use_kbd_dock_devid) { in asus_wmi_input_init()
388 input_set_capability(asus->inputdev, EV_SW, SW_TABLET_MODE); in asus_wmi_input_init()
389 input_report_switch(asus->inputdev, SW_TABLET_MODE, !result); in asus_wmi_input_init()
390 } else if (result != -ENODEV) { in asus_wmi_input_init()
391 pr_err("Error checking for keyboard-dock: %d\n", result); in asus_wmi_input_init()
395 if (asus->driver->quirks->use_lid_flip_devid) { in asus_wmi_input_init()
398 asus->driver->quirks->use_lid_flip_devid = 0; in asus_wmi_input_init()
400 input_set_capability(asus->inputdev, EV_SW, SW_TABLET_MODE); in asus_wmi_input_init()
401 input_report_switch(asus->inputdev, SW_TABLET_MODE, result); in asus_wmi_input_init()
402 } else if (result == -ENODEV) { in asus_wmi_input_init()
405 pr_err("Error checking for lid-flip: %d\n", result); in asus_wmi_input_init()
409 err = input_register_device(asus->inputdev); in asus_wmi_input_init()
416 input_free_device(asus->inputdev); in asus_wmi_input_init()
422 if (asus->inputdev) in asus_wmi_input_exit()
423 input_unregister_device(asus->inputdev); in asus_wmi_input_exit()
425 asus->inputdev = NULL; in asus_wmi_input_exit()
435 input_report_switch(asus->inputdev, SW_TABLET_MODE, result); in lid_flip_tablet_mode_get_state()
436 input_sync(asus->inputdev); in lid_flip_tablet_mode_get_state()
446 asus->dgpu_disable_available = false; in dgpu_disable_check_present()
450 if (err == -ENODEV) in dgpu_disable_check_present()
456 asus->dgpu_disable_available = true; in dgpu_disable_check_present()
457 asus->dgpu_disable = result & ASUS_WMI_DSTS_STATUS_BIT; in dgpu_disable_check_present()
470 value = asus->dgpu_disable ? 1 : 0; in dgpu_disable_write()
480 return -EIO; in dgpu_disable_write()
483 sysfs_notify(&asus->platform_device->dev.kobj, NULL, "dgpu_disable"); in dgpu_disable_write()
492 u8 mode = asus->dgpu_disable; in dgpu_disable_show()
516 asus->dgpu_disable = disable; in dgpu_disable_store()
533 asus->egpu_enable_available = false; in egpu_enable_check_present()
537 if (err == -ENODEV) in egpu_enable_check_present()
543 asus->egpu_enable_available = true; in egpu_enable_check_present()
544 asus->egpu_enable = result & ASUS_WMI_DSTS_STATUS_BIT; in egpu_enable_check_present()
557 value = asus->egpu_enable ? 1 : 0; in egpu_enable_write()
568 return -EIO; in egpu_enable_write()
571 sysfs_notify(&asus->platform_device->dev.kobj, NULL, "egpu_enable"); in egpu_enable_write()
580 bool mode = asus->egpu_enable; in egpu_enable_show()
599 asus->egpu_enable = enable; in egpu_enable_store()
615 /* Battery ********************************************************************/
617 /* The battery maximum charging percentage */
631 return -EINVAL; in charge_control_end_threshold_store()
638 return -EIO; in charge_control_end_threshold_store()
656 static int asus_wmi_battery_add(struct power_supply *battery) in asus_wmi_battery_add() argument
658 /* The WMI method does not provide a way to specific a battery, so we in asus_wmi_battery_add()
659 * just assume it is the first battery. in asus_wmi_battery_add()
661 * battery is named BATT. in asus_wmi_battery_add()
663 if (strcmp(battery->desc->name, "BAT0") != 0 && in asus_wmi_battery_add()
664 strcmp(battery->desc->name, "BAT1") != 0 && in asus_wmi_battery_add()
665 strcmp(battery->desc->name, "BATC") != 0 && in asus_wmi_battery_add()
666 strcmp(battery->desc->name, "BATT") != 0) in asus_wmi_battery_add()
667 return -ENODEV; in asus_wmi_battery_add()
669 if (device_create_file(&battery->dev, in asus_wmi_battery_add()
671 return -ENODEV; in asus_wmi_battery_add()
675 * a battery is added. in asus_wmi_battery_add()
683 static int asus_wmi_battery_remove(struct power_supply *battery) in asus_wmi_battery_remove() argument
685 device_remove_file(&battery->dev, in asus_wmi_battery_remove()
693 .name = "ASUS Battery Extension",
698 asus->battery_rsoc_available = false; in asus_wmi_battery_init()
700 asus->battery_rsoc_available = true; in asus_wmi_battery_init()
707 if (asus->battery_rsoc_available) in asus_wmi_battery_exit()
726 ctrl_param = asus->tpd_led_wk; in tpd_led_update()
737 asus->tpd_led_wk = !!value; in tpd_led_set()
738 queue_work(asus->led_workqueue, &asus->tpd_led_work); in tpd_led_set()
759 ctrl_param = 0x80 | (asus->kbd_led_wk & 0x7F); in kbd_led_update()
768 * bits 0-2: level in kbd_led_read()
770 * bit 8-10: environment (0: dark, 1: normal, 2: light) in kbd_led_read()
796 max_level = asus->kbd_led.max_brightness; in do_kbd_led_set()
798 asus->kbd_led_wk = clamp_val(value, 0, max_level); in do_kbd_led_set()
806 if (led_cdev->flags & LED_UNREGISTERING) in kbd_led_set()
814 struct led_classdev *led_cdev = &asus->kbd_led; in kbd_led_set_by_kbd()
817 led_classdev_notify_brightness_hw_changed(led_cdev, asus->kbd_led_wk); in kbd_led_set_by_kbd()
850 ctrl_param = asus->wlan_led_wk; in wlan_led_update()
861 asus->wlan_led_wk = !!value; in wlan_led_set()
862 queue_work(asus->led_workqueue, &asus->wlan_led_work); in wlan_led_set()
883 ctrl_param = asus->lightbar_led_wk; in lightbar_led_update()
894 asus->lightbar_led_wk = !!value; in lightbar_led_set()
895 queue_work(asus->led_workqueue, &asus->lightbar_led_work); in lightbar_led_set()
911 led_classdev_unregister(&asus->kbd_led); in asus_wmi_led_exit()
912 led_classdev_unregister(&asus->tpd_led); in asus_wmi_led_exit()
913 led_classdev_unregister(&asus->wlan_led); in asus_wmi_led_exit()
914 led_classdev_unregister(&asus->lightbar_led); in asus_wmi_led_exit()
916 if (asus->led_workqueue) in asus_wmi_led_exit()
917 destroy_workqueue(asus->led_workqueue); in asus_wmi_led_exit()
924 asus->led_workqueue = create_singlethread_workqueue("led_workqueue"); in asus_wmi_led_init()
925 if (!asus->led_workqueue) in asus_wmi_led_init()
926 return -ENOMEM; in asus_wmi_led_init()
929 INIT_WORK(&asus->tpd_led_work, tpd_led_update); in asus_wmi_led_init()
931 asus->tpd_led.name = "asus::touchpad"; in asus_wmi_led_init()
932 asus->tpd_led.brightness_set = tpd_led_set; in asus_wmi_led_init()
933 asus->tpd_led.brightness_get = tpd_led_get; in asus_wmi_led_init()
934 asus->tpd_led.max_brightness = 1; in asus_wmi_led_init()
936 rv = led_classdev_register(&asus->platform_device->dev, in asus_wmi_led_init()
937 &asus->tpd_led); in asus_wmi_led_init()
943 asus->kbd_led_wk = led_val; in asus_wmi_led_init()
944 asus->kbd_led.name = "asus::kbd_backlight"; in asus_wmi_led_init()
945 asus->kbd_led.flags = LED_BRIGHT_HW_CHANGED; in asus_wmi_led_init()
946 asus->kbd_led.brightness_set = kbd_led_set; in asus_wmi_led_init()
947 asus->kbd_led.brightness_get = kbd_led_get; in asus_wmi_led_init()
948 asus->kbd_led.max_brightness = 3; in asus_wmi_led_init()
950 rv = led_classdev_register(&asus->platform_device->dev, in asus_wmi_led_init()
951 &asus->kbd_led); in asus_wmi_led_init()
957 && (asus->driver->quirks->wapf > 0)) { in asus_wmi_led_init()
958 INIT_WORK(&asus->wlan_led_work, wlan_led_update); in asus_wmi_led_init()
960 asus->wlan_led.name = "asus::wlan"; in asus_wmi_led_init()
961 asus->wlan_led.brightness_set = wlan_led_set; in asus_wmi_led_init()
963 asus->wlan_led.brightness_get = wlan_led_get; in asus_wmi_led_init()
964 asus->wlan_led.flags = LED_CORE_SUSPENDRESUME; in asus_wmi_led_init()
965 asus->wlan_led.max_brightness = 1; in asus_wmi_led_init()
966 asus->wlan_led.default_trigger = "asus-wlan"; in asus_wmi_led_init()
968 rv = led_classdev_register(&asus->platform_device->dev, in asus_wmi_led_init()
969 &asus->wlan_led); in asus_wmi_led_init()
975 INIT_WORK(&asus->lightbar_led_work, lightbar_led_update); in asus_wmi_led_init()
977 asus->lightbar_led.name = "asus::lightbar"; in asus_wmi_led_init()
978 asus->lightbar_led.brightness_set = lightbar_led_set; in asus_wmi_led_init()
979 asus->lightbar_led.brightness_get = lightbar_led_get; in asus_wmi_led_init()
980 asus->lightbar_led.max_brightness = 1; in asus_wmi_led_init()
982 rv = led_classdev_register(&asus->platform_device->dev, in asus_wmi_led_init()
983 &asus->lightbar_led); in asus_wmi_led_init()
1015 mutex_lock(&asus->wmi_lock); in asus_rfkill_hotplug()
1017 mutex_unlock(&asus->wmi_lock); in asus_rfkill_hotplug()
1019 mutex_lock(&asus->hotplug_lock); in asus_rfkill_hotplug()
1022 if (asus->wlan.rfkill) in asus_rfkill_hotplug()
1023 rfkill_set_sw_state(asus->wlan.rfkill, blocked); in asus_rfkill_hotplug()
1025 if (asus->hotplug_slot.ops) { in asus_rfkill_hotplug()
1071 mutex_unlock(&asus->hotplug_lock); in asus_rfkill_hotplug()
1088 queue_work(asus->hotplug_workqueue, &asus->hotplug_work); in asus_rfkill_notify()
1098 return -ENODEV; in asus_register_rfkill_notifier()
1152 int ret = -ENOMEM; in asus_setup_pci_hotplug()
1157 return -ENODEV; in asus_setup_pci_hotplug()
1160 asus->hotplug_workqueue = in asus_setup_pci_hotplug()
1162 if (!asus->hotplug_workqueue) in asus_setup_pci_hotplug()
1165 INIT_WORK(&asus->hotplug_work, asus_hotplug_work); in asus_setup_pci_hotplug()
1167 asus->hotplug_slot.ops = &asus_hotplug_slot_ops; in asus_setup_pci_hotplug()
1169 ret = pci_hp_register(&asus->hotplug_slot, bus, 0, "asus-wifi"); in asus_setup_pci_hotplug()
1171 pr_err("Unable to register hotplug slot - %d\n", ret); in asus_setup_pci_hotplug()
1178 asus->hotplug_slot.ops = NULL; in asus_setup_pci_hotplug()
1179 destroy_workqueue(asus->hotplug_workqueue); in asus_setup_pci_hotplug()
1191 u32 dev_id = priv->dev_id; in asus_rfkill_set()
1202 priv->asus->driver->wlan_ctrl_by_user) in asus_rfkill_set()
1213 result = asus_wmi_get_devstate_simple(priv->asus, priv->dev_id); in asus_rfkill_query()
1218 rfkill_set_sw_state(priv->rfkill, !result); in asus_rfkill_query()
1224 struct asus_wmi *asus = priv->asus; in asus_rfkill_wlan_set()
1234 mutex_lock(&asus->wmi_lock); in asus_rfkill_wlan_set()
1236 mutex_unlock(&asus->wmi_lock); in asus_rfkill_wlan_set()
1255 struct rfkill **rfkill = &arfkill->rfkill; in asus_new_rfkill()
1260 arfkill->dev_id = dev_id; in asus_new_rfkill()
1261 arfkill->asus = asus; in asus_new_rfkill()
1264 asus->driver->quirks->hotplug_wireless) in asus_new_rfkill()
1265 *rfkill = rfkill_alloc(name, &asus->platform_device->dev, type, in asus_new_rfkill()
1268 *rfkill = rfkill_alloc(name, &asus->platform_device->dev, type, in asus_new_rfkill()
1272 return -EINVAL; in asus_new_rfkill()
1275 (asus->driver->quirks->wapf > 0)) in asus_new_rfkill()
1276 rfkill_set_led_trigger_name(*rfkill, "asus-wlan"); in asus_new_rfkill()
1290 if (asus->driver->wlan_ctrl_by_user && ashs_present()) in asus_wmi_rfkill_exit()
1296 if (asus->wlan.rfkill) { in asus_wmi_rfkill_exit()
1297 rfkill_unregister(asus->wlan.rfkill); in asus_wmi_rfkill_exit()
1298 rfkill_destroy(asus->wlan.rfkill); in asus_wmi_rfkill_exit()
1299 asus->wlan.rfkill = NULL; in asus_wmi_rfkill_exit()
1306 if (asus->hotplug_slot.ops) in asus_wmi_rfkill_exit()
1307 pci_hp_deregister(&asus->hotplug_slot); in asus_wmi_rfkill_exit()
1308 if (asus->hotplug_workqueue) in asus_wmi_rfkill_exit()
1309 destroy_workqueue(asus->hotplug_workqueue); in asus_wmi_rfkill_exit()
1311 if (asus->bluetooth.rfkill) { in asus_wmi_rfkill_exit()
1312 rfkill_unregister(asus->bluetooth.rfkill); in asus_wmi_rfkill_exit()
1313 rfkill_destroy(asus->bluetooth.rfkill); in asus_wmi_rfkill_exit()
1314 asus->bluetooth.rfkill = NULL; in asus_wmi_rfkill_exit()
1316 if (asus->wimax.rfkill) { in asus_wmi_rfkill_exit()
1317 rfkill_unregister(asus->wimax.rfkill); in asus_wmi_rfkill_exit()
1318 rfkill_destroy(asus->wimax.rfkill); in asus_wmi_rfkill_exit()
1319 asus->wimax.rfkill = NULL; in asus_wmi_rfkill_exit()
1321 if (asus->wwan3g.rfkill) { in asus_wmi_rfkill_exit()
1322 rfkill_unregister(asus->wwan3g.rfkill); in asus_wmi_rfkill_exit()
1323 rfkill_destroy(asus->wwan3g.rfkill); in asus_wmi_rfkill_exit()
1324 asus->wwan3g.rfkill = NULL; in asus_wmi_rfkill_exit()
1326 if (asus->gps.rfkill) { in asus_wmi_rfkill_exit()
1327 rfkill_unregister(asus->gps.rfkill); in asus_wmi_rfkill_exit()
1328 rfkill_destroy(asus->gps.rfkill); in asus_wmi_rfkill_exit()
1329 asus->gps.rfkill = NULL; in asus_wmi_rfkill_exit()
1331 if (asus->uwb.rfkill) { in asus_wmi_rfkill_exit()
1332 rfkill_unregister(asus->uwb.rfkill); in asus_wmi_rfkill_exit()
1333 rfkill_destroy(asus->uwb.rfkill); in asus_wmi_rfkill_exit()
1334 asus->uwb.rfkill = NULL; in asus_wmi_rfkill_exit()
1342 mutex_init(&asus->hotplug_lock); in asus_wmi_rfkill_init()
1343 mutex_init(&asus->wmi_lock); in asus_wmi_rfkill_init()
1345 result = asus_new_rfkill(asus, &asus->wlan, "asus-wlan", in asus_wmi_rfkill_init()
1348 if (result && result != -ENODEV) in asus_wmi_rfkill_init()
1351 result = asus_new_rfkill(asus, &asus->bluetooth, in asus_wmi_rfkill_init()
1352 "asus-bluetooth", RFKILL_TYPE_BLUETOOTH, in asus_wmi_rfkill_init()
1355 if (result && result != -ENODEV) in asus_wmi_rfkill_init()
1358 result = asus_new_rfkill(asus, &asus->wimax, "asus-wimax", in asus_wmi_rfkill_init()
1361 if (result && result != -ENODEV) in asus_wmi_rfkill_init()
1364 result = asus_new_rfkill(asus, &asus->wwan3g, "asus-wwan3g", in asus_wmi_rfkill_init()
1367 if (result && result != -ENODEV) in asus_wmi_rfkill_init()
1370 result = asus_new_rfkill(asus, &asus->gps, "asus-gps", in asus_wmi_rfkill_init()
1373 if (result && result != -ENODEV) in asus_wmi_rfkill_init()
1376 result = asus_new_rfkill(asus, &asus->uwb, "asus-uwb", in asus_wmi_rfkill_init()
1379 if (result && result != -ENODEV) in asus_wmi_rfkill_init()
1382 if (!asus->driver->quirks->hotplug_wireless) in asus_wmi_rfkill_init()
1387 * If we get -EBUSY then something else is handling the PCI hotplug - in asus_wmi_rfkill_init()
1390 if (result == -EBUSY) in asus_wmi_rfkill_init()
1403 if (result && result != -ENODEV) in asus_wmi_rfkill_init()
1406 if (result == -ENODEV) in asus_wmi_rfkill_init()
1418 asus->panel_overdrive_available = false; in panel_od_check_present()
1422 if (err == -ENODEV) in panel_od_check_present()
1428 asus->panel_overdrive_available = true; in panel_od_check_present()
1429 asus->panel_overdrive = result & ASUS_WMI_DSTS_STATUS_BIT; in panel_od_check_present()
1442 value = asus->panel_overdrive ? 1 : 0; in panel_od_write()
1453 return -EIO; in panel_od_write()
1456 sysfs_notify(&asus->platform_device->dev.kobj, NULL, "panel_od"); in panel_od_write()
1466 return sysfs_emit(buf, "%d\n", asus->panel_overdrive); in panel_od_show()
1482 asus->panel_overdrive = overdrive; in panel_od_store()
1499 u32 ports_available = asus->driver->quirks->xusb2pr; in asus_wmi_set_xusb2pr()
1543 return -EINVAL; in asus_agfn_fan_speed_read()
1548 return -ENXIO; in asus_agfn_fan_speed_read()
1571 return -EINVAL; in asus_agfn_fan_speed_write()
1576 return -ENXIO; in asus_agfn_fan_speed_write()
1579 asus->agfn_pwm = *speed; in asus_agfn_fan_speed_write()
1606 * - ASUS_WMI_UNSUPPORTED_METHOD is returned in asus_wmi_has_agfn_fan()
1607 * - reverved bits are non-zero in asus_wmi_has_agfn_fan()
1608 * - sfun and presence bit are not set in asus_wmi_has_agfn_fan()
1611 || (!asus->sfun && !(value & ASUS_WMI_DSTS_PRESENCE_BIT))); in asus_wmi_has_agfn_fan()
1619 switch (asus->fan_type) { in asus_fan_set_auto()
1627 return -EIO; in asus_fan_set_auto()
1633 return -ENXIO; in asus_fan_set_auto()
1637 return -ENXIO; in asus_fan_set_auto()
1653 if (asus->agfn_pwm >= 0) in pwm1_show()
1654 return sprintf(buf, "%d\n", asus->agfn_pwm); in pwm1_show()
1658 * we read a current value through the (now-deprecated) FAN_CTRL device. in pwm1_show()
1674 value = -1; in pwm1_show()
1698 asus->fan_pwm_mode = ASUS_FAN_CTRL_MANUAL; in pwm1_store()
1711 switch (asus->fan_type) { in fan1_input_show()
1723 if (asus->fan_pwm_mode == ASUS_FAN_CTRL_MANUAL) in fan1_input_show()
1724 return -ENXIO; in fan1_input_show()
1729 return -ENXIO; in fan1_input_show()
1734 return -ENXIO; in fan1_input_show()
1737 return sprintf(buf, "%d\n", value < 0 ? -1 : value*100); in fan1_input_show()
1755 return sprintf(buf, "%d\n", asus->fan_pwm_mode); in pwm1_enable_show()
1773 if (asus->fan_type == FAN_TYPE_SPEC83) { in pwm1_enable_store()
1782 return -EINVAL; in pwm1_enable_store()
1791 return -EIO; in pwm1_enable_store()
1792 } else if (asus->fan_type == FAN_TYPE_AGFN) { in pwm1_enable_store()
1804 return -EINVAL; in pwm1_enable_store()
1808 asus->fan_pwm_mode = state; in pwm1_enable_store()
1858 struct asus_wmi *asus = dev_get_drvdata(dev->parent); in asus_hwmon_sysfs_is_visible()
1862 if (asus->fan_type != FAN_TYPE_AGFN) in asus_hwmon_sysfs_is_visible()
1867 if (asus->fan_type == FAN_TYPE_NONE) in asus_hwmon_sysfs_is_visible()
1878 * If the temperature value in deci-Kelvin is near the absolute in asus_hwmon_sysfs_is_visible()
1885 return attr->mode; in asus_hwmon_sysfs_is_visible()
1896 struct device *dev = &asus->platform_device->dev; in asus_wmi_hwmon_init()
1911 asus->fan_type = FAN_TYPE_NONE; in asus_wmi_fan_init()
1912 asus->agfn_pwm = -1; in asus_wmi_fan_init()
1915 asus->fan_type = FAN_TYPE_SPEC83; in asus_wmi_fan_init()
1917 asus->fan_type = FAN_TYPE_AGFN; in asus_wmi_fan_init()
1919 if (asus->fan_type == FAN_TYPE_NONE) in asus_wmi_fan_init()
1920 return -ENODEV; in asus_wmi_fan_init()
1923 asus->fan_pwm_mode = ASUS_FAN_CTRL_AUTO; in asus_wmi_fan_init()
1934 asus->fan_boost_mode_available = false; in fan_boost_mode_check_present()
1939 if (err == -ENODEV) in fan_boost_mode_check_present()
1947 asus->fan_boost_mode_available = true; in fan_boost_mode_check_present()
1948 asus->fan_boost_mode_mask = result & ASUS_FAN_BOOST_MODES_MASK; in fan_boost_mode_check_present()
1960 value = asus->fan_boost_mode; in fan_boost_mode_write()
1966 sysfs_notify(&asus->platform_device->dev.kobj, NULL, in fan_boost_mode_write()
1977 return -EIO; in fan_boost_mode_write()
1985 u8 mask = asus->fan_boost_mode_mask; in fan_boost_mode_switch_next()
1987 if (asus->fan_boost_mode == ASUS_FAN_BOOST_MODE_NORMAL) { in fan_boost_mode_switch_next()
1989 asus->fan_boost_mode = ASUS_FAN_BOOST_MODE_OVERBOOST; in fan_boost_mode_switch_next()
1991 asus->fan_boost_mode = ASUS_FAN_BOOST_MODE_SILENT; in fan_boost_mode_switch_next()
1992 } else if (asus->fan_boost_mode == ASUS_FAN_BOOST_MODE_OVERBOOST) { in fan_boost_mode_switch_next()
1994 asus->fan_boost_mode = ASUS_FAN_BOOST_MODE_SILENT; in fan_boost_mode_switch_next()
1996 asus->fan_boost_mode = ASUS_FAN_BOOST_MODE_NORMAL; in fan_boost_mode_switch_next()
1998 asus->fan_boost_mode = ASUS_FAN_BOOST_MODE_NORMAL; in fan_boost_mode_switch_next()
2009 return scnprintf(buf, PAGE_SIZE, "%d\n", asus->fan_boost_mode); in fan_boost_mode_show()
2019 u8 mask = asus->fan_boost_mode_mask; in fan_boost_mode_store()
2029 return -EINVAL; in fan_boost_mode_store()
2032 return -EINVAL; in fan_boost_mode_store()
2034 return -EINVAL; in fan_boost_mode_store()
2037 asus->fan_boost_mode = new_mode; in fan_boost_mode_store()
2043 // Fan boost mode: 0 - normal, 1 - overboost, 2 - silent
2053 asus->throttle_thermal_policy_available = false; in throttle_thermal_policy_check_present()
2059 if (err == -ENODEV) in throttle_thermal_policy_check_present()
2065 asus->throttle_thermal_policy_available = true; in throttle_thermal_policy_check_present()
2076 value = asus->throttle_thermal_policy_mode; in throttle_thermal_policy_write()
2081 sysfs_notify(&asus->platform_device->dev.kobj, NULL, in throttle_thermal_policy_write()
2092 return -EIO; in throttle_thermal_policy_write()
2100 if (!asus->throttle_thermal_policy_available) in throttle_thermal_policy_set_default()
2103 asus->throttle_thermal_policy_mode = ASUS_THROTTLE_THERMAL_POLICY_DEFAULT; in throttle_thermal_policy_set_default()
2109 u8 new_mode = asus->throttle_thermal_policy_mode + 1; in throttle_thermal_policy_switch_next()
2115 asus->throttle_thermal_policy_mode = new_mode; in throttle_thermal_policy_switch_next()
2133 u8 mode = asus->throttle_thermal_policy_mode; in throttle_thermal_policy_show()
2152 return -EINVAL; in throttle_thermal_policy_store()
2154 asus->throttle_thermal_policy_mode = new_mode; in throttle_thermal_policy_store()
2168 // Throttle thermal policy: 0 - default, 1 - overboost, 2 - silent
2171 /* Platform profile ***********************************************************/
2173 enum platform_profile_option *profile) in platform_profile_get() argument
2180 tp = asus->throttle_thermal_policy_mode; in platform_profile_get()
2184 *profile = PLATFORM_PROFILE_BALANCED; in platform_profile_get()
2187 *profile = PLATFORM_PROFILE_PERFORMANCE; in platform_profile_get()
2190 *profile = PLATFORM_PROFILE_QUIET; in platform_profile_get()
2193 return -EINVAL; in platform_profile_get()
2200 enum platform_profile_option profile) in platform_profile_set() argument
2207 switch (profile) { in platform_profile_set()
2218 return -EOPNOTSUPP; in platform_profile_set()
2221 asus->throttle_thermal_policy_mode = tp; in platform_profile_set()
2227 struct device *dev = &asus->platform_device->dev; in platform_profile_setup()
2234 if (!asus->throttle_thermal_policy_available) in platform_profile_setup()
2239 asus->platform_profile_handler.profile_get = platform_profile_get; in platform_profile_setup()
2240 asus->platform_profile_handler.profile_set = platform_profile_set; in platform_profile_setup()
2242 set_bit(PLATFORM_PROFILE_QUIET, asus->platform_profile_handler.choices); in platform_profile_setup()
2244 asus->platform_profile_handler.choices); in platform_profile_setup()
2246 asus->platform_profile_handler.choices); in platform_profile_setup()
2248 err = platform_profile_register(&asus->platform_profile_handler); in platform_profile_setup()
2252 asus->platform_profile_support = true; in platform_profile_setup()
2262 if (asus->driver->quirks->store_backlight_power) in read_backlight_power()
2263 ret = !asus->driver->panel_power; in read_backlight_power()
2287 return -ENODEV; in read_brightness_max()
2310 if ((asus->driver->brightness < bd->props.brightness) || in get_scalar_command()
2311 bd->props.brightness == bd->props.max_brightness) in get_scalar_command()
2313 else if ((asus->driver->brightness > bd->props.brightness) || in get_scalar_command()
2314 bd->props.brightness == 0) in get_scalar_command()
2317 asus->driver->brightness = bd->props.brightness; in get_scalar_command()
2329 if (power != -ENODEV && bd->props.power != power) { in update_bl_status()
2330 ctrl_param = !!(bd->props.power == FB_BLANK_UNBLANK); in update_bl_status()
2333 if (asus->driver->quirks->store_backlight_power) in update_bl_status()
2334 asus->driver->panel_power = bd->props.power; in update_bl_status()
2338 if (asus->driver->quirks->scalar_panel_brightness) in update_bl_status()
2342 if (asus->driver->quirks->scalar_panel_brightness) in update_bl_status()
2345 ctrl_param = bd->props.brightness; in update_bl_status()
2360 struct backlight_device *bd = asus->backlight_device; in asus_wmi_backlight_notify()
2361 int old = bd->props.brightness; in asus_wmi_backlight_notify()
2365 new = code - NOTIFY_BRNUP_MIN + 1; in asus_wmi_backlight_notify()
2367 new = code - NOTIFY_BRNDOWN_MIN; in asus_wmi_backlight_notify()
2369 bd->props.brightness = new; in asus_wmi_backlight_notify()
2388 if (power == -ENODEV) in asus_wmi_backlight_init()
2396 bd = backlight_device_register(asus->driver->name, in asus_wmi_backlight_init()
2397 &asus->platform_device->dev, asus, in asus_wmi_backlight_init()
2404 asus->backlight_device = bd; in asus_wmi_backlight_init()
2406 if (asus->driver->quirks->store_backlight_power) in asus_wmi_backlight_init()
2407 asus->driver->panel_power = power; in asus_wmi_backlight_init()
2409 bd->props.brightness = read_brightness(bd); in asus_wmi_backlight_init()
2410 bd->props.power = power; in asus_wmi_backlight_init()
2413 asus->driver->brightness = bd->props.brightness; in asus_wmi_backlight_init()
2420 backlight_device_unregister(asus->backlight_device); in asus_wmi_backlight_exit()
2422 asus->backlight_device = NULL; in asus_wmi_backlight_exit()
2437 /* Fn-lock ********************************************************************/
2451 int mode = asus->fnlock_locked; in asus_wmi_fnlock_update()
2469 return -EIO; in asus_wmi_get_event_code()
2474 if (obj && obj->type == ACPI_TYPE_INTEGER) in asus_wmi_get_event_code()
2475 code = (int)(obj->integer.value & WMI_EVENT_MASK); in asus_wmi_get_event_code()
2477 code = -EIO; in asus_wmi_get_event_code()
2491 if (asus->driver->key_filter) { in asus_wmi_handle_event_code()
2492 asus->driver->key_filter(asus->driver, &code, &key_value, in asus_wmi_handle_event_code()
2511 kbd_led_set_by_kbd(asus, asus->kbd_led_wk + 1); in asus_wmi_handle_event_code()
2515 kbd_led_set_by_kbd(asus, asus->kbd_led_wk - 1); in asus_wmi_handle_event_code()
2519 if (asus->kbd_led_wk == asus->kbd_led.max_brightness) in asus_wmi_handle_event_code()
2522 kbd_led_set_by_kbd(asus, asus->kbd_led_wk + 1); in asus_wmi_handle_event_code()
2527 asus->fnlock_locked = !asus->fnlock_locked; in asus_wmi_handle_event_code()
2532 if (asus->driver->quirks->use_kbd_dock_devid && code == NOTIFY_KBD_DOCK_CHANGE) { in asus_wmi_handle_event_code()
2536 input_report_switch(asus->inputdev, SW_TABLET_MODE, in asus_wmi_handle_event_code()
2538 input_sync(asus->inputdev); in asus_wmi_handle_event_code()
2543 if (asus->driver->quirks->use_lid_flip_devid && code == NOTIFY_LID_FLIP) { in asus_wmi_handle_event_code()
2548 if (asus->fan_boost_mode_available && code == NOTIFY_KBD_FBM) { in asus_wmi_handle_event_code()
2553 if (asus->throttle_thermal_policy_available && code == NOTIFY_KBD_TTP) { in asus_wmi_handle_event_code()
2558 if (is_display_toggle(code) && asus->driver->quirks->no_display_toggle) in asus_wmi_handle_event_code()
2561 if (!sparse_keymap_report_event(asus->inputdev, code, in asus_wmi_handle_event_code()
2588 if (!asus->wmi_event_queue || value != WMI_EVENT_VALUE_ATK) in asus_wmi_notify()
2612 return -EIO; in asus_wmi_notify_queue_flush()
2689 return -EINVAL; in cpufv_store()
2721 int devid = -1; in asus_sysfs_is_visible()
2734 ok = asus->egpu_enable_available; in asus_sysfs_is_visible()
2736 ok = asus->dgpu_disable_available; in asus_sysfs_is_visible()
2738 ok = asus->fan_boost_mode_available; in asus_sysfs_is_visible()
2740 ok = asus->throttle_thermal_policy_available; in asus_sysfs_is_visible()
2742 ok = asus->panel_overdrive_available; in asus_sysfs_is_visible()
2744 if (devid != -1) in asus_sysfs_is_visible()
2747 return ok ? attr->mode : 0; in asus_sysfs_is_visible()
2757 sysfs_remove_group(&device->dev.kobj, &platform_attribute_group); in asus_wmi_sysfs_exit()
2762 return sysfs_create_group(&device->dev.kobj, &platform_attribute_group); in asus_wmi_sysfs_init()
2769 struct device *dev = &asus->platform_device->dev; in asus_wmi_platform_init()
2780 asus->spec = rv; in asus_wmi_platform_init()
2786 * bit signifies that the laptop is equipped with a Wi-Fi MiniPCI card. in asus_wmi_platform_init()
2791 asus->sfun = rv; in asus_wmi_platform_init()
2809 return -ENODEV; in asus_wmi_platform_init()
2813 asus->dsts_id = ASUS_WMI_METHODID_DCTS; in asus_wmi_platform_init()
2816 asus->dsts_id = ASUS_WMI_METHODID_DSTS; in asus_wmi_platform_init()
2828 wmi_uid = wmi_get_acpi_device_uid(asus->driver->event_guid); in asus_wmi_platform_init()
2833 asus->wmi_event_queue = true; in asus_wmi_platform_init()
2838 if (asus->driver->quirks->wapf >= 0) in asus_wmi_platform_init()
2840 asus->driver->quirks->wapf, NULL); in asus_wmi_platform_init()
2855 struct asus_wmi *asus = m->private; in show_dsts()
2857 u32 retval = -1; in show_dsts()
2859 err = asus_wmi_get_devstate(asus, asus->debug.dev_id, &retval); in show_dsts()
2863 seq_printf(m, "DSTS(%#x) = %#x\n", asus->debug.dev_id, retval); in show_dsts()
2870 struct asus_wmi *asus = m->private; in show_devs()
2872 u32 retval = -1; in show_devs()
2874 err = asus_wmi_set_devstate(asus->debug.dev_id, asus->debug.ctrl_param, in show_devs()
2879 seq_printf(m, "DEVS(%#x, %#x) = %#x\n", asus->debug.dev_id, in show_devs()
2880 asus->debug.ctrl_param, retval); in show_devs()
2887 struct asus_wmi *asus = m->private; in show_call()
2889 .arg0 = asus->debug.dev_id, in show_call()
2890 .arg1 = asus->debug.ctrl_param, in show_call()
2898 0, asus->debug.method_id, in show_call()
2902 return -EIO; in show_call()
2905 if (obj && obj->type == ACPI_TYPE_INTEGER) in show_call()
2906 seq_printf(m, "%#x(%#x, %#x) = %#x\n", asus->debug.method_id, in show_call()
2907 asus->debug.dev_id, asus->debug.ctrl_param, in show_call()
2908 (u32) obj->integer.value); in show_call()
2910 seq_printf(m, "%#x(%#x, %#x) = t:%d\n", asus->debug.method_id, in show_call()
2911 asus->debug.dev_id, asus->debug.ctrl_param, in show_call()
2912 obj ? obj->type : -1); in show_call()
2927 struct asus_wmi_debugfs_node *node = inode->i_private; in asus_wmi_debugfs_open()
2929 return single_open(file, node->show, node->asus); in asus_wmi_debugfs_open()
2942 debugfs_remove_recursive(asus->debug.root); in asus_wmi_debugfs_exit()
2949 asus->debug.root = debugfs_create_dir(asus->driver->name, NULL); in asus_wmi_debugfs_init()
2951 debugfs_create_x32("method_id", S_IRUGO | S_IWUSR, asus->debug.root, in asus_wmi_debugfs_init()
2952 &asus->debug.method_id); in asus_wmi_debugfs_init()
2954 debugfs_create_x32("dev_id", S_IRUGO | S_IWUSR, asus->debug.root, in asus_wmi_debugfs_init()
2955 &asus->debug.dev_id); in asus_wmi_debugfs_init()
2957 debugfs_create_x32("ctrl_param", S_IRUGO | S_IWUSR, asus->debug.root, in asus_wmi_debugfs_init()
2958 &asus->debug.ctrl_param); in asus_wmi_debugfs_init()
2963 node->asus = asus; in asus_wmi_debugfs_init()
2964 debugfs_create_file(node->name, S_IFREG | S_IRUGO, in asus_wmi_debugfs_init()
2965 asus->debug.root, node, in asus_wmi_debugfs_init()
2974 struct platform_driver *pdrv = to_platform_driver(pdev->dev.driver); in asus_wmi_add()
2984 return -ENOMEM; in asus_wmi_add()
2986 asus->driver = wdrv; in asus_wmi_add()
2987 asus->platform_device = pdev; in asus_wmi_add()
2988 wdrv->platform_device = pdev; in asus_wmi_add()
2989 platform_set_drvdata(asus->platform_device, asus); in asus_wmi_add()
2991 if (wdrv->detect_quirks) in asus_wmi_add()
2992 wdrv->detect_quirks(asus->driver); in asus_wmi_add()
3024 err = asus_wmi_sysfs_init(asus->platform_device); in asus_wmi_add()
3044 asus->driver->wlan_ctrl_by_user = 1; in asus_wmi_add()
3046 if (!(asus->driver->wlan_ctrl_by_user && ashs_present())) { in asus_wmi_add()
3052 if (asus->driver->quirks->wmi_force_als_set) in asus_wmi_add()
3055 /* Some Asus desktop boards export an acpi-video backlight interface, in asus_wmi_add()
3061 if (asus->driver->quirks->wmi_backlight_power) in asus_wmi_add()
3064 if (asus->driver->quirks->wmi_backlight_native) in asus_wmi_add()
3067 if (asus->driver->quirks->xusb2pr) in asus_wmi_add()
3072 if (err && err != -ENODEV) in asus_wmi_add()
3074 } else if (asus->driver->quirks->wmi_backlight_set_devstate) in asus_wmi_add()
3078 asus->fnlock_locked = fnlock_default; in asus_wmi_add()
3082 status = wmi_install_notify_handler(asus->driver->event_guid, in asus_wmi_add()
3085 pr_err("Unable to register notify handler - %d\n", status); in asus_wmi_add()
3086 err = -ENODEV; in asus_wmi_add()
3106 asus_wmi_sysfs_exit(asus->platform_device); in asus_wmi_add()
3110 if (asus->platform_profile_support) in asus_wmi_add()
3126 wmi_remove_notify_handler(asus->driver->event_guid); in asus_wmi_remove()
3132 asus_wmi_sysfs_exit(asus->platform_device); in asus_wmi_remove()
3136 if (asus->platform_profile_support) in asus_wmi_remove()
3143 /* Platform driver - hibernate/resume callbacks *******************************/
3149 if (asus->wlan.rfkill) { in asus_hotk_thaw()
3153 * Work around bios bug - acpi _PTS turns off the wireless led in asus_hotk_thaw()
3168 if (!IS_ERR_OR_NULL(asus->kbd_led.dev)) in asus_hotk_resume()
3174 if (asus->driver->quirks->use_lid_flip_devid) in asus_hotk_resume()
3186 if (asus->wlan.rfkill) in asus_hotk_restore()
3189 if (asus->bluetooth.rfkill) { in asus_hotk_restore()
3192 rfkill_set_sw_state(asus->bluetooth.rfkill, bl); in asus_hotk_restore()
3194 if (asus->wimax.rfkill) { in asus_hotk_restore()
3196 rfkill_set_sw_state(asus->wimax.rfkill, bl); in asus_hotk_restore()
3198 if (asus->wwan3g.rfkill) { in asus_hotk_restore()
3200 rfkill_set_sw_state(asus->wwan3g.rfkill, bl); in asus_hotk_restore()
3202 if (asus->gps.rfkill) { in asus_hotk_restore()
3204 rfkill_set_sw_state(asus->gps.rfkill, bl); in asus_hotk_restore()
3206 if (asus->uwb.rfkill) { in asus_hotk_restore()
3208 rfkill_set_sw_state(asus->uwb.rfkill, bl); in asus_hotk_restore()
3210 if (!IS_ERR_OR_NULL(asus->kbd_led.dev)) in asus_hotk_restore()
3216 if (asus->driver->quirks->use_lid_flip_devid) in asus_hotk_restore()
3232 struct platform_driver *pdrv = to_platform_driver(pdev->dev.driver); in asus_wmi_probe()
3238 return -ENODEV; in asus_wmi_probe()
3241 if (wdrv->event_guid && !wmi_has_guid(wdrv->event_guid)) { in asus_wmi_probe()
3243 return -ENODEV; in asus_wmi_probe()
3246 if (wdrv->probe) { in asus_wmi_probe()
3247 ret = wdrv->probe(pdev); in asus_wmi_probe()
3263 return -EBUSY; in asus_wmi_register_driver()
3265 platform_driver = &driver->platform_driver; in asus_wmi_register_driver()
3266 platform_driver->remove = asus_wmi_remove; in asus_wmi_register_driver()
3267 platform_driver->driver.owner = driver->owner; in asus_wmi_register_driver()
3268 platform_driver->driver.name = driver->name; in asus_wmi_register_driver()
3269 platform_driver->driver.pm = &asus_pm_ops; in asus_wmi_register_driver()
3284 platform_device_unregister(driver->platform_device); in asus_wmi_unregister_driver()
3285 platform_driver_unregister(&driver->platform_driver); in asus_wmi_unregister_driver()