diff options
author | Len Brown <len.brown@intel.com> | 2009-01-09 03:37:48 -0500 |
---|---|---|
committer | Len Brown <len.brown@intel.com> | 2009-01-09 03:37:48 -0500 |
commit | d0302bc62af7983040ea1cd1b5dd2b36e1a6a509 (patch) | |
tree | ef45618ae057e21fff7c82190939fe5f4466cf06 /drivers | |
parent | 106ad8d6b0a7c1a597fab56ec692c39f553fabbc (diff) | |
parent | 237889bf0a62f1399fb2ba0c2a259e6a96597131 (diff) | |
download | linux-d0302bc62af7983040ea1cd1b5dd2b36e1a6a509.tar.gz linux-d0302bc62af7983040ea1cd1b5dd2b36e1a6a509.tar.bz2 linux-d0302bc62af7983040ea1cd1b5dd2b36e1a6a509.zip |
Merge branch 'misc' into release
Conflicts:
include/acpi/acpixf.h
Signed-off-by: Len Brown <len.brown@intel.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/acpi/acpica/tbutils.c | 3 | ||||
-rw-r--r-- | drivers/acpi/pci_link.c | 4 | ||||
-rw-r--r-- | drivers/acpi/video.c | 5 | ||||
-rw-r--r-- | drivers/cpuidle/governors/menu.c | 10 |
4 files changed, 16 insertions, 6 deletions
diff --git a/drivers/acpi/acpica/tbutils.c b/drivers/acpi/acpica/tbutils.c index 3a8d8d2eee92..9684cc827930 100644 --- a/drivers/acpi/acpica/tbutils.c +++ b/drivers/acpi/acpica/tbutils.c @@ -445,7 +445,8 @@ acpi_tb_parse_root_table(acpi_physical_address rsdp_address, u8 flags) /* Differentiate between RSDT and XSDT root tables */ - if (rsdp->revision > 1 && rsdp->xsdt_physical_address) { + if (rsdp->revision > 1 && rsdp->xsdt_physical_address + && !acpi_rsdt_forced) { /* * Root table is an XSDT (64-bit physical addresses). We must use the * XSDT if the revision is > 1 and the XSDT pointer is present, as per diff --git a/drivers/acpi/pci_link.c b/drivers/acpi/pci_link.c index 4869fa1b7892..1c6e73c7865e 100644 --- a/drivers/acpi/pci_link.c +++ b/drivers/acpi/pci_link.c @@ -796,10 +796,6 @@ static int irqrouter_resume(struct sys_device *dev) struct list_head *node = NULL; struct acpi_pci_link *link = NULL; - - /* Make sure SCI is enabled again (Apple firmware bug?) */ - acpi_set_register(ACPI_BITREG_SCI_ENABLE, 1); - list_for_each(node, &acpi_link.entries) { link = list_entry(node, struct acpi_pci_link, node); if (!link) { diff --git a/drivers/acpi/video.c b/drivers/acpi/video.c index 38bf8b43fd19..f261737636da 100644 --- a/drivers/acpi/video.c +++ b/drivers/acpi/video.c @@ -482,6 +482,7 @@ acpi_video_device_lcd_set_level(struct acpi_video_device *device, int level) int status = AE_OK; union acpi_object arg0 = { ACPI_TYPE_INTEGER }; struct acpi_object_list args = { 1, &arg0 }; + int state; arg0.integer.value = level; @@ -490,6 +491,10 @@ acpi_video_device_lcd_set_level(struct acpi_video_device *device, int level) status = acpi_evaluate_object(device->dev->handle, "_BCM", &args, NULL); device->brightness->curr = level; + for (state = 2; state < device->brightness->count; state++) + if (level == device->brightness->levels[state]) + device->backlight->props.brightness = state - 2; + return status; } diff --git a/drivers/cpuidle/governors/menu.c b/drivers/cpuidle/governors/menu.c index 8d7cf3f31450..f1df59f59a37 100644 --- a/drivers/cpuidle/governors/menu.c +++ b/drivers/cpuidle/governors/menu.c @@ -15,12 +15,14 @@ #include <linux/tick.h> #define BREAK_FUZZ 4 /* 4 us */ +#define PRED_HISTORY_PCT 50 struct menu_device { int last_state_idx; unsigned int expected_us; unsigned int predicted_us; + unsigned int current_predicted_us; unsigned int last_measured_us; unsigned int elapsed_us; }; @@ -47,6 +49,12 @@ static int menu_select(struct cpuidle_device *dev) data->expected_us = (u32) ktime_to_ns(tick_nohz_get_sleep_length()) / 1000; + /* Recalculate predicted_us based on prediction_history_pct */ + data->predicted_us *= PRED_HISTORY_PCT; + data->predicted_us += (100 - PRED_HISTORY_PCT) * + data->current_predicted_us; + data->predicted_us /= 100; + /* find the deepest idle state that satisfies our constraints */ for (i = CPUIDLE_DRIVER_STATE_START + 1; i < dev->state_count; i++) { struct cpuidle_state *s = &dev->states[i]; @@ -97,7 +105,7 @@ static void menu_reflect(struct cpuidle_device *dev) measured_us = -1; /* Predict time until next break event */ - data->predicted_us = max(measured_us, data->last_measured_us); + data->current_predicted_us = max(measured_us, data->last_measured_us); if (last_idle_us + BREAK_FUZZ < data->expected_us - target->exit_latency) { |