Loading Documentation/thinkpad-acpi.txt +108 −8 Original line number Diff line number Diff line ThinkPad ACPI Extras Driver Version 0.17 October 04th, 2007 Version 0.19 January 06th, 2008 Borislav Deianov <borislav@users.sf.net> Henrique de Moraes Holschuh <hmh@hmh.eng.br> Loading Loading @@ -215,6 +215,11 @@ The following commands can be written to the /proc/acpi/ibm/hotkey file: ... any other 8-hex-digit mask ... echo reset > /proc/acpi/ibm/hotkey -- restore the original mask The procfs interface does not support NVRAM polling control. So as to maintain maximum bug-to-bug compatibility, it does not report any masks, nor does it allow one to manipulate the hot key mask when the firmware does not support masks at all, even if NVRAM polling is in use. sysfs notes: hotkey_bios_enabled: Loading @@ -231,17 +236,26 @@ sysfs notes: to this value. hotkey_enable: Enables/disables the hot keys feature, and reports current status of the hot keys feature. Enables/disables the hot keys feature in the ACPI firmware, and reports current status of the hot keys feature. Has no effect on the NVRAM hot key polling functionality. 0: disables the hot keys feature / feature disabled 1: enables the hot keys feature / feature enabled hotkey_mask: bit mask to enable driver-handling and ACPI event generation for each hot key (see above). Returns the current status of the hot keys mask, and allows one to modify it. bit mask to enable driver-handling (and depending on the firmware, ACPI event generation) for each hot key (see above). Returns the current status of the hot keys mask, and allows one to modify it. Note: when NVRAM polling is active, the firmware mask will be different from the value returned by hotkey_mask. The driver will retain enabled bits for hotkeys that are under NVRAM polling even if the firmware refuses them, and will not set these bits on the firmware hot key mask. hotkey_all_mask: bit mask that should enable event reporting for all Loading @@ -257,12 +271,48 @@ sysfs notes: handled by the firmware anyway. Echo it to hotkey_mask above, to use. hotkey_source_mask: bit mask that selects which hot keys will the driver poll the NVRAM for. This is auto-detected by the driver based on the capabilities reported by the ACPI firmware, but it can be overridden at runtime. Hot keys whose bits are set in both hotkey_source_mask and also on hotkey_mask are polled for in NVRAM. Only a few hot keys are available through CMOS NVRAM polling. Warning: when in NVRAM mode, the volume up/down/mute keys are synthesized according to changes in the mixer, so you have to use volume up or volume down to unmute, as per the ThinkPad volume mixer user interface. When in ACPI event mode, volume up/down/mute are reported as separate events, but this behaviour may be corrected in future releases of this driver, in which case the ThinkPad volume mixer user interface semanthics will be enforced. hotkey_poll_freq: frequency in Hz for hot key polling. It must be between 0 and 25 Hz. Polling is only carried out when strictly needed. Setting hotkey_poll_freq to zero disables polling, and will cause hot key presses that require NVRAM polling to never be reported. Setting hotkey_poll_freq too low will cause repeated pressings of the same hot key to be misreported as a single key press, or to not even be detected at all. The recommended polling frequency is 10Hz. hotkey_radio_sw: if the ThinkPad has a hardware radio switch, this attribute will read 0 if the switch is in the "radios disabled" postition, and 1 if the switch is in the "radios enabled" position. This attribute has poll()/select() support. hotkey_report_mode: Returns the state of the procfs ACPI event report mode filter for hot keys. If it is set to 1 (the default), Loading @@ -277,6 +327,25 @@ sysfs notes: May return -EPERM (write access locked out by module parameter) or -EACCES (read-only). wakeup_reason: Set to 1 if the system is waking up because the user requested a bay ejection. Set to 2 if the system is waking up because the user requested the system to undock. Set to zero for normal wake-ups or wake-ups due to unknown reasons. This attribute has poll()/select() support. wakeup_hotunplug_complete: Set to 1 if the system was waken up because of an undock or bay ejection request, and that request was sucessfully completed. At this point, it might be useful to send the system back to sleep, at the user's choice. Refer to HKEY events 0x4003 and 0x3003, below. This attribute has poll()/select() support. input layer notes: A Hot key is mapped to a single input layer EV_KEY event, possibly Loading Loading @@ -427,6 +496,23 @@ Non hot-key ACPI HKEY event map: The above events are not propagated by the driver, except for legacy compatibility purposes when hotkey_report_mode is set to 1. 0x2304 System is waking up from suspend to undock 0x2305 System is waking up from suspend to eject bay 0x2404 System is waking up from hibernation to undock 0x2405 System is waking up from hibernation to eject bay The above events are never propagated by the driver. 0x3003 Bay ejection (see 0x2x05) complete, can sleep again 0x4003 Undocked (see 0x2x04), can sleep again 0x5009 Tablet swivel: switched to tablet mode 0x500A Tablet swivel: switched to normal mode 0x500B Tablet pen insterted into its storage bay 0x500C Tablet pen removed from its storage bay 0x5010 Brightness level changed (newer Lenovo BIOSes) The above events are propagated by the driver. Compatibility notes: ibm-acpi and thinkpad-acpi 0.15 (mainline kernels before 2.6.23) never Loading Loading @@ -1263,3 +1349,17 @@ Sysfs interface changelog: and the hwmon class for libsensors4 (lm-sensors 3) compatibility. Moved all hwmon attributes to this new platform device. 0x020100: Marker for thinkpad-acpi with hot key NVRAM polling support. If you must, use it to know you should not start an userspace NVRAM poller (allows to detect when NVRAM is compiled out by the user because it is unneeded/undesired in the first place). 0x020101: Marker for thinkpad-acpi with hot key NVRAM polling and proper hotkey_mask semanthics (version 8 of the NVRAM polling patch). Some development snapshots of 0.18 had an earlier version that did strange things to hotkey_mask. 0x020200: Add poll()/select() support to the following attributes: hotkey_radio_sw, wakeup_hotunplug_complete, wakeup_reason drivers/acpi/asus_acpi.c +45 −10 Original line number Diff line number Diff line Loading @@ -142,6 +142,7 @@ struct asus_hotk { xxN, //M2400N, M3700N, M5200N, M6800N, S1300N, S5200N A4S, //Z81sp //(Centrino) F3Sa, END_MODEL } model; //Models currently supported u16 event_count[128]; //count for each event TODO make this better Loading Loading @@ -405,7 +406,20 @@ static struct model_data model_conf[END_MODEL] = { .brightness_get = "GPLV", .mt_bt_switch = "BLED", .mt_wled = "WLED" } }, { .name = "F3Sa", .mt_bt_switch = "BLED", .mt_wled = "WLED", .mt_mled = "MLED", .brightness_get = "GPLV", .brightness_set = "SPLV", .mt_lcd_switch = "\\_SB.PCI0.SBRG.EC0._Q10", .lcd_status = "\\_SB.PCI0.SBRG.EC0.RPIN", .display_get = "\\ADVG", .display_set = "SDSP", }, }; Loading Loading @@ -710,15 +724,8 @@ static int get_lcd_state(void) { int lcd = 0; if (hotk->model != L3H) { /* We don't have to check anything if we are here */ if (!read_acpi_int(NULL, hotk->methods->lcd_status, &lcd)) printk(KERN_WARNING "Asus ACPI: Error reading LCD status\n"); if (hotk->model == L2D) lcd = ~lcd; } else { /* L3H and the like have to be handled differently */ if (hotk->model == L3H) { /* L3H and the like have to be handled differently */ acpi_status status = 0; struct acpi_object_list input; union acpi_object mt_params[2]; Loading @@ -745,6 +752,32 @@ static int get_lcd_state(void) if (out_obj.type == ACPI_TYPE_INTEGER) /* That's what the AML code does */ lcd = out_obj.integer.value >> 8; } else if (hotk->model == F3Sa) { unsigned long tmp; union acpi_object param; struct acpi_object_list input; acpi_status status; /* Read pin 11 */ param.type = ACPI_TYPE_INTEGER; param.integer.value = 0x11; input.count = 1; input.pointer = ¶m; status = acpi_evaluate_integer(NULL, hotk->methods->lcd_status, &input, &tmp); if (status != AE_OK) return -1; lcd = tmp; } else { /* We don't have to check anything if we are here */ if (!read_acpi_int(NULL, hotk->methods->lcd_status, &lcd)) printk(KERN_WARNING "Asus ACPI: Error reading LCD status\n"); if (hotk->model == L2D) lcd = ~lcd; } return (lcd & 1); Loading Loading @@ -1134,6 +1167,8 @@ static int asus_model_match(char *model) return W5A; else if (strncmp(model, "A4S", 3) == 0) return A4S; else if (strncmp(model, "F3Sa", 4) == 0) return F3Sa; else return END_MODEL; } Loading drivers/misc/Kconfig +19 −0 Original line number Diff line number Diff line Loading @@ -219,6 +219,25 @@ config THINKPAD_ACPI_BAY If you are not sure, say Y here. config THINKPAD_ACPI_HOTKEY_POLL bool "Suport NVRAM polling for hot keys" depends on THINKPAD_ACPI default y ---help--- Some thinkpad models benefit from NVRAM polling to detect a few of the hot key press events. If you know your ThinkPad model does not need to do NVRAM polling to support any of the hot keys you use, unselecting this option will save about 1kB of memory. ThinkPads T40 and newer, R52 and newer, and X31 and newer are unlikely to need NVRAM polling in their latest BIOS versions. NVRAM polling can detect at most the following keys: ThinkPad/Access IBM, Zoom, Switch Display (fn+F7), ThinkLight, Volume up/down/mute, Brightness up/down, Display Expand (fn+F8), Hibernate (fn+F12). If you are not sure, say Y here. The driver enables polling only if it is strictly necessary to do so. config ATMEL_SSC tristate "Device driver for Atmel SSC peripheral" Loading drivers/misc/asus-laptop.c +16 −10 Original line number Diff line number Diff line Loading @@ -254,7 +254,7 @@ ASUS_LED(gled, "gaming"); * method is searched within the scope of the handle, can be NULL. The output * of the method is written is output, which can also be NULL * * returns 1 if write is successful, 0 else. * returns 0 if write is successful, -1 else. */ static int write_acpi_int(acpi_handle handle, const char *method, int val, struct acpi_buffer *output) Loading @@ -263,13 +263,19 @@ static int write_acpi_int(acpi_handle handle, const char *method, int val, union acpi_object in_obj; //the only param we use acpi_status status; if (!handle) return 0; params.count = 1; params.pointer = &in_obj; in_obj.type = ACPI_TYPE_INTEGER; in_obj.integer.value = val; status = acpi_evaluate_object(handle, (char *)method, ¶ms, output); return (status == AE_OK); if (status == AE_OK) return 0; else return -1; } static int read_wireless_status(int mask) Loading Loading @@ -321,7 +327,7 @@ static void write_status(acpi_handle handle, int out, int mask) switch (mask) { case MLED_ON: out = !out & 0x1; out = !(out & 0x1); break; case GLED_ON: out = (out & 0x1) + 1; Loading @@ -335,7 +341,7 @@ static void write_status(acpi_handle handle, int out, int mask) break; } if (handle && !write_acpi_int(handle, NULL, out, NULL)) if (write_acpi_int(handle, NULL, out, NULL)) printk(ASUS_WARNING " write failed %x\n", mask); } Loading Loading @@ -415,7 +421,7 @@ static int set_brightness(struct backlight_device *bd, int value) value = (0 < value) ? ((15 < value) ? 15 : value) : 0; /* 0 <= value <= 15 */ if (!write_acpi_int(brightness_set_handle, NULL, value, NULL)) { if (write_acpi_int(brightness_set_handle, NULL, value, NULL)) { printk(ASUS_WARNING "Error changing brightness\n"); ret = -EIO; } Loading Loading @@ -545,7 +551,7 @@ static ssize_t store_ledd(struct device *dev, struct device_attribute *attr, rv = parse_arg(buf, count, &value); if (rv > 0) { if (!write_acpi_int(ledd_set_handle, NULL, value, NULL)) if (write_acpi_int(ledd_set_handle, NULL, value, NULL)) printk(ASUS_WARNING "LED display write failed\n"); else hotk->ledd_status = (u32) value; Loading Loading @@ -590,7 +596,7 @@ static ssize_t store_bluetooth(struct device *dev, static void set_display(int value) { /* no sanity check needed for now */ if (!write_acpi_int(display_set_handle, NULL, value, NULL)) if (write_acpi_int(display_set_handle, NULL, value, NULL)) printk(ASUS_WARNING "Error setting display\n"); return; } Loading Loading @@ -647,7 +653,7 @@ static ssize_t store_disp(struct device *dev, struct device_attribute *attr, */ static void set_light_sens_switch(int value) { if (!write_acpi_int(ls_switch_handle, NULL, value, NULL)) if (write_acpi_int(ls_switch_handle, NULL, value, NULL)) printk(ASUS_WARNING "Error setting light sensor switch\n"); hotk->light_switch = value; } Loading @@ -672,7 +678,7 @@ static ssize_t store_lssw(struct device *dev, struct device_attribute *attr, static void set_light_sens_level(int value) { if (!write_acpi_int(ls_level_handle, NULL, value, NULL)) if (write_acpi_int(ls_level_handle, NULL, value, NULL)) printk(ASUS_WARNING "Error setting light sensor level\n"); hotk->light_level = value; } Loading Loading @@ -860,7 +866,7 @@ static int asus_hotk_get_info(void) printk(ASUS_WARNING "Couldn't get the DSDT table header\n"); /* We have to write 0 on init this far for all ASUS models */ if (!write_acpi_int(hotk->handle, "INIT", 0, &buffer)) { if (write_acpi_int(hotk->handle, "INIT", 0, &buffer)) { printk(ASUS_ERR "Hotkey initialization failed\n"); return -ENODEV; } Loading Loading
Documentation/thinkpad-acpi.txt +108 −8 Original line number Diff line number Diff line ThinkPad ACPI Extras Driver Version 0.17 October 04th, 2007 Version 0.19 January 06th, 2008 Borislav Deianov <borislav@users.sf.net> Henrique de Moraes Holschuh <hmh@hmh.eng.br> Loading Loading @@ -215,6 +215,11 @@ The following commands can be written to the /proc/acpi/ibm/hotkey file: ... any other 8-hex-digit mask ... echo reset > /proc/acpi/ibm/hotkey -- restore the original mask The procfs interface does not support NVRAM polling control. So as to maintain maximum bug-to-bug compatibility, it does not report any masks, nor does it allow one to manipulate the hot key mask when the firmware does not support masks at all, even if NVRAM polling is in use. sysfs notes: hotkey_bios_enabled: Loading @@ -231,17 +236,26 @@ sysfs notes: to this value. hotkey_enable: Enables/disables the hot keys feature, and reports current status of the hot keys feature. Enables/disables the hot keys feature in the ACPI firmware, and reports current status of the hot keys feature. Has no effect on the NVRAM hot key polling functionality. 0: disables the hot keys feature / feature disabled 1: enables the hot keys feature / feature enabled hotkey_mask: bit mask to enable driver-handling and ACPI event generation for each hot key (see above). Returns the current status of the hot keys mask, and allows one to modify it. bit mask to enable driver-handling (and depending on the firmware, ACPI event generation) for each hot key (see above). Returns the current status of the hot keys mask, and allows one to modify it. Note: when NVRAM polling is active, the firmware mask will be different from the value returned by hotkey_mask. The driver will retain enabled bits for hotkeys that are under NVRAM polling even if the firmware refuses them, and will not set these bits on the firmware hot key mask. hotkey_all_mask: bit mask that should enable event reporting for all Loading @@ -257,12 +271,48 @@ sysfs notes: handled by the firmware anyway. Echo it to hotkey_mask above, to use. hotkey_source_mask: bit mask that selects which hot keys will the driver poll the NVRAM for. This is auto-detected by the driver based on the capabilities reported by the ACPI firmware, but it can be overridden at runtime. Hot keys whose bits are set in both hotkey_source_mask and also on hotkey_mask are polled for in NVRAM. Only a few hot keys are available through CMOS NVRAM polling. Warning: when in NVRAM mode, the volume up/down/mute keys are synthesized according to changes in the mixer, so you have to use volume up or volume down to unmute, as per the ThinkPad volume mixer user interface. When in ACPI event mode, volume up/down/mute are reported as separate events, but this behaviour may be corrected in future releases of this driver, in which case the ThinkPad volume mixer user interface semanthics will be enforced. hotkey_poll_freq: frequency in Hz for hot key polling. It must be between 0 and 25 Hz. Polling is only carried out when strictly needed. Setting hotkey_poll_freq to zero disables polling, and will cause hot key presses that require NVRAM polling to never be reported. Setting hotkey_poll_freq too low will cause repeated pressings of the same hot key to be misreported as a single key press, or to not even be detected at all. The recommended polling frequency is 10Hz. hotkey_radio_sw: if the ThinkPad has a hardware radio switch, this attribute will read 0 if the switch is in the "radios disabled" postition, and 1 if the switch is in the "radios enabled" position. This attribute has poll()/select() support. hotkey_report_mode: Returns the state of the procfs ACPI event report mode filter for hot keys. If it is set to 1 (the default), Loading @@ -277,6 +327,25 @@ sysfs notes: May return -EPERM (write access locked out by module parameter) or -EACCES (read-only). wakeup_reason: Set to 1 if the system is waking up because the user requested a bay ejection. Set to 2 if the system is waking up because the user requested the system to undock. Set to zero for normal wake-ups or wake-ups due to unknown reasons. This attribute has poll()/select() support. wakeup_hotunplug_complete: Set to 1 if the system was waken up because of an undock or bay ejection request, and that request was sucessfully completed. At this point, it might be useful to send the system back to sleep, at the user's choice. Refer to HKEY events 0x4003 and 0x3003, below. This attribute has poll()/select() support. input layer notes: A Hot key is mapped to a single input layer EV_KEY event, possibly Loading Loading @@ -427,6 +496,23 @@ Non hot-key ACPI HKEY event map: The above events are not propagated by the driver, except for legacy compatibility purposes when hotkey_report_mode is set to 1. 0x2304 System is waking up from suspend to undock 0x2305 System is waking up from suspend to eject bay 0x2404 System is waking up from hibernation to undock 0x2405 System is waking up from hibernation to eject bay The above events are never propagated by the driver. 0x3003 Bay ejection (see 0x2x05) complete, can sleep again 0x4003 Undocked (see 0x2x04), can sleep again 0x5009 Tablet swivel: switched to tablet mode 0x500A Tablet swivel: switched to normal mode 0x500B Tablet pen insterted into its storage bay 0x500C Tablet pen removed from its storage bay 0x5010 Brightness level changed (newer Lenovo BIOSes) The above events are propagated by the driver. Compatibility notes: ibm-acpi and thinkpad-acpi 0.15 (mainline kernels before 2.6.23) never Loading Loading @@ -1263,3 +1349,17 @@ Sysfs interface changelog: and the hwmon class for libsensors4 (lm-sensors 3) compatibility. Moved all hwmon attributes to this new platform device. 0x020100: Marker for thinkpad-acpi with hot key NVRAM polling support. If you must, use it to know you should not start an userspace NVRAM poller (allows to detect when NVRAM is compiled out by the user because it is unneeded/undesired in the first place). 0x020101: Marker for thinkpad-acpi with hot key NVRAM polling and proper hotkey_mask semanthics (version 8 of the NVRAM polling patch). Some development snapshots of 0.18 had an earlier version that did strange things to hotkey_mask. 0x020200: Add poll()/select() support to the following attributes: hotkey_radio_sw, wakeup_hotunplug_complete, wakeup_reason
drivers/acpi/asus_acpi.c +45 −10 Original line number Diff line number Diff line Loading @@ -142,6 +142,7 @@ struct asus_hotk { xxN, //M2400N, M3700N, M5200N, M6800N, S1300N, S5200N A4S, //Z81sp //(Centrino) F3Sa, END_MODEL } model; //Models currently supported u16 event_count[128]; //count for each event TODO make this better Loading Loading @@ -405,7 +406,20 @@ static struct model_data model_conf[END_MODEL] = { .brightness_get = "GPLV", .mt_bt_switch = "BLED", .mt_wled = "WLED" } }, { .name = "F3Sa", .mt_bt_switch = "BLED", .mt_wled = "WLED", .mt_mled = "MLED", .brightness_get = "GPLV", .brightness_set = "SPLV", .mt_lcd_switch = "\\_SB.PCI0.SBRG.EC0._Q10", .lcd_status = "\\_SB.PCI0.SBRG.EC0.RPIN", .display_get = "\\ADVG", .display_set = "SDSP", }, }; Loading Loading @@ -710,15 +724,8 @@ static int get_lcd_state(void) { int lcd = 0; if (hotk->model != L3H) { /* We don't have to check anything if we are here */ if (!read_acpi_int(NULL, hotk->methods->lcd_status, &lcd)) printk(KERN_WARNING "Asus ACPI: Error reading LCD status\n"); if (hotk->model == L2D) lcd = ~lcd; } else { /* L3H and the like have to be handled differently */ if (hotk->model == L3H) { /* L3H and the like have to be handled differently */ acpi_status status = 0; struct acpi_object_list input; union acpi_object mt_params[2]; Loading @@ -745,6 +752,32 @@ static int get_lcd_state(void) if (out_obj.type == ACPI_TYPE_INTEGER) /* That's what the AML code does */ lcd = out_obj.integer.value >> 8; } else if (hotk->model == F3Sa) { unsigned long tmp; union acpi_object param; struct acpi_object_list input; acpi_status status; /* Read pin 11 */ param.type = ACPI_TYPE_INTEGER; param.integer.value = 0x11; input.count = 1; input.pointer = ¶m; status = acpi_evaluate_integer(NULL, hotk->methods->lcd_status, &input, &tmp); if (status != AE_OK) return -1; lcd = tmp; } else { /* We don't have to check anything if we are here */ if (!read_acpi_int(NULL, hotk->methods->lcd_status, &lcd)) printk(KERN_WARNING "Asus ACPI: Error reading LCD status\n"); if (hotk->model == L2D) lcd = ~lcd; } return (lcd & 1); Loading Loading @@ -1134,6 +1167,8 @@ static int asus_model_match(char *model) return W5A; else if (strncmp(model, "A4S", 3) == 0) return A4S; else if (strncmp(model, "F3Sa", 4) == 0) return F3Sa; else return END_MODEL; } Loading
drivers/misc/Kconfig +19 −0 Original line number Diff line number Diff line Loading @@ -219,6 +219,25 @@ config THINKPAD_ACPI_BAY If you are not sure, say Y here. config THINKPAD_ACPI_HOTKEY_POLL bool "Suport NVRAM polling for hot keys" depends on THINKPAD_ACPI default y ---help--- Some thinkpad models benefit from NVRAM polling to detect a few of the hot key press events. If you know your ThinkPad model does not need to do NVRAM polling to support any of the hot keys you use, unselecting this option will save about 1kB of memory. ThinkPads T40 and newer, R52 and newer, and X31 and newer are unlikely to need NVRAM polling in their latest BIOS versions. NVRAM polling can detect at most the following keys: ThinkPad/Access IBM, Zoom, Switch Display (fn+F7), ThinkLight, Volume up/down/mute, Brightness up/down, Display Expand (fn+F8), Hibernate (fn+F12). If you are not sure, say Y here. The driver enables polling only if it is strictly necessary to do so. config ATMEL_SSC tristate "Device driver for Atmel SSC peripheral" Loading
drivers/misc/asus-laptop.c +16 −10 Original line number Diff line number Diff line Loading @@ -254,7 +254,7 @@ ASUS_LED(gled, "gaming"); * method is searched within the scope of the handle, can be NULL. The output * of the method is written is output, which can also be NULL * * returns 1 if write is successful, 0 else. * returns 0 if write is successful, -1 else. */ static int write_acpi_int(acpi_handle handle, const char *method, int val, struct acpi_buffer *output) Loading @@ -263,13 +263,19 @@ static int write_acpi_int(acpi_handle handle, const char *method, int val, union acpi_object in_obj; //the only param we use acpi_status status; if (!handle) return 0; params.count = 1; params.pointer = &in_obj; in_obj.type = ACPI_TYPE_INTEGER; in_obj.integer.value = val; status = acpi_evaluate_object(handle, (char *)method, ¶ms, output); return (status == AE_OK); if (status == AE_OK) return 0; else return -1; } static int read_wireless_status(int mask) Loading Loading @@ -321,7 +327,7 @@ static void write_status(acpi_handle handle, int out, int mask) switch (mask) { case MLED_ON: out = !out & 0x1; out = !(out & 0x1); break; case GLED_ON: out = (out & 0x1) + 1; Loading @@ -335,7 +341,7 @@ static void write_status(acpi_handle handle, int out, int mask) break; } if (handle && !write_acpi_int(handle, NULL, out, NULL)) if (write_acpi_int(handle, NULL, out, NULL)) printk(ASUS_WARNING " write failed %x\n", mask); } Loading Loading @@ -415,7 +421,7 @@ static int set_brightness(struct backlight_device *bd, int value) value = (0 < value) ? ((15 < value) ? 15 : value) : 0; /* 0 <= value <= 15 */ if (!write_acpi_int(brightness_set_handle, NULL, value, NULL)) { if (write_acpi_int(brightness_set_handle, NULL, value, NULL)) { printk(ASUS_WARNING "Error changing brightness\n"); ret = -EIO; } Loading Loading @@ -545,7 +551,7 @@ static ssize_t store_ledd(struct device *dev, struct device_attribute *attr, rv = parse_arg(buf, count, &value); if (rv > 0) { if (!write_acpi_int(ledd_set_handle, NULL, value, NULL)) if (write_acpi_int(ledd_set_handle, NULL, value, NULL)) printk(ASUS_WARNING "LED display write failed\n"); else hotk->ledd_status = (u32) value; Loading Loading @@ -590,7 +596,7 @@ static ssize_t store_bluetooth(struct device *dev, static void set_display(int value) { /* no sanity check needed for now */ if (!write_acpi_int(display_set_handle, NULL, value, NULL)) if (write_acpi_int(display_set_handle, NULL, value, NULL)) printk(ASUS_WARNING "Error setting display\n"); return; } Loading Loading @@ -647,7 +653,7 @@ static ssize_t store_disp(struct device *dev, struct device_attribute *attr, */ static void set_light_sens_switch(int value) { if (!write_acpi_int(ls_switch_handle, NULL, value, NULL)) if (write_acpi_int(ls_switch_handle, NULL, value, NULL)) printk(ASUS_WARNING "Error setting light sensor switch\n"); hotk->light_switch = value; } Loading @@ -672,7 +678,7 @@ static ssize_t store_lssw(struct device *dev, struct device_attribute *attr, static void set_light_sens_level(int value) { if (!write_acpi_int(ls_level_handle, NULL, value, NULL)) if (write_acpi_int(ls_level_handle, NULL, value, NULL)) printk(ASUS_WARNING "Error setting light sensor level\n"); hotk->light_level = value; } Loading Loading @@ -860,7 +866,7 @@ static int asus_hotk_get_info(void) printk(ASUS_WARNING "Couldn't get the DSDT table header\n"); /* We have to write 0 on init this far for all ASUS models */ if (!write_acpi_int(hotk->handle, "INIT", 0, &buffer)) { if (write_acpi_int(hotk->handle, "INIT", 0, &buffer)) { printk(ASUS_ERR "Hotkey initialization failed\n"); return -ENODEV; } Loading