diff options
author | Bjorn Helgaas <bjorn.helgaas@hp.com> | 2009-06-22 16:41:30 -0400 |
---|---|---|
committer | Len Brown <len.brown@intel.com> | 2009-06-25 12:16:33 -0400 |
commit | 5efc5476184173996dfcce780c2bb5e727df674e (patch) | |
tree | d1c1fe6912e9c5eda7016a012f8e9f4f5639182e /drivers/acpi | |
parent | 80f20fef6a2381402e59b169eb51b989cc175ab7 (diff) |
ACPI: EC: move acpi_ec_start() after acpi_ec_add()
This patch rearranges ec_install_handlers() and acpi_ec_start() so
acpi_ec_start() ends up just after acpi_ec_add(). A subsequent patch
will merge them.
Code movement only; no functional change.
Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>
CC: Alexey Starikovskiy <astarikovskiy@suse.de>
Signed-off-by: Len Brown <len.brown@intel.com>
Diffstat (limited to 'drivers/acpi')
-rw-r--r-- | drivers/acpi/ec.c | 112 |
1 files changed, 56 insertions, 56 deletions
diff --git a/drivers/acpi/ec.c b/drivers/acpi/ec.c index 391f331674c7..8b387a48e843 100644 --- a/drivers/acpi/ec.c +++ b/drivers/acpi/ec.c | |||
@@ -788,6 +788,42 @@ ec_parse_device(acpi_handle handle, u32 Level, void *context, void **retval) | |||
788 | return AE_CTRL_TERMINATE; | 788 | return AE_CTRL_TERMINATE; |
789 | } | 789 | } |
790 | 790 | ||
791 | static int ec_install_handlers(struct acpi_ec *ec) | ||
792 | { | ||
793 | acpi_status status; | ||
794 | if (test_bit(EC_FLAGS_HANDLERS_INSTALLED, &ec->flags)) | ||
795 | return 0; | ||
796 | status = acpi_install_gpe_handler(NULL, ec->gpe, | ||
797 | ACPI_GPE_EDGE_TRIGGERED, | ||
798 | &acpi_ec_gpe_handler, ec); | ||
799 | if (ACPI_FAILURE(status)) | ||
800 | return -ENODEV; | ||
801 | acpi_set_gpe_type(NULL, ec->gpe, ACPI_GPE_TYPE_RUNTIME); | ||
802 | acpi_enable_gpe(NULL, ec->gpe); | ||
803 | status = acpi_install_address_space_handler(ec->handle, | ||
804 | ACPI_ADR_SPACE_EC, | ||
805 | &acpi_ec_space_handler, | ||
806 | NULL, ec); | ||
807 | if (ACPI_FAILURE(status)) { | ||
808 | if (status == AE_NOT_FOUND) { | ||
809 | /* | ||
810 | * Maybe OS fails in evaluating the _REG object. | ||
811 | * The AE_NOT_FOUND error will be ignored and OS | ||
812 | * continue to initialize EC. | ||
813 | */ | ||
814 | printk(KERN_ERR "Fail in evaluating the _REG object" | ||
815 | " of EC device. Broken bios is suspected.\n"); | ||
816 | } else { | ||
817 | acpi_remove_gpe_handler(NULL, ec->gpe, | ||
818 | &acpi_ec_gpe_handler); | ||
819 | return -ENODEV; | ||
820 | } | ||
821 | } | ||
822 | |||
823 | set_bit(EC_FLAGS_HANDLERS_INSTALLED, &ec->flags); | ||
824 | return 0; | ||
825 | } | ||
826 | |||
791 | static void ec_remove_handlers(struct acpi_ec *ec) | 827 | static void ec_remove_handlers(struct acpi_ec *ec) |
792 | { | 828 | { |
793 | if (ACPI_FAILURE(acpi_remove_address_space_handler(ec->handle, | 829 | if (ACPI_FAILURE(acpi_remove_address_space_handler(ec->handle, |
@@ -842,6 +878,26 @@ static int acpi_ec_add(struct acpi_device *device) | |||
842 | return 0; | 878 | return 0; |
843 | } | 879 | } |
844 | 880 | ||
881 | static int acpi_ec_start(struct acpi_device *device) | ||
882 | { | ||
883 | struct acpi_ec *ec; | ||
884 | int ret = 0; | ||
885 | |||
886 | if (!device) | ||
887 | return -EINVAL; | ||
888 | |||
889 | ec = acpi_driver_data(device); | ||
890 | |||
891 | if (!ec) | ||
892 | return -EINVAL; | ||
893 | |||
894 | ret = ec_install_handlers(ec); | ||
895 | |||
896 | /* EC is fully operational, allow queries */ | ||
897 | clear_bit(EC_FLAGS_QUERY_PENDING, &ec->flags); | ||
898 | return ret; | ||
899 | } | ||
900 | |||
845 | static int acpi_ec_remove(struct acpi_device *device, int type) | 901 | static int acpi_ec_remove(struct acpi_device *device, int type) |
846 | { | 902 | { |
847 | struct acpi_ec *ec; | 903 | struct acpi_ec *ec; |
@@ -888,62 +944,6 @@ ec_parse_io_ports(struct acpi_resource *resource, void *context) | |||
888 | return AE_OK; | 944 | return AE_OK; |
889 | } | 945 | } |
890 | 946 | ||
891 | static int ec_install_handlers(struct acpi_ec *ec) | ||
892 | { | ||
893 | acpi_status status; | ||
894 | if (test_bit(EC_FLAGS_HANDLERS_INSTALLED, &ec->flags)) | ||
895 | return 0; | ||
896 | status = acpi_install_gpe_handler(NULL, ec->gpe, | ||
897 | ACPI_GPE_EDGE_TRIGGERED, | ||
898 | &acpi_ec_gpe_handler, ec); | ||
899 | if (ACPI_FAILURE(status)) | ||
900 | return -ENODEV; | ||
901 | acpi_set_gpe_type(NULL, ec->gpe, ACPI_GPE_TYPE_RUNTIME); | ||
902 | acpi_enable_gpe(NULL, ec->gpe); | ||
903 | status = acpi_install_address_space_handler(ec->handle, | ||
904 | ACPI_ADR_SPACE_EC, | ||
905 | &acpi_ec_space_handler, | ||
906 | NULL, ec); | ||
907 | if (ACPI_FAILURE(status)) { | ||
908 | if (status == AE_NOT_FOUND) { | ||
909 | /* | ||
910 | * Maybe OS fails in evaluating the _REG object. | ||
911 | * The AE_NOT_FOUND error will be ignored and OS | ||
912 | * continue to initialize EC. | ||
913 | */ | ||
914 | printk(KERN_ERR "Fail in evaluating the _REG object" | ||
915 | " of EC device. Broken bios is suspected.\n"); | ||
916 | } else { | ||
917 | acpi_remove_gpe_handler(NULL, ec->gpe, | ||
918 | &acpi_ec_gpe_handler); | ||
919 | return -ENODEV; | ||
920 | } | ||
921 | } | ||
922 | |||
923 | set_bit(EC_FLAGS_HANDLERS_INSTALLED, &ec->flags); | ||
924 | return 0; | ||
925 | } | ||
926 | |||
927 | static int acpi_ec_start(struct acpi_device *device) | ||
928 | { | ||
929 | struct acpi_ec *ec; | ||
930 | int ret = 0; | ||
931 | |||
932 | if (!device) | ||
933 | return -EINVAL; | ||
934 | |||
935 | ec = acpi_driver_data(device); | ||
936 | |||
937 | if (!ec) | ||
938 | return -EINVAL; | ||
939 | |||
940 | ret = ec_install_handlers(ec); | ||
941 | |||
942 | /* EC is fully operational, allow queries */ | ||
943 | clear_bit(EC_FLAGS_QUERY_PENDING, &ec->flags); | ||
944 | return ret; | ||
945 | } | ||
946 | |||
947 | static int acpi_ec_stop(struct acpi_device *device, int type) | 947 | static int acpi_ec_stop(struct acpi_device *device, int type) |
948 | { | 948 | { |
949 | struct acpi_ec *ec; | 949 | struct acpi_ec *ec; |