]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - drivers/acpi/acpica/evgpe.c
Merge branch 'for-next' into for-linus
[karo-tx-linux.git] / drivers / acpi / acpica / evgpe.c
index afacf4416c738941287f944d599dd13011b6caf6..837de669743a6824c10886ff331718e600ea0d8f 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2008, Intel Corp.
+ * Copyright (C) 2000 - 2010, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -52,56 +52,11 @@ ACPI_MODULE_NAME("evgpe")
 /* Local prototypes */
 static void ACPI_SYSTEM_XFACE acpi_ev_asynch_execute_gpe_method(void *context);
 
-/*******************************************************************************
- *
- * FUNCTION:    acpi_ev_set_gpe_type
- *
- * PARAMETERS:  gpe_event_info          - GPE to set
- *              Type                    - New type
- *
- * RETURN:      Status
- *
- * DESCRIPTION: Sets the new type for the GPE (wake, run, or wake/run)
- *
- ******************************************************************************/
-
-acpi_status
-acpi_ev_set_gpe_type(struct acpi_gpe_event_info *gpe_event_info, u8 type)
-{
-       acpi_status status;
-
-       ACPI_FUNCTION_TRACE(ev_set_gpe_type);
-
-       /* Validate type and update register enable masks */
-
-       switch (type) {
-       case ACPI_GPE_TYPE_WAKE:
-       case ACPI_GPE_TYPE_RUNTIME:
-       case ACPI_GPE_TYPE_WAKE_RUN:
-               break;
-
-       default:
-               return_ACPI_STATUS(AE_BAD_PARAMETER);
-       }
-
-       /* Disable the GPE if currently enabled */
-
-       status = acpi_ev_disable_gpe(gpe_event_info);
-
-       /* Clear the type bits and insert the new Type */
-
-       gpe_event_info->flags &= ~ACPI_GPE_TYPE_MASK;
-       gpe_event_info->flags |= type;
-       return_ACPI_STATUS(status);
-}
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ev_update_gpe_enable_masks
  *
  * PARAMETERS:  gpe_event_info          - GPE to update
- *              Type                    - What to do: ACPI_GPE_DISABLE or
- *                                        ACPI_GPE_ENABLE
  *
  * RETURN:      Status
  *
@@ -110,8 +65,7 @@ acpi_ev_set_gpe_type(struct acpi_gpe_event_info *gpe_event_info, u8 type)
  ******************************************************************************/
 
 acpi_status
