diff options
Diffstat (limited to 'drivers/misc/thinkpad_acpi.c')
-rw-r--r-- | drivers/misc/thinkpad_acpi.c | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/drivers/misc/thinkpad_acpi.c b/drivers/misc/thinkpad_acpi.c index 56a21e6b80a9..109bd2750439 100644 --- a/drivers/misc/thinkpad_acpi.c +++ b/drivers/misc/thinkpad_acpi.c | |||
@@ -3174,6 +3174,39 @@ static int __init brightness_check_levels(void) | |||
3174 | return (ACPI_SUCCESS(status) && found_node != NULL); | 3174 | return (ACPI_SUCCESS(status) && found_node != NULL); |
3175 | } | 3175 | } |
3176 | 3176 | ||
3177 | static acpi_status __init brightness_find_bcl(acpi_handle handle, u32 lvl, | ||
3178 | void *context, void **rv) | ||
3179 | { | ||
3180 | char name[ACPI_PATH_SEGMENT_LENGTH]; | ||
3181 | struct acpi_buffer buffer = { sizeof(name), &name }; | ||
3182 | |||
3183 | if (ACPI_SUCCESS(acpi_get_name(handle, ACPI_SINGLE_NAME, &buffer)) && | ||
3184 | !strncmp("_BCL", name, sizeof(name) - 1)) { | ||
3185 | *rv = handle; | ||
3186 | return AE_CTRL_TERMINATE; | ||
3187 | } else { | ||
3188 | return AE_OK; | ||
3189 | } | ||
3190 | } | ||
3191 | |||
3192 | static int __init brightness_check_std_acpi_support(void) | ||
3193 | { | ||
3194 | int status; | ||
3195 | void *found_node = NULL; | ||
3196 | |||
3197 | if (!vid_handle) { | ||
3198 | IBM_ACPIHANDLE_INIT(vid); | ||
3199 | } | ||
3200 | if (!vid_handle) | ||
3201 | return 0; | ||
3202 | |||
3203 | /* Search for a _BCL method, but don't execute it */ | ||
3204 | status = acpi_walk_namespace(ACPI_TYPE_METHOD, vid_handle, 3, | ||
3205 | brightness_find_bcl, NULL, &found_node); | ||
3206 | |||
3207 | return (ACPI_SUCCESS(status) && found_node != NULL); | ||
3208 | } | ||
3209 | |||
3177 | static int __init brightness_init(struct ibm_init_struct *iibm) | 3210 | static int __init brightness_init(struct ibm_init_struct *iibm) |
3178 | { | 3211 | { |
3179 | int b; | 3212 | int b; |
@@ -3186,6 +3219,12 @@ static int __init brightness_init(struct ibm_init_struct *iibm) | |||
3186 | dbg_printk(TPACPI_DBG_INIT, | 3219 | dbg_printk(TPACPI_DBG_INIT, |
3187 | "brightness support disabled by module parameter\n"); | 3220 | "brightness support disabled by module parameter\n"); |
3188 | return 1; | 3221 | return 1; |
3222 | } else if (brightness_enable > 1) { | ||
3223 | if (brightness_check_std_acpi_support()) { | ||
3224 | printk(IBM_NOTICE | ||
3225 | "standard ACPI backlight interface available, not loading native one...\n"); | ||
3226 | return 1; | ||
3227 | } | ||
3189 | } | 3228 | } |
3190 | 3229 | ||
3191 | if (!brightness_mode) { | 3230 | if (!brightness_mode) { |