diff options
Diffstat (limited to 'drivers/acpi/ec.c')
-rw-r--r-- | drivers/acpi/ec.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/drivers/acpi/ec.c b/drivers/acpi/ec.c index 2300d81bbc4e..56bee9e065cf 100644 --- a/drivers/acpi/ec.c +++ b/drivers/acpi/ec.c | |||
@@ -652,6 +652,19 @@ static struct acpi_ec *make_acpi_ec(void) | |||
652 | } | 652 | } |
653 | 653 | ||
654 | static acpi_status | 654 | static acpi_status |
655 | acpi_ec_register_query_methods(acpi_handle handle, u32 level, | ||
656 | void *context, void **return_value) | ||
657 | { | ||
658 | struct acpi_namespace_node *node = handle; | ||
659 | struct acpi_ec *ec = context; | ||
660 | int value = 0; | ||
661 | if (sscanf(node->name.ascii, "_Q%x", &value) == 1) { | ||
662 | acpi_ec_add_query_handler(ec, value, handle, NULL, NULL); | ||
663 | } | ||
664 | return AE_OK; | ||
665 | } | ||
666 | |||
667 | static acpi_status | ||
655 | ec_parse_device(acpi_handle handle, u32 Level, void *context, void **retval) | 668 | ec_parse_device(acpi_handle handle, u32 Level, void *context, void **retval) |
656 | { | 669 | { |
657 | acpi_status status; | 670 | acpi_status status; |
@@ -668,6 +681,10 @@ ec_parse_device(acpi_handle handle, u32 Level, void *context, void **retval) | |||
668 | if (ACPI_FAILURE(status)) | 681 | if (ACPI_FAILURE(status)) |
669 | return status; | 682 | return status; |
670 | 683 | ||
684 | /* Find and register all query methods */ | ||
685 | acpi_walk_namespace(ACPI_TYPE_METHOD, handle, 1, | ||
686 | acpi_ec_register_query_methods, ec, NULL); | ||
687 | |||
671 | /* Use the global lock for all EC transactions? */ | 688 | /* Use the global lock for all EC transactions? */ |
672 | acpi_evaluate_integer(handle, "_GLK", NULL, &ec->global_lock); | 689 | acpi_evaluate_integer(handle, "_GLK", NULL, &ec->global_lock); |
673 | 690 | ||