-acpi_ev_update_gpe_enable_masks(struct acpi_gpe_event_info *gpe_event_info,
-                               u8 type)
+acpi_ev_update_gpe_enable_masks(struct acpi_gpe_event_info *gpe_event_info)
 {
        struct acpi_gpe_register_info *gpe_register_info;
        u8 register_bit;
@@ -127,37 +81,14 @@ acpi_ev_update_gpe_enable_masks(struct acpi_gpe_event_info *gpe_event_info,
            (1 <<
             (gpe_event_info->gpe_number - gpe_register_info->base_gpe_number));
 
-       /* 1) Disable case. Simply clear all enable bits */
-
-       if (type == ACPI_GPE_DISABLE) {
-               ACPI_CLEAR_BIT(gpe_register_info->enable_for_wake,
-                              register_bit);
-               ACPI_CLEAR_BIT(gpe_register_info->enable_for_run, register_bit);
-               return_ACPI_STATUS(AE_OK);
-       }
-
-       /* 2) Enable case. Set/Clear the appropriate enable bits */
+       ACPI_CLEAR_BIT(gpe_register_info->enable_for_wake, register_bit);
+       ACPI_CLEAR_BIT(gpe_register_info->enable_for_run, register_bit);
 
-       switch (gpe_event_info->flags & ACPI_GPE_TYPE_MASK) {
-       case ACPI_GPE_TYPE_WAKE:
-               ACPI_SET_BIT(gpe_register_info->enable_for_wake, register_bit);
-               ACPI_CLEAR_BIT(gpe_register_info->enable_for_run, register_bit);
-               break;
-
-       case ACPI_GPE_TYPE_RUNTIME:
-               ACPI_CLEAR_BIT(gpe_register_info->enable_for_wake,
-                              register_bit);
+       if (gpe_event_info->runtime_count)
                ACPI_SET_BIT(gpe_register_info->enable_for_run, register_bit);
-               break;
 
-       case ACPI_GPE_TYPE_WAKE_RUN:
+       if (gpe_event_info->wakeup_count)
                ACPI_SET_BIT(gpe_register_info->enable_for_wake, register_bit);
-               ACPI_SET_BIT(gpe_register_info->enable_for_run, register_bit);
-               break;
-
-       default:
-               return_ACPI_STATUS(AE_BAD_PARAMETER);
-       }
 
        return_ACPI_STATUS(AE_OK);
 }
@@ -167,8 +98,6 @@ acpi_ev_update_gpe_enable_masks(struct acpi_gpe_event_info *gpe_event_info,
  * FUNCTION:    acpi_ev_enable_gpe
  *
  * PARAMETERS:  gpe_event_info          - GPE to enable
- *              write_to_hardware       - Enable now, or just mark data structs
- *                                        (WAKE GPEs should be deferred)
  *
  * RETURN:      Status
  *
@@ -176,9 +105,7 @@ acpi_ev_update_gpe_enable_masks(struct acpi_gpe_event_info *gpe_event_info,
  *
  ******************************************************************************/
 
-acpi_status
-acpi_ev_enable_gpe(struct acpi_gpe_event_info *gpe_event_info,
-                  u8 write_to_hardware)
+acpi_status acpi_ev_enable_gpe(struct acpi_gpe_event_info *gpe_event_info)
 {
        acpi_status status;
 
@@ -186,47 +113,20 @@ acpi_ev_enable_gpe(struct acpi_gpe_event_info *gpe_event_info,
 
        /* Make sure HW enable masks are updated */
 
-       status =
-           acpi_ev_update_gpe_enable_masks(gpe_event_info, ACPI_GPE_ENABLE);
-       if (ACPI_FAILURE(status)) {
+       status = acpi_ev_update_gpe_enable_masks(gpe_event_info);
+       if (ACPI_FAILURE(status))
                return_ACPI_STATUS(status);
-       }
 
        /* Mark wake-enabled or HW enable, or both */
 
-       switch (gpe_event_info->flags & ACPI_GPE_TYPE_MASK) {
-       case ACPI_GPE_TYPE_WAKE:
-
-               ACPI_SET_BIT(gpe_event_info->flags, ACPI_GPE_WAKE_ENABLED);
-               break;
-
-       case ACPI_GPE_TYPE_WAKE_RUN:
-
-               ACPI_SET_BIT(gpe_event_info->flags, ACPI_GPE_WAKE_ENABLED);
-
-               /*lint -fallthrough */
-
-       case ACPI_GPE_TYPE_RUNTIME:
-
-               ACPI_SET_BIT(gpe_event_info->flags, ACPI_GPE_RUN_ENABLED);
-
-               if (write_to_hardware) {
-
-                       /* Clear the GPE (of stale events), then enable it */
-
-                       status = acpi_hw_clear_gpe(gpe_event_info);
-                       if (ACPI_FAILURE(status)) {
-                               return_ACPI_STATUS(status);
-                       }
-
-                       /* Enable the requested runtime GPE */
-
-                       status = acpi_hw_write_gpe_enable_reg(gpe_event_info);
-               }
-               break;
+       if (gpe_event_info->runtime_count) {
+               /* Clear the GPE (of stale events), then enable it */
+               status = acpi_hw_clear_gpe(gpe_event_info);
+               if (ACPI_FAILURE(status))
+                       return_ACPI_STATUS(status);
 
-       default:
-               return_ACPI_STATUS(AE_BAD_PARAMETER);
+               /* Enable the requested runtime GPE */
+               status = acpi_hw_write_gpe_enable_reg(gpe_event_info);
        }
 
        return_ACPI_STATUS(AE_OK);
@@ -252,34 +152,9 @@ acpi_status acpi_ev_disable_gpe(struct acpi_gpe_event_info *gpe_event_info)
 
        /* Make sure HW enable masks are updated */
 
-       status =
-           acpi_ev_update_gpe_enable_masks(gpe_event_info, ACPI_GPE_DISABLE);
-       if (ACPI_FAILURE(status)) {
+       status = acpi_ev_update_gpe_enable_masks(gpe_event_info);
+       if (ACPI_FAILURE(status))
                return_ACPI_STATUS(status);
-       }
-
-       /* Clear the appropriate enabled flags for this GPE */
-
-       switch (gpe_event_info->flags & ACPI_GPE_TYPE_MASK) {
-       case ACPI_GPE_TYPE_WAKE:
-               ACPI_CLEAR_BIT(gpe_event_info->flags, ACPI_GPE_WAKE_ENABLED);
-               break;
-
-       case ACPI_GPE_TYPE_WAKE_RUN:
-               ACPI_CLEAR_BIT(gpe_event_info->flags, ACPI_GPE_WAKE_ENABLED);
-
-               /* fallthrough */
-
-       case ACPI_GPE_TYPE_RUNTIME:
-
-               /* Disable the requested runtime GPE */
-
-               ACPI_CLEAR_BIT(gpe_event_info->flags, ACPI_GPE_RUN_ENABLED);
-               break;
-
-       default:
-               break;
-       }
 
        /*
         * Even if we don't know the GPE type, make sure that we always
@@ -521,7 +396,7 @@ static void ACPI_SYSTEM_XFACE acpi_ev_asynch_execute_gpe_method(void *context)
 
        /* Set the GPE flags for return to enabled state */
 
-       (void)acpi_ev_enable_gpe(gpe_event_info, FALSE);
+       (void)acpi_ev_update_gpe_enable_masks(gpe_event_info);
 
        /*
         * Take a snapshot of the GPE info for this level - we copy the info to