Lines Matching defs:asus

3  *  asus-laptop.c - Asus Laptop Support
218 struct asus_laptop *asus;
229 struct asus_laptop *asus;
414 static bool asus_check_pega_lucid(struct asus_laptop *asus)
416 return !strcmp(asus->name, DEVICE_NAME_PEGA) &&
417 !acpi_check_handle(asus->handle, METHOD_PEGA_ENABLE, NULL) &&
418 !acpi_check_handle(asus->handle, METHOD_PEGA_DISABLE, NULL) &&
419 !acpi_check_handle(asus->handle, METHOD_PEGA_READ, NULL);
422 static int asus_pega_lucid_set(struct asus_laptop *asus, int unit, bool enable)
425 return write_acpi_int(asus->handle, method, unit);
428 static int pega_acc_axis(struct asus_laptop *asus, int curr, char *method)
433 acpi_evaluate_integer(asus->handle, method, NULL, &val);
451 struct asus_laptop *asus = dev_get_drvdata(parent);
457 if (!asus->pega_acc_live) {
458 asus->pega_acc_live = true;
466 asus->pega_acc_x = pega_acc_axis(asus, asus->pega_acc_x, METHOD_XLRX);
467 asus->pega_acc_y = pega_acc_axis(asus, asus->pega_acc_y, METHOD_XLRY);
468 asus->pega_acc_z = pega_acc_axis(asus, asus->pega_acc_z, METHOD_XLRZ);
473 input_report_abs(input, ABS_X, -asus->pega_acc_x);
474 input_report_abs(input, ABS_Y, -asus->pega_acc_y);
475 input_report_abs(input, ABS_Z, asus->pega_acc_z);
479 static void pega_accel_exit(struct asus_laptop *asus)
481 if (asus->pega_accel_poll) {
482 input_unregister_device(asus->pega_accel_poll);
483 asus->pega_accel_poll = NULL;
487 static int pega_accel_init(struct asus_laptop *asus)
492 if (!asus->is_pega_lucid)
495 if (acpi_check_handle(asus->handle, METHOD_XLRX, NULL) ||
496 acpi_check_handle(asus->handle, METHOD_XLRY, NULL) ||
497 acpi_check_handle(asus->handle, METHOD_XLRZ, NULL))
506 input->dev.parent = &asus->platform_device->dev;
528 asus->pega_accel_poll = input;
537 static int asus_led_set(struct asus_laptop *asus, const char *method,
547 return write_acpi_int(asus->handle, method, value);
558 struct asus_laptop *asus = led->asus;
561 queue_work(asus->led_workqueue, &led->work);
567 struct asus_laptop *asus = led->asus;
569 asus_led_set(asus, led->method, led->wk);
580 static int asus_kled_lvl(struct asus_laptop *asus)
592 rv = acpi_evaluate_integer(asus->handle, METHOD_KBD_LIGHT_GET,
601 static int asus_kled_set(struct asus_laptop *asus, int kblv)
608 if (write_acpi_int(asus->handle, METHOD_KBD_LIGHT_SET, kblv)) {
619 struct asus_laptop *asus = led->asus;
622 queue_work(asus->led_workqueue, &led->work);
628 struct asus_laptop *asus = led->asus;
630 asus_kled_set(asus, led->wk);
636 struct asus_laptop *asus = led->asus;
638 return asus_kled_lvl(asus);
641 static void asus_led_exit(struct asus_laptop *asus)
643 led_classdev_unregister(&asus->wled.led);
644 led_classdev_unregister(&asus->bled.led);
645 led_classdev_unregister(&asus->mled.led);
646 led_classdev_unregister(&asus->tled.led);
647 led_classdev_unregister(&asus->pled.led);
648 led_classdev_unregister(&asus->rled.led);
649 led_classdev_unregister(&asus->gled.led);
650 led_classdev_unregister(&asus->kled.led);
652 if (asus->led_workqueue) {
653 destroy_workqueue(asus->led_workqueue);
654 asus->led_workqueue = NULL;
659 static int asus_led_register(struct asus_laptop *asus,
665 if (!method || acpi_check_handle(asus->handle, method, NULL))
668 led->asus = asus;
676 return led_classdev_register(&asus->platform_device->dev, led_cdev);
679 static int asus_led_init(struct asus_laptop *asus)
687 if (asus->is_pega_lucid)
696 asus->led_workqueue = create_singlethread_workqueue("led_workqueue");
697 if (!asus->led_workqueue)
700 if (asus->wled_type == TYPE_LED)
701 r = asus_led_register(asus, &asus->wled, "asus::wlan",
705 if (asus->bled_type == TYPE_LED)
706 r = asus_led_register(asus, &asus->bled, "asus::bluetooth",
710 r = asus_led_register(asus, &asus->mled, "asus::mail", METHOD_MLED);
713 r = asus_led_register(asus, &asus->tled, "asus::touchpad", METHOD_TLED);
716 r = asus_led_register(asus, &asus->rled, "asus::record", METHOD_RLED);
719 r = asus_led_register(asus, &asus->pled, "asus::phone", METHOD_PLED);
722 r = asus_led_register(asus, &asus->gled, "asus::gaming", METHOD_GLED);
725 if (!acpi_check_handle(asus->handle, METHOD_KBD_LIGHT_SET, NULL) &&
726 !acpi_check_handle(asus->handle, METHOD_KBD_LIGHT_GET, NULL)) {
727 struct asus_led *led = &asus->kled;
730 led->asus = asus;
733 cdev->name = "asus::kbd_backlight";
737 r = led_classdev_register(&asus->platform_device->dev, cdev);
741 asus_led_exit(asus);
750 struct asus_laptop *asus = bl_get_data(bd);
754 rv = acpi_evaluate_integer(asus->handle, METHOD_BRIGHTNESS_GET,
766 struct asus_laptop *asus = bl_get_data(bd);
768 if (write_acpi_int(asus->handle, METHOD_BRIGHTNESS_SET, value)) {
787 static int asus_backlight_notify(struct asus_laptop *asus)
789 struct backlight_device *bd = asus->backlight_device;
797 static int asus_backlight_init(struct asus_laptop *asus)
802 if (acpi_check_handle(asus->handle, METHOD_BRIGHTNESS_GET, NULL) ||
803 acpi_check_handle(asus->handle, METHOD_BRIGHTNESS_SET, NULL))
811 &asus->platform_device->dev, asus,
814 pr_err("Could not register asus backlight device\n");
815 asus->backlight_device = NULL;
819 asus->backlight_device = bd;
826 static void asus_backlight_exit(struct asus_laptop *asus)
828 backlight_device_unregister(asus->backlight_device);
829 asus->backlight_device = NULL;
844 struct asus_laptop *asus = dev_get_drvdata(dev);
856 len += sprintf(page + len, "Model reference : %s\n", asus->name);
863 rv = acpi_evaluate_integer(asus->handle, "SFUN", NULL, &temp);
875 rv = acpi_evaluate_integer(asus->handle, "HWRS", NULL, &temp);
886 rv = acpi_evaluate_integer(asus->handle, "ASYM", NULL, &temp);
890 if (asus->dsdt_info) {
891 snprintf(buf, 16, "%d", asus->dsdt_info->length);
893 snprintf(buf, 16, "%d", asus->dsdt_info->checksum);
895 snprintf(buf, 16, "%d", asus->dsdt_info->revision);
897 snprintf(buf, 7, "%s", asus->dsdt_info->oem_id);
899 snprintf(buf, 9, "%s", asus->dsdt_info->oem_table_id);
901 snprintf(buf, 16, "%x", asus->dsdt_info->oem_revision);
903 snprintf(buf, 5, "%s", asus->dsdt_info->asl_compiler_id);
905 snprintf(buf, 16, "%x", asus->dsdt_info->asl_compiler_revision);
913 static ssize_t sysfs_acpi_set(struct asus_laptop *asus,
923 if (write_acpi_int(asus->handle, method, value))
934 struct asus_laptop *asus = dev_get_drvdata(dev);
936 return sprintf(buf, "0x%08x\n", asus->ledd_status);
942 struct asus_laptop *asus = dev_get_drvdata(dev);
949 if (write_acpi_int(asus->handle, METHOD_LEDD, value)) {
954 asus->ledd_status = (u32) value;
962 static int asus_wireless_status(struct asus_laptop *asus, int mask)
967 if (!asus->have_rsts)
968 return (asus->wireless_status & mask) ? 1 : 0;
970 rv = acpi_evaluate_integer(asus->handle, METHOD_WL_STATUS,
982 static int asus_wlan_set(struct asus_laptop *asus, int status)
984 if (write_acpi_int(asus->handle, METHOD_WLAN, !!status)) {
994 struct asus_laptop *asus = dev_get_drvdata(dev);
996 return sprintf(buf, "%d\n", asus_wireless_status(asus, WL_RSTS));
1002 struct asus_laptop *asus = dev_get_drvdata(dev);
1004 return sysfs_acpi_set(asus, buf, count, METHOD_WLAN);
1011 static int asus_bluetooth_set(struct asus_laptop *asus, int status)
1013 if (write_acpi_int(asus->handle, METHOD_BLUETOOTH, !!status)) {
1023 struct asus_laptop *asus = dev_get_drvdata(dev);
1025 return sprintf(buf, "%d\n", asus_wireless_status(asus, BT_RSTS));
1032 struct asus_laptop *asus = dev_get_drvdata(dev);
1034 return sysfs_acpi_set(asus, buf, count, METHOD_BLUETOOTH);
1041 static int asus_wimax_set(struct asus_laptop *asus, int status)
1043 if (write_acpi_int(asus->handle, METHOD_WIMAX, !!status)) {
1053 struct asus_laptop *asus = dev_get_drvdata(dev);
1055 return sprintf(buf, "%d\n", asus_wireless_status(asus, WM_RSTS));
1061 struct asus_laptop *asus = dev_get_drvdata(dev);
1063 return sysfs_acpi_set(asus, buf, count, METHOD_WIMAX);
1070 static int asus_wwan_set(struct asus_laptop *asus, int status)
1072 if (write_acpi_int(asus->handle, METHOD_WWAN, !!status)) {
1082 struct asus_laptop *asus = dev_get_drvdata(dev);
1084 return sprintf(buf, "%d\n", asus_wireless_status(asus, WW_RSTS));
1090 struct asus_laptop *asus = dev_get_drvdata(dev);
1092 return sysfs_acpi_set(asus, buf, count, METHOD_WWAN);
1099 static void asus_set_display(struct asus_laptop *asus, int value)
1102 if (write_acpi_int(asus->handle, METHOD_SWITCH_DISPLAY, value))
1117 struct asus_laptop *asus = dev_get_drvdata(dev);
1124 asus_set_display(asus, value);
1132 static void asus_als_switch(struct asus_laptop *asus, int value)
1136 if (asus->is_pega_lucid) {
1137 ret = asus_pega_lucid_set(asus, PEGA_ALS, value);
1139 ret = asus_pega_lucid_set(asus, PEGA_ALS_POWER, value);
1141 ret = write_acpi_int(asus->handle, METHOD_ALS_CONTROL, value);
1146 asus->light_switch = value;
1152 struct asus_laptop *asus = dev_get_drvdata(dev);
1154 return sprintf(buf, "%d\n", asus->light_switch);
1161 struct asus_laptop *asus = dev_get_drvdata(dev);
1168 asus_als_switch(asus, value ? 1 : 0);
1173 static void asus_als_level(struct asus_laptop *asus, int value)
1175 if (write_acpi_int(asus->handle, METHOD_ALS_LEVEL, value))
1177 asus->light_level = value;
1183 struct asus_laptop *asus = dev_get_drvdata(dev);
1185 return sprintf(buf, "%d\n", asus->light_level);
1191 struct asus_laptop *asus = dev_get_drvdata(dev);
1200 asus_als_level(asus, value);
1206 static int pega_int_read(struct asus_laptop *asus, int arg, int *result)
1209 int err = write_acpi_int_ret(asus->handle, METHOD_PEGA_READ, arg,
1224 struct asus_laptop *asus = dev_get_drvdata(dev);
1227 err = pega_int_read(asus, PEGA_READ_ALS_H, &hi);
1229 err = pega_int_read(asus, PEGA_READ_ALS_L, &lo);
1239 static int asus_gps_status(struct asus_laptop *asus)
1244 rv = acpi_evaluate_integer(asus->handle, METHOD_GPS_STATUS,
1253 static int asus_gps_switch(struct asus_laptop *asus, int status)
1257 if (write_acpi_int(asus->handle, meth, 0x02))
1265 struct asus_laptop *asus = dev_get_drvdata(dev);
1267 return sprintf(buf, "%d\n", asus_gps_status(asus));
1273 struct asus_laptop *asus = dev_get_drvdata(dev);
1280 ret = asus_gps_switch(asus, !!value);
1283 rfkill_set_sw_state(asus->gps.rfkill, !value);
1293 struct asus_laptop *asus = data;
1295 return asus_gps_switch(asus, !blocked);
1305 struct asus_laptop *asus = rfk->asus;
1308 return asus_wlan_set(asus, !blocked);
1310 return asus_bluetooth_set(asus, !blocked);
1312 return asus_wimax_set(asus, !blocked);
1314 return asus_wwan_set(asus, !blocked);
1333 static void asus_rfkill_exit(struct asus_laptop *asus)
1335 asus_rfkill_terminate(&asus->wwan);
1336 asus_rfkill_terminate(&asus->bluetooth);
1337 asus_rfkill_terminate(&asus->wlan);
1338 asus_rfkill_terminate(&asus->gps);
1341 static int asus_rfkill_setup(struct asus_laptop *asus, struct asus_rfkill *rfk,
1348 rfk->asus = asus;
1349 rfk->rfkill = rfkill_alloc(name, &asus->platform_device->dev,
1363 static int asus_rfkill_init(struct asus_laptop *asus)
1367 if (asus->is_pega_lucid)
1370 if (!acpi_check_handle(asus->handle, METHOD_GPS_ON, NULL) &&
1371 !acpi_check_handle(asus->handle, METHOD_GPS_OFF, NULL) &&
1372 !acpi_check_handle(asus->handle, METHOD_GPS_STATUS, NULL))
1373 result = asus_rfkill_setup(asus, &asus->gps, "asus-gps",
1380 if (!acpi_check_handle(asus->handle, METHOD_WLAN, NULL) &&
1381 asus->wled_type == TYPE_RFKILL)
1382 result = asus_rfkill_setup(asus, &asus->wlan, "asus-wlan",
1388 if (!acpi_check_handle(asus->handle, METHOD_BLUETOOTH, NULL) &&
1389 asus->bled_type == TYPE_RFKILL)
1390 result = asus_rfkill_setup(asus, &asus->bluetooth,
1391 "asus-bluetooth", BT_RSTS,
1397 if (!acpi_check_handle(asus->handle, METHOD_WWAN, NULL))
1398 result = asus_rfkill_setup(asus, &asus->wwan, "asus-wwan",
1404 if (!acpi_check_handle(asus->handle, METHOD_WIMAX, NULL))
1405 result = asus_rfkill_setup(asus, &asus->wimax, "asus-wimax",
1413 asus_rfkill_exit(asus);
1422 int ret = asus_pega_lucid_set(rfk->asus, rfk->control_id, !blocked);
1430 static int pega_rfkill_setup(struct asus_laptop *asus, struct asus_rfkill *rfk,
1433 return asus_rfkill_setup(asus, rfk, name, controlid, rfkill_type,
1437 static int pega_rfkill_init(struct asus_laptop *asus)
1441 if(!asus->is_pega_lucid)
1444 ret = pega_rfkill_setup(asus, &asus->wlan, "pega-wlan",
1449 ret = pega_rfkill_setup(asus, &asus->bluetooth, "pega-bt",
1454 ret = pega_rfkill_setup(asus, &asus->wwan, "pega-wwan",
1459 asus_rfkill_exit(asus);
1467 static void asus_input_notify(struct asus_laptop *asus, int event)
1469 if (!asus->inputdev)
1471 if (!sparse_keymap_report_event(asus->inputdev, event, 1, true))
1475 static int asus_input_init(struct asus_laptop *asus)
1487 input->dev.parent = &asus->platform_device->dev;
1500 asus->inputdev = input;
1508 static void asus_input_exit(struct asus_laptop *asus)
1510 if (asus->inputdev)
1511 input_unregister_device(asus->inputdev);
1512 asus->inputdev = NULL;
1520 struct asus_laptop *asus = acpi_driver_data(device);
1524 count = asus->event_count[event % 128]++;
1525 acpi_bus_generate_netlink_event(asus->device->pnp.device_class,
1526 dev_name(&asus->device->dev), event,
1537 if (asus->backlight_device != NULL) {
1539 asus_backlight_notify(asus);
1545 if (asus->pega_accel_poll && event == 0xEA) {
1546 kobject_uevent(&asus->pega_accel_poll->dev.kobj, KOBJ_CHANGE);
1550 asus_input_notify(asus, event);
1573 struct asus_laptop *asus = dev_get_drvdata(dev);
1574 acpi_handle handle = asus->handle;
1577 if (asus->is_pega_lucid) {
1601 !acpi_check_handle(asus->handle, METHOD_WIMAX, NULL);
1604 supported = !acpi_check_handle(asus->handle, METHOD_WWAN, NULL);
1614 supported = asus->is_pega_lucid;
1632 static int asus_platform_init(struct asus_laptop *asus)
1636 asus->platform_device = platform_device_alloc(ASUS_LAPTOP_FILE, -1);
1637 if (!asus->platform_device)
1639 platform_set_drvdata(asus->platform_device, asus);
1641 result = platform_device_add(asus->platform_device);
1645 result = sysfs_create_group(&asus->platform_device->dev.kobj,
1653 platform_device_del(asus->platform_device);
1655 platform_device_put(asus->platform_device);
1659 static void asus_platform_exit(struct asus_laptop *asus)
1661 sysfs_remove_group(&asus->platform_device->dev.kobj, &asus_attr_group);
1662 platform_device_unregister(asus->platform_device);
1676 static int asus_laptop_get_info(struct asus_laptop *asus)
1691 status = acpi_get_table(ACPI_SIG_DSDT, 1, &asus->dsdt_info);
1696 if (write_acpi_int_ret(asus->handle, "INIT", 0, &buffer)) {
1703 acpi_evaluate_integer(asus->handle, "BSTS", NULL, &bsts_result);
1711 if (write_acpi_int(asus->handle, "CWAP", wapf))
1733 asus->name = kstrdup(string, GFP_KERNEL);
1734 if (!asus->name) {
1742 if (!acpi_check_handle(asus->handle, METHOD_WL_STATUS, NULL))
1743 asus->have_rsts = true;
1750 static int asus_acpi_init(struct asus_laptop *asus)
1754 result = acpi_bus_get_status(asus->device);
1757 if (!asus->device->status.present) {
1762 result = asus_laptop_get_info(asus);
1767 asus->bled_type = TYPE_LED;
1769 asus->bled_type = TYPE_RFKILL;
1772 asus->wled_type = TYPE_LED;
1774 asus->wled_type = TYPE_RFKILL;
1777 asus_bluetooth_set(asus, !!bluetooth_status);
1780 asus_wlan_set(asus, !!wlan_status);
1783 asus_wimax_set(asus, !!wimax_status);
1786 asus_wwan_set(asus, !!wwan_status);
1789 if (!acpi_check_handle(asus->handle, METHOD_KBD_LIGHT_SET, NULL))
1790 asus_kled_set(asus, 1);
1793 asus->ledd_status = 0xFFF;
1796 asus->light_switch = !!als_status;
1797 asus->light_level = 5; /* level 5 for sensor sensitivity */
1799 if (asus->is_pega_lucid) {
1800 asus_als_switch(asus, asus->light_switch);
1801 } else if (!acpi_check_handle(asus->handle, METHOD_ALS_CONTROL, NULL) &&
1802 !acpi_check_handle(asus->handle, METHOD_ALS_LEVEL, NULL)) {
1803 asus_als_switch(asus, asus->light_switch);
1804 asus_als_level(asus, asus->light_level);
1828 struct asus_laptop *asus;
1833 asus = kzalloc(sizeof(struct asus_laptop), GFP_KERNEL);
1834 if (!asus)
1836 asus->handle = device->handle;
1839 device->driver_data = asus;
1840 asus->device = device;
1844 result = asus_acpi_init(asus);
1852 asus->is_pega_lucid = asus_check_pega_lucid(asus);
1853 result = asus_platform_init(asus);
1858 result = asus_backlight_init(asus);
1863 result = asus_input_init(asus);
1867 result = asus_led_init(asus);
1871 result = asus_rfkill_init(asus);
1875 result = pega_accel_init(asus);
1879 result = pega_rfkill_init(asus);
1887 pega_accel_exit(asus);
1889 asus_rfkill_exit(asus);
1891 asus_led_exit(asus);
1893 asus_input_exit(asus);
1895 asus_backlight_exit(asus);
1897 asus_platform_exit(asus);
1899 kfree(asus);
1906 struct asus_laptop *asus = acpi_driver_data(device);
1908 asus_backlight_exit(asus);
1909 asus_rfkill_exit(asus);
1910 asus_led_exit(asus);
1911 asus_input_exit(asus);
1912 pega_accel_exit(asus);
1913 asus_platform_exit(asus);
1915 kfree(asus->name);
1916 kfree(asus);