static int __init dell_wmi_init(void) { int err; acpi_status status; if (!wmi_has_guid(DELL_EVENT_GUID)) { printk(KERN_WARNING "dell-wmi: No known WMI GUID found\n"); return -ENODEV; } dmi_walk(find_hk_type, NULL); acpi_video = acpi_video_backlight_support(); err = dell_wmi_input_setup(); if (err) return err; status = wmi_install_notify_handler(DELL_EVENT_GUID, dell_wmi_notify, NULL); if (ACPI_FAILURE(status)) { input_unregister_device(dell_wmi_input_dev); printk(KERN_ERR "dell-wmi: Unable to register notify handler - %d\n", status); return -ENODEV; } return 0; }
static int __init dell_wmi_init(void) { int err; if (wmi_has_guid(DELL_EVENT_GUID)) { dmi_walk(find_hk_type, NULL); err = dell_wmi_input_setup(); if (err) return err; err = wmi_install_notify_handler(DELL_EVENT_GUID, dell_wmi_notify, NULL); if (err) { input_unregister_device(dell_wmi_input_dev); printk(KERN_ERR "dell-wmi: Unable to register" " notify handler - %d\n", err); return err; } acpi_video = acpi_video_backlight_support(); } else printk(KERN_WARNING "dell-wmi: No known WMI GUID found\n"); return 0; }
static void msi_wmi_notify(u32 value, void *context) { struct acpi_buffer response = { ACPI_ALLOCATE_BUFFER, NULL }; static struct key_entry *key; union acpi_object *obj; ktime_t cur; acpi_status status; status = wmi_get_event_data(value, &response); if (status != AE_OK) { printk(KERN_INFO DRV_PFX "bad event status 0x%x\n", status); return; } obj = (union acpi_object *)response.pointer; if (obj && obj->type == ACPI_TYPE_INTEGER) { int eventcode = obj->integer.value; dprintk("Eventcode: 0x%x\n", eventcode); key = sparse_keymap_entry_from_scancode(msi_wmi_input_dev, eventcode); if (key) { ktime_t diff; cur = ktime_get_real(); diff = ktime_sub(cur, last_pressed[key->code - KEYCODE_BASE]); /* Ignore event if the same event happened in a 50 ms timeframe -> Key press may result in 10-20 GPEs */ if (ktime_to_us(diff) < 1000 * 50) { dprintk("Suppressed key event 0x%X - " "Last press was %lld us ago\n", key->code, ktime_to_us(diff)); return; } last_pressed[key->code - KEYCODE_BASE] = cur; if (key->type == KE_KEY && /* Brightness is served via acpi video driver */ (!acpi_video_backlight_support() || (key->code != MSI_WMI_BRIGHTNESSUP && key->code != MSI_WMI_BRIGHTNESSDOWN))) { dprintk("Send key: 0x%X - " "Input layer keycode: %d\n", key->code, key->keycode); sparse_keymap_report_entry(msi_wmi_input_dev, key, 1, true); } } else printk(KERN_INFO "Unknown key pressed - %x\n", eventcode); } else printk(KERN_INFO DRV_PFX "Unknown event received\n"); kfree(response.pointer); }
static int __init msi_wmi_init(void) { int err; if (!wmi_has_guid(MSIWMI_EVENT_GUID)) { pr_err("This machine doesn't have MSI-hotkeys through WMI\n"); return -ENODEV; } err = wmi_install_notify_handler(MSIWMI_EVENT_GUID, msi_wmi_notify, NULL); if (ACPI_FAILURE(err)) return -EINVAL; err = msi_wmi_input_setup(); if (err) goto err_uninstall_notifier; if (!acpi_video_backlight_support()) { struct backlight_properties props; memset(&props, 0, sizeof(struct backlight_properties)); props.type = BACKLIGHT_PLATFORM; props.max_brightness = ARRAY_SIZE(backlight_map) - 1; backlight = backlight_device_register(DRV_NAME, NULL, NULL, &msi_backlight_ops, &props); if (IS_ERR(backlight)) { err = PTR_ERR(backlight); goto err_free_input; } err = bl_get(NULL); if (err < 0) goto err_free_backlight; backlight->props.brightness = err; } pr_debug("Event handler installed\n"); return 0; err_free_backlight: backlight_device_unregister(backlight); err_free_input: sparse_keymap_free(msi_wmi_input_dev); input_unregister_device(msi_wmi_input_dev); err_uninstall_notifier: wmi_remove_notify_handler(MSIWMI_EVENT_GUID); return err; }
static int __init msi_wmi_init(void) { int err; if (!wmi_has_guid(MSIWMI_EVENT_GUID)) { printk(KERN_ERR "This machine doesn't have MSI-hotkeys through WMI\n"); return -ENODEV; } err = wmi_install_notify_handler(MSIWMI_EVENT_GUID, msi_wmi_notify, NULL); if (err) return -EINVAL; err = msi_wmi_input_setup(); if (err) goto err_uninstall_notifier; if (!acpi_video_backlight_support()) { backlight = backlight_device_register(DRV_NAME, NULL, NULL, &msi_backlight_ops); if (IS_ERR(backlight)) goto err_free_input; backlight->props.max_brightness = ARRAY_SIZE(backlight_map) - 1; err = bl_get(NULL); if (err < 0) goto err_free_backlight; backlight->props.brightness = err; } dprintk("Event handler installed\n"); return 0; err_free_backlight: backlight_device_unregister(backlight); err_free_input: input_unregister_device(msi_wmi_input_dev); err_uninstall_notifier: wmi_remove_notify_handler(MSIWMI_EVENT_GUID); return err; }
int nouveau_backlight_init(struct drm_connector *connector) { struct drm_device *dev = connector->dev; struct drm_nouveau_private *dev_priv = dev->dev_private; #ifdef CONFIG_ACPI if (acpi_video_backlight_support()) { NV_INFO(dev, "ACPI backlight interface available, " "not registering our own\n"); return 0; } #endif switch (dev_priv->card_type) { case NV_40: return nouveau_nv40_backlight_init(connector); case NV_50: return nouveau_nv50_backlight_init(connector); default: break; } return 0; }
static int __init lenovo_sl_laptop_init(void) { int ret; acpi_status status; #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,28) if (!acpi_video_backlight_support()) control_backlight = 1; #endif hkey_handle = ec0_handle = NULL; if (acpi_disabled) return -ENODEV; lensl_wq = create_singlethread_workqueue(LENSL_WORKQUEUE_NAME); if (!lensl_wq) { vdbg_printk(LENSL_ERR, "Failed to create a workqueue\n"); return -ENOMEM; } status = acpi_get_handle(NULL, LENSL_HKEY, &hkey_handle); if (ACPI_FAILURE(status)) { vdbg_printk(LENSL_ERR, "Failed to get ACPI handle for %s\n", LENSL_HKEY); return -ENODEV; } status = acpi_get_handle(NULL, LENSL_EC0, &ec0_handle); if (ACPI_FAILURE(status)) { vdbg_printk(LENSL_ERR, "Failed to get ACPI handle for %s\n", LENSL_EC0); return -ENODEV; } lensl_pdev = platform_device_register_simple(LENSL_DRVR_NAME, -1, NULL, 0); if (IS_ERR(lensl_pdev)) { ret = PTR_ERR(lensl_pdev); lensl_pdev = NULL; vdbg_printk(LENSL_ERR, "Failed to register platform device\n"); return ret; } ret = hkey_inputdev_init(); if (ret) return -ENODEV; bluetooth_init(); if (control_backlight) backlight_init(); led_init(); mutex_init(&hkey_poll_mutex); hkey_poll_start(); hwmon_init(); if (debug_ec) lenovo_sl_procfs_init(); vdbg_printk(LENSL_INFO, "Loaded Lenovo ThinkPad SL Series driver\n"); return 0; }
/* For the ACPI video driver use only. */ bool acpi_video_verify_backlight_support(void) { return (acpi_video_support & ACPI_VIDEO_SKIP_BACKLIGHT) ? false : acpi_video_backlight_support(); }
static int __init msi_init(void) { int ret; if (acpi_disabled) return -ENODEV; if (force || dmi_check_system(msi_dmi_table)) old_ec_model = 1; if (!old_ec_model) get_threeg_exists(); if (!old_ec_model && dmi_check_system(msi_load_scm_models_dmi_table)) load_scm_model = 1; if (auto_brightness < 0 || auto_brightness > 2) return -EINVAL; /* Register backlight stuff */ if (acpi_video_backlight_support()) { printk(KERN_INFO "MSI: Brightness ignored, must be controlled " "by ACPI video driver\n"); } else { struct backlight_properties props; memset(&props, 0, sizeof(struct backlight_properties)); props.max_brightness = MSI_LCD_LEVEL_MAX - 1; msibl_device = backlight_device_register("msi-laptop-bl", NULL, NULL, &msibl_ops, &props); if (IS_ERR(msibl_device)) return PTR_ERR(msibl_device); } ret = platform_driver_register(&msipf_driver); if (ret) goto fail_backlight; /* Register platform stuff */ msipf_device = platform_device_alloc("msi-laptop-pf", -1); if (!msipf_device) { ret = -ENOMEM; goto fail_platform_driver; } ret = platform_device_add(msipf_device); if (ret) goto fail_platform_device1; if (load_scm_model && (load_scm_model_init(msipf_device) < 0)) { ret = -EINVAL; goto fail_platform_device1; } ret = sysfs_create_group(&msipf_device->dev.kobj, &msipf_attribute_group); if (ret) goto fail_platform_device2; if (!old_ec_model) { if (threeg_exists) ret = device_create_file(&msipf_device->dev, &dev_attr_threeg); if (ret) goto fail_platform_device2; } /* Disable automatic brightness control by default because * this module was probably loaded to do brightness control in * software. */ if (auto_brightness != 2) set_auto_brightness(auto_brightness); printk(KERN_INFO "msi-laptop: driver "MSI_DRIVER_VERSION" successfully loaded.\n"); return 0; fail_platform_device2: platform_device_del(msipf_device); fail_platform_device1: platform_device_put(msipf_device); fail_platform_driver: platform_driver_unregister(&msipf_driver); fail_backlight: backlight_device_unregister(msibl_device); return ret; }
static int __devinit asus_acpi_add(struct acpi_device *device) { struct asus_laptop *asus; int result; pr_notice("Asus Laptop Support version %s\n", ASUS_LAPTOP_VERSION); asus = kzalloc(sizeof(struct asus_laptop), GFP_KERNEL); if (!asus) return -ENOMEM; asus->handle = device->handle; strcpy(acpi_device_name(device), ASUS_LAPTOP_DEVICE_NAME); strcpy(acpi_device_class(device), ASUS_LAPTOP_CLASS); device->driver_data = asus; asus->device = device; result = asus_acpi_init(asus); if (result) goto fail_platform; /* * Register the platform device first. It is used as a parent for the * sub-devices below. */ result = asus_platform_init(asus); if (result) goto fail_platform; if (!acpi_video_backlight_support()) { result = asus_backlight_init(asus); if (result) goto fail_backlight; } else pr_info("Backlight controlled by ACPI video driver\n"); result = asus_input_init(asus); if (result) goto fail_input; result = asus_led_init(asus); if (result) goto fail_led; result = asus_rfkill_init(asus); if (result) goto fail_rfkill; asus_device_present = true; return 0; fail_rfkill: asus_led_exit(asus); fail_led: asus_input_exit(asus); fail_input: asus_backlight_exit(asus); fail_backlight: asus_platform_exit(asus); fail_platform: kfree(asus->name); kfree(asus); return result; }
static int __init oaktrail_init(void) { int ret; if (acpi_disabled) { pr_err("ACPI needs to be enabled for this driver to work!\n"); return -ENODEV; } if (!force && !dmi_check_system(oaktrail_dmi_table)) { pr_err("Platform not recognized (You could try the module's force-parameter)"); return -ENODEV; } ret = platform_driver_register(&oaktrail_driver); if (ret) { pr_warning("Unable to register platform driver\n"); goto err_driver_reg; } oaktrail_device = platform_device_alloc(DRIVER_NAME, -1); if (!oaktrail_device) { pr_warning("Unable to allocate platform device\n"); ret = -ENOMEM; goto err_device_alloc; } ret = platform_device_add(oaktrail_device); if (ret) { pr_warning("Unable to add platform device\n"); goto err_device_add; } if (!acpi_video_backlight_support()) { ret = oaktrail_backlight_init(); if (ret) goto err_backlight; } else pr_info("Backlight controlled by ACPI video driver\n"); ret = oaktrail_rfkill_init(); if (ret) { pr_warning("Setup rfkill failed\n"); goto err_rfkill; } pr_info("Driver "DRIVER_VERSION" successfully loaded\n"); return 0; err_rfkill: oaktrail_backlight_exit(); err_backlight: platform_device_del(oaktrail_device); err_device_add: platform_device_put(oaktrail_device); err_device_alloc: platform_driver_unregister(&oaktrail_driver); err_driver_reg: return ret; }
static int __devinit asus_acpi_add(struct acpi_device *device) { struct asus_laptop *asus; int result; pr_notice("Asus Laptop Support version %s\n", ASUS_LAPTOP_VERSION); asus = kzalloc(sizeof(struct asus_laptop), GFP_KERNEL); if (!asus) return -ENOMEM; asus->handle = device->handle; strcpy(acpi_device_name(device), ASUS_LAPTOP_DEVICE_NAME); strcpy(acpi_device_class(device), ASUS_LAPTOP_CLASS); device->driver_data = asus; asus->device = device; asus_dmi_check(); result = asus_acpi_init(asus); if (result) goto fail_platform; asus->is_pega_lucid = asus_check_pega_lucid(asus); result = asus_platform_init(asus); if (result) goto fail_platform; if (!acpi_video_backlight_support()) { result = asus_backlight_init(asus); if (result) goto fail_backlight; } else pr_info("Backlight controlled by ACPI video driver\n"); result = asus_input_init(asus); if (result) goto fail_input; result = asus_led_init(asus); if (result) goto fail_led; result = asus_rfkill_init(asus); if (result && result != -ENODEV) goto fail_rfkill; result = pega_accel_init(asus); if (result && result != -ENODEV) goto fail_pega_accel; result = pega_rfkill_init(asus); if (result && result != -ENODEV) goto fail_pega_rfkill; asus_device_present = true; return 0; fail_pega_rfkill: pega_accel_exit(asus); fail_pega_accel: asus_rfkill_exit(asus); fail_rfkill: asus_led_exit(asus); fail_led: asus_input_exit(asus); fail_input: asus_backlight_exit(asus); fail_backlight: asus_platform_exit(asus); fail_platform: kfree(asus->name); kfree(asus); return result; }
static int __init compal_init(void) { int ret; if (acpi_disabled) return -ENODEV; if (!force && !dmi_check_system(compal_dmi_table)) return -ENODEV; if (!acpi_video_backlight_support()) { compalbl_device = backlight_device_register("compal-laptop", NULL, NULL, &compalbl_ops); if (IS_ERR(compalbl_device)) return PTR_ERR(compalbl_device); compalbl_device->props.max_brightness = COMPAL_LCD_LEVEL_MAX-1; } ret = platform_driver_register(&compal_driver); if (ret) goto fail_backlight; compal_device = platform_device_alloc("compal-laptop", -1); if (!compal_device) { ret = -ENOMEM; goto fail_platform_driver; } ret = platform_device_add(compal_device); if (ret) goto fail_platform_device1; ret = sysfs_create_group(&compal_device->dev.kobj, &compal_attribute_group); if (ret) goto fail_platform_device2; printk(KERN_INFO "compal-laptop: driver "COMPAL_DRIVER_VERSION " successfully loaded.\n"); return 0; fail_platform_device2: platform_device_del(compal_device); fail_platform_device1: platform_device_put(compal_device); fail_platform_driver: platform_driver_unregister(&compal_driver); fail_backlight: backlight_device_unregister(compalbl_device); return ret; }
static int __init msi_init(void) { int ret; if (acpi_disabled) return -ENODEV; dmi_check_system(msi_dmi_table); if (!quirks) /* quirks may be NULL if no match in DMI table */ quirks = &quirk_load_scm_model; if (force) quirks = &quirk_old_ec_model; if (!quirks->old_ec_model) get_threeg_exists(); if (auto_brightness < 0 || auto_brightness > 2) return -EINVAL; /* Register backlight stuff */ if (!quirks->old_ec_model || acpi_video_backlight_support()) { pr_info("Brightness ignored, must be controlled by ACPI video driver\n"); } else { struct backlight_properties props; memset(&props, 0, sizeof(struct backlight_properties)); props.type = BACKLIGHT_PLATFORM; props.max_brightness = MSI_LCD_LEVEL_MAX - 1; msibl_device = backlight_device_register("msi-laptop-bl", NULL, NULL, &msibl_ops, &props); if (IS_ERR(msibl_device)) return PTR_ERR(msibl_device); } ret = platform_driver_register(&msipf_driver); if (ret) goto fail_backlight; /* Register platform stuff */ msipf_device = platform_device_alloc("msi-laptop-pf", -1); if (!msipf_device) { ret = -ENOMEM; goto fail_platform_driver; } ret = platform_device_add(msipf_device); if (ret) goto fail_platform_device1; if (quirks->load_scm_model && (load_scm_model_init(msipf_device) < 0)) { ret = -EINVAL; goto fail_platform_device1; } ret = sysfs_create_group(&msipf_device->dev.kobj, &msipf_attribute_group); if (ret) goto fail_platform_device2; if (!quirks->old_ec_model) { if (threeg_exists) ret = device_create_file(&msipf_device->dev, &dev_attr_threeg); if (ret) goto fail_platform_device2; } else { ret = sysfs_create_group(&msipf_device->dev.kobj, &msipf_old_attribute_group); if (ret) goto fail_platform_device2; /* Disable automatic brightness control by default because * this module was probably loaded to do brightness control in * software. */ if (auto_brightness != 2) set_auto_brightness(auto_brightness); } pr_info("driver " MSI_DRIVER_VERSION " successfully loaded\n"); return 0; fail_platform_device2: if (quirks->load_scm_model) { i8042_remove_filter(msi_laptop_i8042_filter); cancel_delayed_work_sync(&msi_rfkill_dwork); cancel_work_sync(&msi_rfkill_work); rfkill_cleanup(); } platform_device_del(msipf_device); fail_platform_device1: platform_device_put(msipf_device); fail_platform_driver: platform_driver_unregister(&msipf_driver); fail_backlight: backlight_device_unregister(msibl_device); return ret; }